Het is hetzelfde als MySQL negeert de CONSTRAINT pk_PersonID
deel. U kunt dit controleren door de tabel aan te maken en deze vervolgens te dumpen of SHOW CREATE TABLE Persons
op te geven .
Ik denk dat het deze syntaxis alleen ondersteunt voor compatibiliteit met andere SQL-servers (maar het negeert voor primaire en andere lokale sleutels) en de informatie niet opslaat (de naam van de beperking).
Voor gebruik met externe sleutels geldt echter de CONSTRAINT
trefwoord wordt ook gebruikt in 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;
Hier is ook een test om te bewijzen dat MySQL de naam van de beperking nergens opslaat en niet gebruikt bij het afdrukken van fouten (zoals vermeld voor andere SQL-servers in kwestie Wat is het doel van constraint naming :
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'