Как применять ограничения в MySQL - PullRequest
1 голос
/ 15 марта 2011
 > 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)
-> );

Вот как я создал две таблицы, а именно: студент и курс.Затем я ввел данные в таблицу студентов.Но когда я ввожу некоторые недопустимые данные в таблицу курсов, это не дает мне никакой ошибки.Например: VALUES ('A1', 'SUB 1', 34);получает запись в таблице курса, даже если в таблице ученика нет первичного ключа «34».

Кроме того, я могу удалить записи в таблице ученика, даже если имеется ссылочная целостность.Итак, как можно применить ограничения?

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Самый простой способ сделать это - изменить механизм хранения на 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;
0 голосов
/ 22 мая 2014

Если у вас есть такая же проблема, если вы уже создали свою таблицу с помощью MyISAM, вы можете изменить ее на InnoDB, используя.

ALTER TABLE table_name ENGINE = InnoDB;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...