MySQL中外碼(外鍵)是用來保持數據一致性和完整性的重要機制。本文將介紹在MySQL中如何創建和使用外碼。
要創建外碼,需要在建表語句中使用FOREIGN KEY關鍵字,指定參照表和參照列:
CREATE TABLE orders ( order_id int NOT NULL, product_id int NOT NULL, customer_id int NOT NULL, PRIMARY KEY (order_id), FOREIGN KEY (product_id) REFERENCES products(product_id), FOREIGN KEY (customer_id) REFERENCES customers(customer_id) );
上面的代碼中,我們創建了一個名為orders的表,其中包含三個列——order_id、product_id和customer_id。order_id列被指定為主鍵,product_id和customer_id列被指定為外鍵,參照了products表和customers表中的product_id和customer_id列。
在使用外碼時,請注意幾個重要的事項:
- 參照表和當前表必須使用同一種存儲引擎。
- 參照表和當前表必須使用同一種字符集和排序規則。
- 參照列必須是一個唯一鍵或主鍵。
- 刪除參照表中的行時,有兩種處理方式:級聯刪除、置空。級聯刪除會自動刪除當前表中關聯的行,置空則會將當前表中關聯的行的外鍵值設置為NULL。
下面是一個示例,說明當參照表中的行被刪除時,當前表中外鍵的處理方式:
CREATE TABLE products ( product_id int PRIMARY KEY, product_name varchar(50) ); CREATE TABLE orders ( order_id int NOT NULL, product_id int NOT NULL, PRIMARY KEY (order_id), FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE ); INSERT INTO products VALUES (1, 'product1'); INSERT INTO orders VALUES (1, 1); DELETE FROM products WHERE product_id = 1; SELECT * FROM orders;
上面的代碼中,我們創建了一個名為products的表和一個名為orders的表。orders表中的product_id列參照了products表中的product_id列,并且設置了ON DELETE CASCADE選項。接著我們向products表中插入了一個行,然后向orders表中插入了一個行。最后,我們刪除了products表中的這個行,再查詢orders表中的內容。結果如下:
Empty set (0.00 sec)
查詢結果為空,這是因為我們在刪除products表中的行時,設置了ON DELETE CASCADE選項,所以orders表中的關聯行也被自動刪除了。
上一篇mysql外碼是外鍵嗎