在MySQL中,每個表一般都會設置自增id來作為主鍵,以便于唯一標識每一條數據。但是,在一些特殊的情況下,我們可能需要多個表共用一個自增id。
下面,我們介紹一種實現多個表共用自增id的方法。
CREATE TABLE id_generator ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) );
我們創建了一個名為id_generator的表,用來生成自增id。接下來,我們創建需要共用自增id的表,并在表中設置一個新的字段,以引用id_generator表中的自增id。
CREATE TABLE table1 ( id INT NOT NULL, name VARCHAR(20), PRIMARY KEY (id), INDEX (id) ); CREATE TABLE table2 ( id INT NOT NULL, age INT, PRIMARY KEY (id), INDEX (id) );
在上述代碼中,我們在每個表中都設置了一個名為id的字段,并設置其為主鍵,并且在id字段上創建了索引,以提高查詢效率。
接下來,我們需要為每個表創建一個觸發器,用來插入新記錄時自動從id_generator表中獲取自增id,并將其賦值給表中的id字段。
CREATE TRIGGER tr_insert_table1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN INSERT INTO id_generator (id) VALUES (NULL); SET NEW.id = LAST_INSERT_ID(); END; CREATE TRIGGER tr_insert_table2 BEFORE INSERT ON table2 FOR EACH ROW BEGIN INSERT INTO id_generator (id) VALUES (NULL); SET NEW.id = LAST_INSERT_ID(); END;
在上述代碼中,我們為table1和table2分別創建了一個觸發器,在每次插入新記錄時,都會先向id_generator表中插入一個新的自增id,并將此id賦值給當前記錄的id字段。
現在,我們就完成了多個表共用自增id的實現。