【发布时间】:2015-10-14 17:12:47
【问题描述】:
结构:
表 A)
CREATE TABLE Item (
Id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique id of an item',
`By` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (Id),
CONSTRAINT FK_Item_User_Name FOREIGN KEY (`By`)
REFERENCES User(Name) ON DELETE NO ACTION ON UPDATE CASCADE
)
表 B)
CREATE TABLE ItemName (
Item_Id INT(11) UNSIGNED NOT NULL COMMENT 'Item id this name is referencing',
Language VARCHAR(5) NOT NULL COMMENT 'language code by ISO 639-2/T',
Translation VARCHAR(50) NOT NULL COMMENT 'Item name for given language',
PRIMARY KEY (Item_Id, Language),
CONSTRAINT FK_ItemName_Item_Id FOREIGN KEY (Item_Id)
REFERENCES Item(Id) ON DELETE CASCADE ON UPDATE CASCADE
)
表 C)
CREATE TABLE User (
Name VARCHAR(50) NOT NULL,
Password VARCHAR(50) NOT NULL,
Salt VARCHAR(255) NOT NULL,
Blocked TINYINT(1) DEFAULT 0,
PRIMARY KEY (Name),
UNIQUE INDEX UK_User_Name (Name)
)
问题:
现在我想插入一个新项目。假设用户向我们提供:
- 翻译
- 语言代码
- 用户名
到目前为止我得到了什么:
我想把它放在一个事务中,然后一个接一个地插入到每个表中。但后来我被困在如何知道在 ItemName.Item_Id 字段中使用什么 Item.Id 因为 Item 表将为插入提供一个新的 Id。
我可以获得最后一个 Item.Id,但如果多个用户要同时插入一个新项目,它可能会指向另一个项目。
ps。引擎=InnoDB
【问题讨论】:
-
我想这会对你有所帮助stackoverflow.com/questions/21185666/…
-
谢谢,link 不过对我的帮助更多。
-
您使用的是什么 API?例如,PHP 的 mysqli 有 last_insert_id()。
-
php mysqli。抱歉,我认为这将在查询级别实现。