Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql-Primärschlüsseleinschränkung mit Namen

Es ist dasselbe wie MySQL die CONSTRAINT pk_PersonID ignoriert Teil. Sie können dies überprüfen, indem Sie die Tabelle erstellen und dann ausgeben oder SHOW CREATE TABLE Persons ausgeben .

Ich denke, es unterstützt diese Syntax nur aus Gründen der Kompatibilität mit anderen SQL-Servern (ignoriert sie jedoch für Primär- und andere lokale Schlüssel) und speichert ihre Informationen (den Constraint-Namen) nicht.

Für die Verwendung mit Fremdschlüsseln ist jedoch CONSTRAINT Schlüsselwort wird auch in MySQL verwendet.

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 ist auch ein Test, um zu beweisen, dass MySQL den Einschränkungsnamen nirgendwo speichert und ihn nicht beim Drucken von Fehlern verwendet (wie für andere fragliche SQL-Server erwähnt Was ist der Zweck der Einschränkungsbenennung :

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'