在開發過程中,我們常常需要從一個表中插入一條記錄,並且在插入成功之後返回這條記錄的關聯ID,以供後續的操作使用。但是,在某些情況下,我們卻無法獲取到這個關聯ID,這時候我們就需要思考如何解決這個問題。
一、使用LAST_INSERT_ID()函數獲取自增ID
當我們在MySQL中使用自增ID作為主鍵時,可以使用LAST_INSERT_ID()函數來獲取剛剛插入記錄的自增ID。
INSERT INTO table1 (column1, column2, column3) VALUES ('value1', 'value2', 'value3'); SELECT LAST_INSERT_ID();
我們可以在插入後緊接著執行SELECT LAST_INSERT_ID()來獲取剛剛插入記錄的自增ID。
二、使用RETURNING語句獲取關聯ID
在PostgreSQL中,我們可以使用RETURNING語句來獲取剛剛插入記錄的關聯ID。
INSERT INTO table1 (column1, column2, column3) VALUES ('value1', 'value2', 'value3') RETURNING id;
這個語句會在插入成功之後返回id列的值作為關聯ID,我們可以直接在程序中獲取這個值。
三、使用CURRVAL()函數獲取序列的當前值
在Oracle中,我們可以使用序列來生成主鍵,然後使用CURRVAL()函數來獲取序列的當前值,作為剛剛插入記錄的關聯ID。
INSERT INTO table1 (column1, column2, column3) VALUES (seq1.NEXTVAL, 'value2', 'value3'); SELECT seq1.CURRVAL FROM dual;
我們可以在插入結束後執行SELECT seq1.CURRVAL來獲取當前序列的值。
四、使用OUTPUT語句獲取關聯ID
在SQL Server中,我們可以使用OUTPUT語句來獲取剛剛插入記錄的關聯ID。
DECLARE @id INT; INSERT INTO table1 (column1, column2, column3) OUTPUT Inserted.id INTO @id VALUES ('value1', 'value2', 'value3'); SELECT @id;
這個語句會在插入成功之後返回Inserted.id列的值作為關聯ID,我們可以把這個值存儲到一個變數中。
五、使用SELECT LAST_INSERT_ID()函數獲取自增ID
在PHP中,我們可以使用mysqli_insert_id()函數或PDO::lastInsertId()方法來獲取剛剛插入記錄的自增ID。
$mysqli = new mysqli('localhost', 'user', 'password', 'database'); $mysqli->query("INSERT INTO table1 (column1, column2, column3) VALUES ('value1', 'value2', 'value3')"); $id = $mysqli->insert_id;
或者:
$pdo = new PDO('mysql:host=localhost;dbname=database', 'user', 'password'); $pdo->query("INSERT INTO table1 (column1, column2, column3) VALUES ('value1', 'value2', 'value3')"); $id = $pdo->lastInsertId();
這兩個函數都可以在執行插入語句之後立即獲取自增ID。
總結
在不同的資料庫中,獲取關聯ID的方式也有所不同。但是,無論使用哪種方式,我們都可以通過這些方法獲取到剛剛插入記錄的關聯ID,以供後續的操作使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241068.html