CREATE TABLE STUDENT(
ROLL_NO INT NOT NULL,
STU_NAME VARCHAR (35) NOT NULL UNIQUE,
STU_AGE INT NOT NULL,
STU_ADDRESS VARCHAR (35) UNIQUE,
CONSTRAINT PK_Student PRIMARY KEY (ROLL_NO)
);
在这里我无法理解ADD CONSTRAINT中的PK_Student是什么?写作的目的是什么?
特别是在MySQL中,将忽略PRIMARY KEY的约束名称。我测试了在test
模式中创建示例表的过程,然后检查了元数据:
mysql> select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_schema='test';
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| def | test | PRIMARY | test | STUDENT | PRIMARY KEY |
| def | test | STU_NAME | test | STUDENT | UNIQUE |
| def | test | STU_ADDRESS | test | STUDENT | UNIQUE |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
您可以看到PRIMARY KEY约束被简单地命名为“ PRIMARY”,而忽略了CREATE TABLE语句中的约束名称。
命名约束是有效的SQL语法,但是在这种情况下,MySQL会默默忽略它。
[在其他一些品牌的SQL数据库中,例如Oracle或Microsoft,将记住约束名称。
约束具有名称,因此您可以在元数据中检查它们,或者在某些情况下,可以通过指定名称来删除它们。
PK_Student in ADD CONSTRAINT是什么?
每个约束必须有一个名称(更精确的说是“符号”)。该符号在整个数据库中必须具有该约束类型(主键,唯一索引,外键,检查)唯一。
因此,这是为主键约束分配名称的尝试。
一次毫无意义的尝试!
主键约束没有名称(或未在SHOW CREATE TABLE
中显示),但对其进行引用时PK约束具有静态,保留和不变的别名PRIMARY
(即,只有主键约束或具有可以创建名称PRIMARY
。或主键始终具有名称PRIMARY
,但未在SHOW CREATE TABLE
中显示-相同。
因此名称PK_Student
将被简单地忽略。您可以在fiddle中看到它。
再说一遍:
PRIMARY
以外的主键的约束符号或索引名称将被忽略; PRIMARY
分配给主键以外的约束或索引将失败。