簡體   English   中英

帶名稱的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文檔並沒有真正說明這一點

它與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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM