MySql 具有名称的主键约束
MySql primary key constraint with name
数据定义语句:
CREATE TABLE 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)
)
的价值和目的是什么
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id)
?
相对于此
PRIMARY KEY (P_Id)
?
MySql 除了 this.
之外,文档对此并没有说太多
与MySQL忽略CONSTRAINT pk_PersonID
部分相同。您可以通过创建 table 然后转储它或发出 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 有问题的服务器所述 What is the purpose of 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'
数据定义语句:
CREATE TABLE 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)
)
的价值和目的是什么
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id)
?
相对于此
PRIMARY KEY (P_Id)
?
MySql 除了 this.
之外,文档对此并没有说太多与MySQL忽略CONSTRAINT pk_PersonID
部分相同。您可以通过创建 table 然后转储它或发出 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 有问题的服务器所述 What is the purpose of 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'