CREATE TABLE `table_1` ( `ID` int(10) unsigned NOT NULL auto_increment, `value` char(10) default NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `table_2` ( `ID` int(10) unsigned NOT NULL auto_increment, `ID_table_1` int(10) unsigned default NULL, `value` char(10) default NULL, PRIMARY KEY (`ID`), KEY `ID_table_1` (`ID_table_1`), CONSTRAINT `table_2_ibfk_1` FOREIGN KEY (`ID_table_1`) REFERENCES `table_1` (`ID`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO table_1 (value) VALUES ('a'),('b'),('c'),('d'); INSERT INTO table_2 (ID_table_1, value) VALUES (2,'ha'),(2,'hb'),(NULL,'hc'),(NULL,'hd'), (1,'he'), (3,'hf'); mysql> select * from table_2; +----+------------+-------+ | ID | ID_table_1 | value | +----+------------+-------+ | 1 | 2 | ha | | 2 | 2 | hb | | 3 | NULL | hc | | 4 | NULL | hd | | 5 | 1 | he | | 6 | 3 | hf | +----+------------+-------+ ALTER TABLE table_2 CHANGE ID_table_1 ID_table_1 INT(10) UNSIGNED NOT NULL; SHOW WARNINGS; +---------+------+-------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------+ | Warning | 1265 | Data truncated for column 'ID_table_1' at row 3 | | Warning | 1265 | Data truncated for column 'ID_table_1' at row 4 | +---------+------+-------------------------------------------------+ mysql> select * from table_2; +----+------------+-------+ | ID | ID_table_1 | value | +----+------------+-------+ | 1 | 2 | ha | | 2 | 2 | hb | | 3 | 0 | hc | | 4 | 0 | hd | | 5 | 1 | he | | 6 | 3 | hf | +----+------------+-------+ mysql> UPDATE table_2 SET ID_table_1=0 WHERE ID=3; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> UPDATE table_2 SET ID_table_1=5 WHERE ID=3; ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint fails mysql> UPDATE table_2 SET ID_table_1=0 WHERE ID=1; ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint fails