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语句应该失败,但实际上并没有失败。
为什么?
发布于 2010-02-24 04:16:18
应在列定义下面显式定义外键。
您还应该使product_id无签名,因为父密钥是无签名的:
CREATE TABLE orders (
id integer PRIMARY KEY auto_increment,
product_id integer unsigned,
quantity integer,
INDEX product_id_idx (product_id),
CONSTRAINT FK_ORDER_TO_PRODUCT FOREIGN KEY (product_id) REFERENCES products (id)
) engine=innodb;发布于 2010-02-24 04:03:41
仅当MySQL使用InnoDB存储引擎时才支持外键。
MySQL使用MyISAM作为默认存储引擎,其中外键约束和被忽略。
使用下面的表格来尝试您的示例:
CREATE TABLE products (
id integer unsigned auto_increment primary key
) ENGINE=INNODB;
CREATE TABLE orders (
id integer PRIMARY KEY auto_increment,
product_id integer unsigned,
quantity integer,
INDEX product_id_idx (product_id),
FOREIGN KEY (product_id) REFERENCES products (id)
) ENGINE=INNODB;还要确保引用列和引用列的数据类型完全相同。
https://stackoverflow.com/questions/2321270
复制相似问题