mySQL DB: eşzamanlı girişleri yapma?

2 Cevap php

Bir LMS için aşağıdaki tabloları düşünün:

   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)
    )   

Şimdi bir kullanıcı Item ilk olarak oluşturulacak olan için Book, ilk olarak bir giriş için bir giriş yapar. Ama öylesine i Item Book tabloda için bu değeri kullanabilirsiniz ID oluşturuldu Item giriş için bulmalıyız ...

Nasıl? :/

2 Cevap

Kullan 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);

Ben tek bir sorguda bunu yapmak için kullanabileceğiniz bir MySQL Command var bahis. Ancak, bu işleri.

Göre this link, sizin gibi bir SQL sorgusu yapabilirsiniz:

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

Ben henüz denemedim, ama LAST_INSERT_ID () son eklenen kimliği içeren sanki olursa olsun sokulmuştur hangi tablo görünüyor.

Ağır yükler hakkında endişeleniyorsanız, ve LAST_INSERT_ID () uygun girişin kimliğini içeren değil, bir transaction bu SQL ifadeleri sarın.