> CREATE TABLE student(
-> student_id INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> first_name VARCHAR(10),
-> last_name VARCHAR(10)
-> );
> CREATE TABLE course(
-> course_id CHAR(5) NOT NULL PRIMARY KEY,
-> course_name VARCHAR(50),
-> student_id INT(2) NOT NULL,
-> CONSTRAINT student_student_id_fk
-> FOREIGN KEY (student_id)
-> REFERENCES student(student_id)
-> );
这就是我如何创建两个表,即学生和课程。然后我在学生表中输入数据。但是当我在课程表中输入一些无效数据时,它不会给我任何错误。 例如: 价值观('A1','SUB 1',34); 即使学生表中没有主键'34',也会获取课程表中的条目。
此外,即使存在参照完整性,我也可以删除学生表中的记录。 那么,如何强制执行约束呢?
答案 0 :(得分:3)
最简单的方法是将存储引擎更改为支持约束的InnoDB。
对于旧的MyISAM表,您必须在两个方面使用触发器来强制执行FK关系
一些自助链接
像这样创建你的表
> CREATE TABLE student(
-> student_id INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> first_name VARCHAR(10),
-> last_name VARCHAR(10)
-> ) ENGINE = INNODB;
> CREATE TABLE course(
-> course_id CHAR(5) NOT NULL PRIMARY KEY,
-> course_name VARCHAR(50),
-> student_id INT(2) NOT NULL,
-> CONSTRAINT student_student_id_fk
-> FOREIGN KEY (student_id)
-> REFERENCES student(student_id)
-> ) ENGINE = INNODB;
答案 1 :(得分:0)
对于有相同问题的人,如果您已经使用MyISAM创建了表,则可以使用它将其更改为InnoDB。
ALTER TABLE table_name ENGINE = InnoDB;