如何在mysql中强制执行约束

时间:2011-03-15 05:28:57

标签: mysql database

 > 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',也会获取课程表中的条目。

此外,即使存在参照完整性,我也可以删除学生表中的记录。 那么,如何强制执行约束呢?

2 个答案:

答案 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;