如何编辑我的MySQL表,以便从父表中删除行不会';是否不需要对子表行进行级联删除?

如何编辑我的MySQL表,以便从父表中删除行不会';是否不需要对子表行进行级联删除?,mysql,Mysql,我的问题是:我应该如何编辑以下表格: CREATE TABLE users( id int UNSIGNED AUTO_INCREMENT PRIMARY KEY, name varchar(20) NOT NULL, surname varchar(20) NOT NULL, faculty varchar(35) NOT NULL, username varchar(20) NOT NULL UNIQUE, password varchar(20) NOT NULL, is_admin bo

我的问题是:我应该如何编辑以下表格:

CREATE TABLE users(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name varchar(20) NOT NULL,
surname varchar(20) NOT NULL,
faculty varchar(35) NOT NULL,
username varchar(20) NOT NULL UNIQUE,
password varchar(20) NOT NULL,
is_admin boolean NOT NULL DEFAULT 0,
account_limit int UNSIGNED,
created_at datetime
) CHARACTER SET utf8 COLLATE utf8_general_ci;



CREATE TABLE test_results(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
test_id int UNSIGNED NOT NULL,
test_person_id int UNSIGNED NOT NULL,
score float UNSIGNED NOT NULL,
standard_deviation float UNSIGNED NOT NULL,
average_answer_time float UNSIGNED NOT NULL, 
removed boolean NOT NULL DEFAULT 0,
created_at datetime,
FOREIGN KEY (test_id) REFERENCES test_tasks(id) ON UPDATE CASCADE, FOREIGN KEY (test_person_id) REFERENCES test_persons(id) ON UPDATE CASCADE) CHARACTER SET utf8 COLLATE utf8_general_ci;
因此,如果我从users表中删除一行,我不会在test_results表中得到任何约束错误等。如果test_results中的一行有一个引用用户表行的foreing键,那么

更新:抱歉,我在提问时犹豫了一下:

这是我所有的桌子:

CREATE TABLE users(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name varchar(20) NOT NULL,
surname varchar(20) NOT NULL,
faculty varchar(35) NOT NULL,
username varchar(20) NOT NULL UNIQUE,
password varchar(20) NOT NULL,
is_admin boolean NOT NULL DEFAULT 0,
account_limit int UNSIGNED,
created_at datetime
) CHARACTER SET utf8 COLLATE utf8_general_ci;


CREATE TABLE test_groups(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id int UNSIGNED NOT NULL,
name varchar(60) NOT NULL, 
password varchar(20) NOT NULL,
tests varchar(60),
created_at datetime,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8 COLLATE utf8_general_ci;



CREATE TABLE test_persons(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
group_id int UNSIGNED NOT NULL,
username varchar(45) NOT NULL UNIQUE,
tries int UNSIGNED NOT NULL,
created_at datetime,
FOREIGN KEY (group_id) REFERENCES test_groups(id) ON DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8 COLLATE utf8_general_ci;



CREATE TABLE test_tasks(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id int UNSIGNED NOT NULL,
name varchar(45) NOT NULL,
type varchar(20) NOT NULL,
description text NOT NULL,
question_time int UNSIGNED DEFAULT 500,
answer_time int UNSIGNED DEFAULT 3000,
random_questions boolean NOT NULL DEFAULT 1,
questions varchar(150),
created_at datetime,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE) CHARACTER SET utf8 COLLATE utf8_general_ci;



CREATE TABLE test_results(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
test_id int UNSIGNED NOT NULL,
test_person_id int UNSIGNED NOT NULL,
score float UNSIGNED NOT NULL,
standard_deviation float UNSIGNED NOT NULL,
average_answer_time float UNSIGNED NOT NULL, 
removed boolean NOT NULL DEFAULT 0,
created_at datetime,
FOREIGN KEY (test_id) REFERENCES test_tasks(id) ON UPDATE CASCADE, FOREIGN KEY (test_person_id) REFERENCES test_persons(id) ON UPDATE CASCADE) CHARACTER SET utf8 COLLATE utf8_general_ci;
现在,若我试图从用户表中删除一行,我会得到约束错误,为什么?我是mysql新手

write

ALTER TABLE `test_results`
ADD CONSTRAINT `tbl_userplan_ibfk_1` 
FOREIGN KEY (`test_person_id`) REFERENCES `test_persons(id)`  
ON DELETE CASCADE ON UPDATE CASCADE

外键的工作方式与评论中描述的方式相同,但这不是外键约束的全部要点吗??也就是说,似乎您的问题域导致了一种设计,这种设计创建了这样一种关系,即如果您删除了一个用户记录,子测试数据记录应该会消失……您是说您不想这样做吗?好的,谢谢您的回答:)对不起我的愚蠢问题x)我对这一点不熟悉,而且SQL书很大;D更改了问题的上下文:(