数据库
首页 > 数据库> > MySQL名称的主键约束

MySQL名称的主键约束

作者:互联网

数据定义语句:

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)
)

的价值和目的是什么

约束pk_PersonID主键(P_Id)?

与此相对

主键(P_Id)?

MySql的文档除了this之外并没有说太多.

解决方法:

就像MySQL忽略CONSTRAINT pk_PersonID部分一样.您可以通过创建表然后将其转储或发出SHOW CREATE TABLE Persons进行检查.

我猜想它支持此语法仅是为了与其他SQL Server兼容(但是对于主键和其他本地键则忽略它),并且不存储其信息(约束名称).

但是,对于与外键一起使用,在MySQL中也使用CONSTRAINT关键字.

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不会在任何地方存储约束名称,并且在打印错误时不使用约束名称(如在问题What is the purpose of constraint naming中针对其他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'

标签:sql,mysql,constraints,primary-key
来源: https://codeday.me/bug/20191010/1888505.html