これは、MySQLがCONSTRAINT pk_PersonID
を無視するのと同じです。 部。テーブルを作成してダンプするか、SHOW CREATE TABLE Persons
を発行することで確認できます。 。
この構文は、他のSQLサーバーとの互換性のためにのみサポートされており(ただし、プライマリキーや他のローカルキーでは無視されます)、その情報(制約名)は格納されていないと思います。
ただし、外部キーで使用する場合は、CONSTRAINT
キーワードは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;
これは、MySQLが制約名をどこにも保存せず、エラーを出力するときにそれを使用しないことを証明するテストでもあります(問題の他のSQLサーバーで述べたように制約の命名の目的は何ですか :
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'