这与在sql中添加约束有关

问题描述 投票:-1回答:2
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 constraints primary-key
2个回答
0
投票

特别是在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,将记住约束名称。

约束具有名称,因此您可以在元数据中检查它们,或者在某些情况下,可以通过指定名称来删除它们。


0
投票

PK_Student in ADD CONSTRAINT是什么?

每个约束必须有一个名称(更精确的说是“符号”)。该符号在整个数据库中必须具有该约束类型(主键,唯一索引,外键,检查)唯一。

因此,这是为主键约束分配名称的尝试。

一次毫无意义的尝试!

主键约束没有名称(或未在SHOW CREATE TABLE中显示),但对其进行引用时PK约束具有静态,保留和不变的别名PRIMARY(即,只有主键约束或具有可以创建名称PRIMARY。或主键始终具有名称PRIMARY,但未在SHOW CREATE TABLE中显示-相同。

因此名称PK_Student将被简单地忽略。您可以在fiddle中看到它。


再说一遍:

  1. PRIMARY以外的主键的约束符号或索引名称将被忽略;
  2. 将符号/名称PRIMARY分配给主键以外的约束或索引将失败。
© www.soinside.com 2019 - 2024. All rights reserved.