Skip to content

PRIMARY KEY 主键约束

PRIMARY KEY 约束可用于确保表内的每一数据行都可以由某一个键值唯一地确定。 并且每个数据库表上最多只能定义一个 PRIMARY KEY 约束。

遵循规则

定义主键时,需要遵守下列规则:

  • 唯一性:主键列的值必须是唯一的,即表中的每一行都必须具有不同的主键值。

  • 非空性:主键列的值不能为空,即它们不能包含 NULL 值。

  • 不可更改性:主键列的值在插入后不能被更改或更新。这是为了保持主键的唯一性。如果确实需要更改主键值,通常需要先删除原始行,然后插入具有新主键值的新行。

  • 最小性:主键可以由单个列或多个列组合而成。复合主键可以用于唯一标识行,但它们的复合值必须唯一,不能存在重复组合。

  • 引用完整性:主键通常用作外键(Foreign Key)的引用。

  • 自动创建索引:主键列会自动创建索引,以提高检索性能。

语法说明

> column_name data_type PRIMARY KEY;

示例

mysql> create table t1(a int primary key, b int, c int, primary key(b,c));
ERROR 20301 (HY000): invalid input: more than one primary key defined
mysql> create table t2(a int, b int, c int, primary key(b,c));
Query OK, 0 rows affected (0.01 sec)

mysql> create table t3(a int, b int, c int, primary key(a));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t2 values(1,1,1);
Query OK, 1 row affected (0.02 sec)

mysql> insert into t2 values(1,1,2);
Query OK, 1 row affected (0.01 sec)

mysql> insert into t3 values(1,1,1);
Query OK, 1 row affected (0.01 sec)

mysql> insert into t3 values(2,1,1);
Query OK, 1 row affected (0.01 sec)

示例解释:在上述示例中,t1 包含了两组主键,因此创建失败。t2 和 t3 只有一组主键,因此可以创建。四条插入语句都没有违反约束,均可成功执行。

限制

MatrixOne 暂不支持删除 PRIMARY KEY 约束。