一次插入多个表

时间:2015-10-14 17:12:47

标签: mysql sql insert innodb

结构:

表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表将AI作为插入的新ID。

我可以获得最后一个Item.Id,但如果多个用户要同时插入一个新项目,它可能会指向另一个项目。

PS。发动机= InnoDB的

1 个答案:

答案 0 :(得分:0)

BEGIN;
INSERT into one table;
get the last_insert_id() -- there are many ways to do this, depending on the API
INSERT into next table...
... ;
COMMIT;

按顺序执行插入操作,以避免违反FOREIGN KEYs