mysql - 无法使用 ON DELETE SET DEFAULT 创建外键

标签 mysql sql database database-design

我无法使用 ON DELETE SET DEFAULT 创建外键,但是如果我使用 ON DELETE CASCADE 那么这里所有的工作都是我的 sql

CREATE TABLE person(  
    customer_id INT AUTO_INCREMENT PRIMARY KEY,  
    name VARCHAR(100) UNIQUE 
);


CREATE TABLE habits(  
    customer_id INT AUTO_INCREMENT PRIMARY KEY,  
    habit VARCHAR(100) UNIQUE 
);

INSERT INTO `test`.`habits` (`customer_id`, `habit`) VALUES (NULL, 'smoking'), (NULL, 'drinking');
INSERT INTO `test`.`person` (`customer_id`, `name`) VALUES (NULL, 'John'), (NULL, 'Steve');

CREATE TABLE foreigner(  
    customer_id INT AUTO_INCREMENT PRIMARY KEY,  
    customer VARCHAR(100) DEFAULT 'John', 
    habbit  VARCHAR(100) DEFAULT 'smoking', 
    FOREIGN KEY (customer) REFERENCES person(name)  ON DELETE SET DEFAULT ON UPDATE CASCADE,
    FOREIGN KEY (habbit) REFERENCES habits(habit)  ON DELETE SET DEFAULT ON UPDATE CASCADE     
);

奇怪的是,如果我使用 ON DELETE CASCADE ....有什么想法吗?

最佳答案

来自MySQL Reference Manual ...

SET DEFAULT: This action is recognized by the parser, but InnoDB rejects table definitions containing ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT clauses.

您可以尝试 SET NULL,但我不确定这是否会给您带来其他问题。

关于mysql - 无法使用 ON DELETE SET DEFAULT 创建外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881424/

相关文章:

sql-server - SqlServer 存储过程和 View 的版本控制/代码存储库

python - pymysql.err.操作错误 : 2013 with pymysql and SQLAlchemy

PHP-HTML5-Form - 我的查询生成的下拉列表发布了一个空白值

php - 如何更新上次登录时间(PHP 和 SQL)?

mysql - 初级SQL语句

sql - 使用in子句时如何获取SQL查询中的缺失值

php - 来自服务器的纯文本响应 (PHP/MySQL)

PHP - 当有人尝试使用已被占用的用户名进行注册时,MySQL 错误 "Error: Query was empty"

sql - PostgreSQL 在存储函数中获取并释放 LOCK

ruby-on-rails - ActiveRecord:验证和写入数据库之间的并发访问