Bạn có thể muốn đặt khóa ngoại của mình để chấp nhận NULL
giá trị và sử dụng NULL
thay vì giá trị 0
.
Khái niệm, NULL
có nghĩa là thiếu thiếu giá trị không xác định. Nếu hàng của bạn "không có/cần giá trị", tôi tin rằng NULL
phù hợp hoàn hảo.
Và có, giá trị NULL
sẽ không phá vỡ ràng buộc khóa ngoại của bạn.
Hãy xây dựng một ví dụ cơ bản:
CREATE TABLE parents (
id int PRIMARY KEY,
value int
) ENGINE = INNODB;
CREATE TABLE children (
id int PRIMARY KEY,
parent_id int,
FOREIGN KEY (parent_id) REFERENCES parent (id)
) ENGINE = INNODB;
Sau đó:
INSERT INTO parents VALUES (1, 100);
Query OK, 1 row affected (0.00 sec)
INSERT INTO children VALUES (1, 1);
Query OK, 1 row affected (0.00 sec)
INSERT INTO children VALUES (2, 0);
ERROR 1452 (23000): A foreign key constraint fails
INSERT INTO children VALUES (2, NULL);
Query OK, 1 row affected (0.00 sec)
SELECT * FROM children;
+----+-----------+
| id | parent_id |
+----+-----------+
| 1 | 1 |
| 2 | NULL |
+----+-----------+
2 rows in set (0.01 sec)
Nguồn
2010-10-28 20:04:46