添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
怕老婆的钱包  ·  研究人员·  8 月前    · 
一身肌肉的杯子  ·  臺灣網路科教館·  2 年前    · 

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 可以用来加速数据的查找和修改,但它不能自动为每一行数据生成一个唯一的标识符。