首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有名称的MySql主键约束

带有名称的MySql主键约束
EN

Stack Overflow用户
提问于 2015-07-30 22:01:59
回答 1查看 5K关注 0票数 6

数据定义声明:

代码语言:javascript
复制
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之外,文档对此并没有太多的说明。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 22:22:24

这与MySQL忽略CONSTRAINT pk_PersonID部分是一样的。您可以通过创建表,然后转储它或发出SHOW CREATE TABLE Persons来进行检查。

我猜它支持这种语法只是为了与其他SQL服务器兼容(但是对于主键和其他本地键则忽略它),并且不存储它的信息(约束名称)。

但是,对于外键的使用,CONSTRAINT关键字也在MySQL中使用。

代码语言:javascript
复制
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没有将约束名称存储在任何地方,并且在打印错误时不使用约束名称(正如其他约束命名的目的是什么?中提到的那样):

代码语言:javascript
复制
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'
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31734857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档