sql >> Databasteknik >  >> RDS >> Mysql

MySQL främmande nyckelbegränsning - heltalskolumn

Du kanske vill ställa in din främmande nyckel så att den accepterar NULL värden och använd en NULL istället för en 0 värde.

Konceptuellt, NULL betyder ett saknat okänt värde . Om din rad "inte har/behöver värdet", tror jag en NULL passar in perfekt.

Och ja, en NULL värde skulle inte bryta din främmande nyckel-begränsning.

Låt oss bygga ett grundläggande exempel:

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;

Sedan:

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)


  1. SQL Server 2016:Skapa en tabell från ett SQL-skript

  2. "vänners vänner" SQL-fråga

  3. SCOPE_IDENTITY() för GUID?

  4. Hur du moderniserar ditt företag 2022