2011-03-15 2 views
1
> 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) 
->); 

C'est comme ça que j'ai créé deux tables à savoir l'étudiant et le cours. Ensuite, j'ai entré des données dans la table des étudiants. Mais quand j'entre des données invalides dans la table de cours, cela ne me donne aucune erreur. Par exemple: VALEURS ('A1', 'SUB 1', 34); obtient l'entrée dans la table de cours même s'il n'y a pas de clé primaire '34' dans la table des étudiants.Comment faire appliquer des contraintes dans mysql

En outre, je peux supprimer des enregistrements dans la table des étudiants, même s'il existe une intégrité référentielle. Alors, comment faire respecter les contraintes?

+0

Je suis heureux de vous aider, mais il serait bon de temps en temps pour vous de cliquer sur la coche à côté des réponses quand ils vous aident à reconnaître l'aide. – RichardTheKiwi

Répondre

3

La façon la plus simple d'y parvenir est de changer votre moteur de stockage en InnoDB qui supporte les contraintes.

Pour vieilles tables MyISAM, vous devrez utiliser les déclencheurs des deux côtés pour faire respecter une relation FK

Quelques liens pour l'auto-assistance

Créez vos tableaux comme ceci

> 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

Je ne peux vraiment pas comprendre le «moteur de stockage à InnoDB», Désolé, je suis un débutant. – Gopal

+0

@Gopal - MySQL est livré avec une variété de moteurs de stockage qui gèrent réellement les données. Vous pouvez spécifier un moteur différent avec chaque table. Si vous ne spécifiez pas de moteur, il utilisera le moteur par défaut, qui est MyISAM. Il est rapide pour beaucoup de choses (c'est pourquoi c'est la valeur par défaut), mais il ne supporte pas les contraintes de clés étrangères comme vous le souhaitez. Le moteur InnoDB fait. –

+0

Lorsque j'utilise le cours SHOW CREATE TABLE, j'obtiens ceci: bien sûr | CREATE TABLE 'course' (' course_id' char (5) NOT NULL, 'course_name' varchar (50) NULL DEFAULT, ' student_id' int (2) NOT NULL, clé primaire ('course_id'), KEY 'student_student_id_fk' (' student_id') ) MOTEUR = MyISAM DEFAULT CHARSET = latin1 | – Gopal

0

Pour quelqu'un ayant le même problème, si vous avez déjà créé votre table en utilisant MyISAM, vous pouvez le modifier en utilisant InnoDB.

ALTER TABLE nom_table ENGINE = InnoDB;

Questions connexes