添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Primary key 与Unique Key都是唯一性约束。但二者有很大的区别:

1、Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求。

2、一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY。

下面以 测试 说明:

SQL> create table t (a int,b int,c int,d int);

Table created.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- -----------

A                                                  NUMBER(38)
B                                                  NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

SQL> alter table t add constraint pk_t primary key (a,b);

Table altered.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- ----------------

A                                         NOT NULL NUMBER(38)
B                                         NOT NULL NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

可以看到A、B两个列都自动改为了NOT NULL

SQL> alter table t modify (a int null);
alter table t modify (a int null)
*
ERROR at line 1:
ORA-01451: column to be modified to NULL cannot be modified to NULL
可以看到,列A不允许改为NULL

SQL> alter table t drop constraint pk_t;

Table altered.

SQL> alter table t add constraint uk_t_1 unique (a,b);

Table altered.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- -----------

A                                                  NUMBER(38)
B                                                  NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

我们看到列A又变回了NULL。

注意到,在删除主键时,列的NULLABLE会回到原来的状态。如果在创建主键后,对原来为NULL的主键列,显式设为NOT NULL,在删除主键后仍然是NOT NULL。比如在创建主键后,执行下面的操作,可以看到:

SQL> alter table t modify (b int not null);

Table altered.

SQL> alter table t drop constraint pk_t;

Table altered.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- ----------

A                                                 NUMBER(38)
B                                         NOT NULL NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

再做如下的实验:

SQL> drop table t;

Table dropped.

SQL> create table t (a int,b int,c int,d int);

Table created.

SQL> alter table t add constraint uk_t_1 unique (a,b);

Table altered.

SQL> alter table t add constraint uk_t_2 unique (c,d);

Table altered.

可以看到可以增加两个UNIQUE KEY。看看能不能增加两个主键:

SQL> alter table t add constraint pk_t primary key (c);

Table altered.

SQL> alter table t add constraint pk1_t primary key (d);
alter table t add constraint pk1_t primary key (d)
*
ERROR at line 1:
ORA-02260: table can have only one primary key
由此可以看到一个表只能有一个主键。

SQL> alter table t drop constraint pk_t;

Table altered.

SQL> insert into t (a ,b ) values (null,null);

1 row created.

SQL> /

1 row created.

SQL> insert into t (a ,b ) values (null,1);

1 row created.

SQL> /
insert into t (a ,b ) values (null,1)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.UK_T_1) violated


SQL> insert into t (a ,b ) values (1,null);

1 row created.

SQL> /
insert into t (a ,b ) values (1,null)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.UK_T_1) violated

主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。

Primary key 与Unique Key都是唯一性约束。但二者有很大的区别:1、Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求。2、一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY。下面以测试说明:SQL> create
1. 一个表只能有一个 PRIMARY KEY ,但是可以有多个UNIQQUE KEY 。 唯一约束设置唯一约束的列允许有空值,但是只能有一个空值。 主键约束在一个表中只能有一个,且不允许有空值。 2. key : 主要是用来加快查询速度的, key 是数据库的物理结构:约束和索引。 3. primary key :主键约束,并建立一个主键索引。主键必须唯一,非 NULL , 4. unique key : 唯一约束并在这个 key 上建立一个唯一索引。主要是用来防止数据插入的时候重复的。 5. foreign.
数据库创建过程中,建立了若干个column之后,就需要选择其中的一个column为 primary key 本文简单地说明:1.什么是 primary key 2.如何选择一个好的 primary key 2.什么是 primary key 3.选择一个好的 primary key 现在我们正在数据库中创建一张最常见用户表user table 用来存储用户的账号和密码...
primary key 是唯一标识一条记录,就像人的身份证号码,每个人只有一个也是唯一的一个,不能为空。 unique key 也是唯一的,不允许重复,但是可以为空,可以为一个表中的多个字段定义 unique
MySQL 的CRUD操作数据库约束表约束非空约束 NOT NULL 唯一约束 UNIQUE 主键约束 PRIMARY KEFOREIGN KEY CHECK三级约束类型 数据库约束 表约束是在创建表的时候,设计一些表的约束条件,用来保证数据的合法性和数据的正确性。 常见表约束: 可以创建多个索引的。 需要开发人员根据实际的用途以及数据库中记录的情况,来进行判断。 通常来说,表的索引越多,其查询的速度也就越快。但是,表的 insert /update速度则会降低。这主要是因为,在更新记录的同时需要更新相关的索引信息。为此,到底在表中创建多少索引合适,就需要在这个更新速度与查询速度之间取得一个均衡点。 如对于一些数据仓库数据库系统,其主要用来进行查询。相...
https://juejin.cn/post/6844903856388718606#heading-4 https://my.oschina.net/xiaoyoung/blog/3046779 仅做个人备份,浏览请看原文 查找:假设要查找数据项6 怎样选择聚集索引 非聚集索引 查找:获取NAME=Jake的数据 假设我们有一张这样的表,表中有如图2-0的数据 CREATE TABLE `user` ( `ID` bigi..
MySQL 中的 primary key unique key 都是用来保证数据表中数据的唯一性的。 primary key 是一种特殊的 unique key ,它是用来标识每一行数据的唯一性的。一个数据表只能有一个 primary key ,它可以由一个或多个列组成。 primary key 可以自动为每一行数据生成一个唯一的标识符,这个标识符可以用来快速查找和修改数据。 unique key 也是用来保证数据表中数据的唯一性的,但它不同于 primary key 的是,它可以有多个。 unique key 可以由一个或多个列组成,它可以用来保证某些列的值在数据表中是唯一的。 unique key 可以用来加速数据的查找和修改,但它不能自动为每一行数据生成一个唯一的标识符。