如何解决需要执行MYSQL外键
| 考虑以下SQL: CREATE DATABASE TEST01234;
USE TEST01234;
CREATE TABLE PARENT (
PARENT_NAME varchar(255) PRIMARY KEY,PARENT_DESC varchar(255));
CREATE TABLE CHILD (
PARENT_NAME varchar(255),CHILD_NAME varchar(255),CHILD_DESC varchar(255),PRIMARY KEY (PARENT_NAME,CHILD_NAME),FOREIGN KEY (PARENT_NAME) REFERENCES PARENT(PARENT_NAME)
ON UPDATE CASCADE
ON DELETE CASCADE);
INSERT INTO PARENT VALUES(\"PARENT A\",\"Some Parent\");
INSERT INTO CHILD VALUES(\"PARENT A\",\"CHILD A\",\"Some Child\");
INSERT INTO CHILD VALUES(\"PARENT A\",\"CHILD B\",\"CHILD C\",\"Some Child\");
INSERT INTO CHILD VALUES(\"PARENT B\",\"CHILD D\",\"Non-present Parent\");
DELETE FROM PARENT WHERE PARENT_NAME = \"PARENT A\";
SELECT * FROM CHILD;
也,
mysql> SHOW VARIABLES LIKE \"%version%\";
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| protocol_version | 10 |
| version | 5.1.41-3ubuntu12.10 |
| version_comment | (Ubuntu) |
| version_compile_machine | i486 |
| version_compile_os | debian-linux-gnu |
+-------------------------+---------------------+
5 rows in set (0.00 sec)
我认为有两件事正在发生,这是不同的。
*第一个是MySQL允许我在CHILD
中插入与PARENT
中的任何内容都不匹配的值。我认为外键约束将阻止这种情况的发生。
*第二个问题是,当从“ 3”中删除“ 4”时,MySQL不会从“ 2”中删除“ 4”记录。我认为级联语句可以实现这一目标。
我觉得我缺少明显的东西。有什么建议么?
解决方法
您需要为表指定使用InnoDB引擎。默认情况下,MySQL将使用MyISAM表,该表可以理解“创建表”查询中的外键规范,但会忽略键本身。
如果执行“显示创建表PARENT”,则很有可能会看到“ 8”。
, 您在使用InnoDB吗? MyISAM(MySQL中的默认引擎)不支持外键,而InnoDB则支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。