C'est pareil que MySQL ignore la CONSTRAINT pk_PersonID
partie. Vous pouvez vérifier en créant la table puis en la vidant ou en émettant SHOW CREATE TABLE Persons
.
Je suppose qu'il prend en charge cette syntaxe uniquement pour la compatibilité avec d'autres serveurs SQL (mais l'ignore pour les clés primaires et autres clés locales) et ne stocke pas ses informations (le nom de la contrainte).
Cependant, pour une utilisation avec des clés étrangères, la CONSTRAINT
mot-clé est également utilisé dans MySQL.
mysql> CREATE TABLE test.Persons (
-> P_Id int NOT NULL,
-> LastName varchar(255) NOT NULL,
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255),
-> CONSTRAINT pk_PersonID PRIMARY KEY (P_Id)
-> );
Query OK, 0 rows affected (0.50 sec)
server$ mysqldump -p test Persons
Enter password:
--
-- Table structure for table `Persons`
--
DROP TABLE IF EXISTS `Persons`;
CREATE TABLE `Persons` (
`P_Id` int(11) NOT NULL,
`LastName` varchar(255) NOT NULL,
`FirstName` varchar(255) DEFAULT NULL,
`Address` varchar(255) DEFAULT NULL,
`City` varchar(255) DEFAULT NULL,
PRIMARY KEY (`P_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Voici également un test pour prouver que MySQL ne stocke nulle part le nom de la contrainte et ne l'utilise pas lors de l'impression d'erreurs (comme mentionné pour les autres serveurs SQL en question Quel est le but de la dénomination des contraintes ? :
mysql> insert into Persons (P_Id) values(1);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into Persons (P_Id) values(1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'