MySQL DB: Делать одновременные записи? - PullRequest
1 голос
/ 10 января 2010

Рассмотрим следующие таблицы для LMS:

   Item (   
        ID BIGINT NOT NULL UNIQUE AUTO_INCREMENT,
        ConnectLog BIGINT NOT NULL,
        ItemClass BIGINT NOT NULL,
        ItemType BIGINT NOT NULL,
        AcqDate TIMESTAMP NOT NULL DEFAULT NOW(),
        Vendor BIGINT NOT NULL,
        Cost DECIMAL(64,2) NOT NULL DEFAULT '0.00',
        Image VARCHAR(255),
        Access INTEGER NOT NULL,
        Notes VARCHAR(255),
        PRIMARY KEY (ID)
    )

 Book   (   
        ID BIGINT NOT NULL UNIQUE AUTO_INCREMENT,
        Item BIGINT NOT NULL UNIQUE,
        ISBN BIGINT,
        Title VARCHAR(255) NOT NULL,
        Authors VARCHAR(255),
        Publisher VARCHAR(255),
        DDC VARCHAR(255),
        PubDate DATETIME,
        Edition VARCHAR(255),
        BookCase VARCHAR(255),
        Shelf VARCHAR(255),
        PRIMARY KEY (ID)
    )   

Теперь, когда пользователь делает запись для Book, сначала должна быть создана запись для Item. Но мне нужно найти ID для записи Item, которая была создана, чтобы я мог использовать это значение для Item в таблице Book ...

Как? : /

Ответы [ 2 ]

4 голосов
/ 10 января 2010

Использование mysql_insert_id()

// Create Entry
$sql = "INSERT INTO TABLE () VALUES()";
mysql_query($sql);
$id = mysql_insert_id();

// Create Book
$sql = "INSERT INTO TABLE (`Item_ID`) VALUES(".$id.")";
mysql_query($sql);

Могу поспорить, что есть команда MySQL, которую вы можете использовать для выполнения одного запроса. Но это работает.

0 голосов
/ 10 января 2010

Согласно этой ссылке , вы можете сделать запрос SQL, например:

INSERT INTO foo (auto,text) VALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text'); # use ID in second table

Я не проверял его, но похоже, что LAST_INSERT_ID () содержит последний вставленный идентификатор, независимо от того, в какую таблицу он был вставлен.

Если вы беспокоитесь о больших нагрузках и если LAST_INSERT_ID () не содержит идентификатор соответствующей записи, вы можете заключить эти операторы SQL в транзакцию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...