精华内容
下载资源
问答
  • 主键与唯一约束区别在面试有可能会被问到。可以从以下几个方面对比一下。1、保证唯一性2、是否允许为空3、一个表可以有多少个4、是否允许组合保证唯一性两者都保证字段值唯一性。建一个学生表create table student...

    主键与唯一约束区别在面试有可能会被问到。可以从以下几个方面对比一下。1、保证唯一性

    2、是否允许为空

    3、一个表可以有多少个

    4、是否允许组合

    保证唯一性

    两者都保证字段值的唯一性。

    建一个学生表create table student(

    id int PRIMARY key, #主键

    name VARCHAR(20) NOT NULL,#非空

    seat int UNIQUE#唯一

    )

    id是主键,seat座位号唯一。

    先插入两条id相同的数据测试。mysql> insert into student

    -> (id,name,seat)

    -> VALUES

    -> (1,'haha',1),

    -> (1,'john',2);

    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

    上面语句是一次插入多条数据,报错因为id主键的值重复了,语句执行失败。

    插入seat相同数据测试mysql> insert into student

    (id,name,seat)

    VALUES

    (1,'haha',1),

    (2,'john',1);

    ERROR 1062 (23000): Duplicate entry '1' for key 'seat'

    同样报错。

    是否允许空值

    在学生表中插入一条id为null的数据mysql> insert into student

    ->(id,name,seat)

    ->VALUE

    -> (null,'haha',1);

    ERROR 1048 (23000): Column 'id' cannot be null

    报错了,id的值不能为null。

    以上语句将seat为null测试mysql> insert into student

    -> (id,name,seat)

    -> VALUE

    -> (1,'haha',null);

    Query OK, 1 row affected (0.12 sec)

    可以插入。

    所以从两个实例得出,唯一性约束允许为空值,主键是不能为空值。

    再插入一条seat为null的数据insert into student

    ->(id,name,seat)

    -> VALUE

    ->(2,'abcd',null);

    Query OK, 1 row affected (0.12 sec)

    同样插入成功,查看一下表的数据mysql> select * from student;

    +----+------+------+

    | id | name | seat |

    +----+------+------+

    | 1 | haha | NULL |

    | 2 | abcd | NULL |

    +----+------+------+

    2 rows in set (0.00 sec)

    唯一性的空值可以重复,猜测是mysql版本的问题,有兴趣可以深入研究一下。查看mysql版本可以用version函数mysql> select version();

    +------------------+

    | version() |

    +------------------+

    | 5.1.30-community |

    +------------------+

    一个表可以有多少个主键和唯一键?

    试一下将name也作为主键,用修改语句操作mysql> alter table student

    modify name varchar(20)

    PRIMARY KEY;

    ERROR 1068 (42000): Multiple primary key defined

    报错,主键重复定义了。

    那将name改为唯一性约束试试,同样使用修改语句操作mysql> alter table student

    modify name varchar(20)

    UNIQUE;

    Query OK, 2 rows affected (0.23 sec)

    Records: 2 Duplicates: 0 Warnings: 0

    操作成功了,再添加一个majorId字段,也是唯一性约束,测试mysql> alter table student

    add majorId int UNIQUE;

    Query OK, 2 rows affected (0.29 sec)

    Records: 2 Duplicates: 0 Warnings: 0

    依然成功。

    所以,一张表,主键最多有一个,而唯一性键可以有多个。

    是否允许组合

    假设两个字段组合成主键,那定义时格式:PRIMARY KEY(字段1,字段2)。在表级约束添加。

    执行以下语句,将原表删除,重新建表,id和name作为主键。drop table if EXISTS student

    mysql> create table student(

    ->id int,

    ->name VARCHAR(20),

    -> seat int,

    -> PRIMARY KEY(id,name)

    -> );

    Query OK, 0 rows affected (0.16 sec)

    建表成功,说明主键是可以组合的,用 show index from student 语句看一下表的索引(索引的知识以后会整理)

    04ed3169dc678191cf6b5a11ea18e08e.png

    看起来有两个主键,一个是id,一个是name。其实不然,可以插入数据测试看看。

    插入两条数据,id都为1,name值不同mysql> insert into student

    (id,name,seat)

    VALUES

    (1,'haha',1),

    (1,'john',2);

    Query OK, 2 rows affected (0.12 sec)

    Records: 2 Duplicates: 0 Warnings: 0

    可以看到数据插入成功了,再插入一条id=1,name=haha的数据试试mysql> insert into student

    (id,name,seat)

    VALUE

    (1,'haha',1);

    ERROR 1062 (23000): Duplicate entry '1-haha' for key 'PRIMARY'

    插入失败了。因为id=1并且name=haha的数据已经存在表中,不能重复插入,所以组合主键代表的还是一个主键,组合中所有列保证唯一性。

    同样,唯一键也允许组合,添加格式:UNIQUE(字段1,字段2)。效果和组合主键也是一样的,不再测试了。

    两者的对比就到这。总结一下,主键保证值的唯一性,不允许空值,一张表最多只能定义一个主键,允许组合,组合主键代表一个主键。唯一键也是保证值的唯一,但允许允许空值,一张表可以有多个唯一键,允许组合。

    展开全文
  • 这里写自定义目录标题 主键约束: 默认就是不能为空, 唯一 外键都是指向另外一张表主键 ...唯一约束: 列面内容, 必须是唯一, 不能出现重复情况, 为空 唯一约束不可以作为其它表外键 可以有多个唯一约束 ...

    这里写自定义目录标题


    主键约束: 默认就是不能为空, 唯一

    • 外键都是指向另外一张表的主键
    • 主键一张表只能有一个

    唯一约束: 列面的内容, 必须是唯一, 不能出现重复情况, 可以为空

    • 唯一约束不可以作为其它表的外键
    • 可以有多个唯一约束
    展开全文
  • mysql 主键约束与唯一约束的区别

    千次阅读 2019-01-02 10:19:17
    主键约束 PRIMARY KRY 主键 是唯一 一张表只能有一个主键 AUTO_INCREMENT 一定要和主键连用 但主键不一定要和 AUTO_INCREMENT 连用 主键一定是非空 NOT NULL 唯一约束 UNIQUE KEY 唯一约束 唯一约束可以...

     


    主键约束

    1. PRIMARY KRY 主键 是唯一的 一张表只能有一个主键
    2. AUTO_INCREMENT 一定要和主键连用
    3. 但主键不一定要和 AUTO_INCREMENT 连用
    4. 主键一定是非空的 NOT NULL

    唯一约束

    1. UNIQUE KEY 唯一约束
    2. 唯一约束可以保证数据的唯一性
    3. 唯一约束的字段可以为空
    4. 每张数据表可以有存在多个唯一约束
    展开全文
  • 主键约束与唯一约束的区别

    千次阅读 2016-09-04 15:08:00
    1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表
    1.主键约束(PRIMARY KEY)

    1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 
    2) 是不可能(或很难)更新. 
    3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
    4) 主健可作外健,唯一索引不可;

    2.唯一性约束(UNIQUE)
    1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
    2) 只要唯一就可以更新. 
    3) 即表中任意两行在  指定列上都不允许有相同的值,允许空(NULL).
    4) 一个表上可以放置多个唯一性约束

    3.唯一索引(INDEX)

       创建唯一索引可以确保任何生成重复键值的尝试都会失败。

       唯一性约束和主键约束的区别:
        (1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。
        (2).在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,但在 默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引

     

       约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
       唯一性约束与唯一索引有所不同:

       (1).创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。

       (2).创建唯一索引只会创建一个唯一索引,不会创建Constraint。

       也就是说其实唯一约束是通过创建唯一索引来实现的。

       在删除时这两者也有一定的区别:

       删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,

       而删除了唯一索引的话就可以插入不唯一的值。
    展开全文
  • 主键(primary key):用户选作元组标识一个候选键程序主键 比如一个小范围所有人,没有重名,考虑以下属性 身份证 姓名 性别 年龄 身份证唯一,所以是一个超键 姓名唯一,所以是一个超键 (姓名,性别)唯一,...
  • 主键与唯一约束区别在面试有可能会被问到。可以从以下几个方面对比一下。1、保证唯一性2、是否允许为空3、一个表可以有多少个4、是否允许组合保证唯一性两者都保证字段值唯一性。建一个学生表create table student...
  • 唯一性约束(1) 唯一性约束所在列允许空值,但是主键约束所在列不允许空值。(2) 可以把唯一性约束放在一个或者多个列上,这些列或列组合必须有唯一的只。但是,唯一性约束所在列并不是表主键列。(3) 唯一性...
  • 1.主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。...1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表
  • 唯一约束主键的区别- -

    千次阅读 2007-09-11 14:58:00
    唯一性约束和主键的区别- - 唯一性约束1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的只。但是,唯一性约束所在的列并...
  • 主键本质是约束,值不为空,一个表只能建一个,其目的是检查数据正确性;唯一索引本质是索引,值可为空,一个表能建多个,其目的...唯一约束本质是约束,值可为空,一个表能建多个,其目的是检查数据正确性;...
  • 唯一约束(Unique Constraint):约束唯一标识数据库表中每条记录,确保表中某一列或者复合列数据没有相同值。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性保证。PRIMARY KEY 拥有自动定义 ...
  • 主键是一种约束唯一索引是一种索引,两者在本质上是不同主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + ...
  • 主键唯一约束唯一索引键是一个逻辑概念索引是存储在数据库中一个物理结构1.一般情况下,在为列指定主键之后,Oracle会自动为列设置唯一约束约束列上没有索引时,在创建unique constraint时,oracle 会...
  • 主键与索引的区别

    2020-10-16 10:33:53
    在数据库关系图中为表定义主zhi键将dao自动创建主键索引,主键索引是唯一索引特定类型。该索引要求主键每个值都唯一。当在查询中使用主键索引时,它还允许对数据快速访问。 2、种类不同: 根据数据库...
  • Oracle主键、唯一与唯一索引的区别   一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同...接下来我们看看数据库中的主键约束唯一键约束和唯一索引的区别。 伦理片 http://www.dotdy.
  • 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束唯一键约束和唯一索引的区别。 SQL> select * from v$version; BANNER ----...
  • 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束唯一键约束和唯一索引的区别。 SQL> select * from v$version; BANNER -------------
  • 主键索引:指就是主键主键没有明确概念定义,主键既是约束,也是索引,主键是索引一种,是唯一索引特殊类型。创建主键的时候,数据库默认会为主键创建一个唯一索引。 自增主键:字段类型为数字、自增、...
  • 简要地说,主键唯一索引,或者键和索引之间最主要区别在于:键是一个逻辑层面概念,涉及到数据模式设计。从语法角度看,键被定义为一种约束。比方说,如果想定义外键(或称参考约束),那么相关列就必须先...
  • 主键是一种约束唯一索引是一种索引,两者在本质上是不同主键索引:数据库表经常有一列或列组合,其值唯一标识表中每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 157
精华内容 62
关键字:

唯一约束与主键约束的区别是