gpt4 book ai didi

需要强制 MYSQL 外键

转载 作者:行者123 更新时间:2023-11-29 14:49:03 26 4
gpt4 key购买 nike

考虑以下 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","Some Child");
INSERT INTO CHILD VALUES("PARENT A","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 中任何内容都不匹配的值。我认为外键限制会阻止这种情况发生。
* 第二个是当从 PARENT 中删除 PARENT A 时,MySQL 不会删除 CHILD 中的 PARENT A 记录>。我认为级联声明可以实现这一点。

我觉得我错过了一些明显的东西。有什么建议吗?

最佳答案

您需要指定表使用 InnoDB 引擎。默认情况下,MySQL 将使用 MyISAM 表,它理解“创建表”查询中的外键规范,但忽略键本身。

如果您执行“show create table PARENT”,您很可能会看到 ENGINE=MyISAM

关于需要强制 MYSQL 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com