mysql> create table products(id integer unsigned auto_increment primary key);
Query OK, 0 rows affected (0.05 sec)
mysql> CREATE TABLE orders (
-> id integer PRIMARY KEY auto_increment,
-> product_id integer REFERENCES products (id),
-> quantity integer,
-> INDEX product_id_idx (product_id)
->);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into orders(product_id,quantity) value(1,1);
Query OK, 1 row affected (0.00 sec)
Поскольку продукт 1 не существует, утверждение insert
должно потерпеть неудачу, но на самом деле нет.Почему все еще возможно вставить внешний ключ, который не существует?
Почему?
Почему «unsigned» необходимо для 'product_id', тогда как' id' является 'подписанным' – user198729
Поэтому products.id = unsigned integer orders.products_id должно быть целым числом без знака. вставки в эту таблицу будет производить: ERROR 1452 (23000): Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удается – Cez
Это документированный, но _very_ плохо: http://dev.mysql.com/ doc/refman/5.1/en/innodb-foreign-key-constraints.html (поиск «встроенных спецификаций ССЫЛКИ») –