美文网首页程序员数据库爬虫
UNIQUE约束和主键的比较

UNIQUE约束和主键的比较

作者: 叫我老村长 | 来源:发表于2018-08-14 11:20 被阅读54次
    about-BY-gentle.jpg

    UNIQUE约束和主键的比较

    可以使用 UNIQUE 约束确保在非主键列中不输入重复的值。尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,
    但想要强制一列或多列组合(不是主键)的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束。
    原因:可以对一个表定义多个 UNIQUE 约束,但只能定义一个 PRIMARY KEY 约束。

    而且,UNIQUE 约束允许 NULL 值,这一点与 PRIMARY KEY 约束不同。不过,当与参与 UNIQUE 约束的任何值一起使用时,每列只允许一个空值。

    外键中:
    FOREIGN KEY 约束可以引用 UNIQUE 约束

    什么时候用UNIQUE约束,而不是主键

    创建唯一约束可确保在未参与主键的特定列中不输入重复值。尽管唯一约束和主键都强制唯一性,
    但以下情况如下,则应向表附加唯一约束而不是主键约束:

    • 希望在某一列或某一组列中强制唯一性。您可以向表附加多个唯一约束,但只能向表附加一个主键约束。
    • 希望在允许空值的列中强制唯一性。您可以向允许空值的列附加唯一约束,但只能向不允许空值的列附加主键约束。当向允许空值的列附加唯一约束时,请确保在所约束的列中最多只有一行包含空值。

    唯一可以多个实例:

    *************************** 1. row ***************************
           Table: unique8
    Create Table: CREATE TABLE `unique8` (
      `id` int(11) NOT NULL,
      `age` int(11) DEFAULT NULL,
      `num` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `age` (`age`),
      UNIQUE KEY `num` (`num`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    

    唯一的唯一性验证实列:

    mysql> select * from unique8;
    +----+------+------+
    | id | age  | num  |
    +----+------+------+
    |  1 | NULL | NULL |
    +----+------+------+
    1 row in set (0.01 sec)
    
    mysql> insert into unique8 values(1,null,null);
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    mysql> insert into unique8 values(1,22,22);
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    mysql> insert into unique8 values(2,22,22);
    Query OK, 1 row affected (0.06 sec)
    
    mysql> insert into unique8 values(3,22,22);
    ERROR 1062 (23000): Duplicate entry '22' for key 'age'
    

    相关文章

      网友评论

        本文标题:UNIQUE约束和主键的比较

        本文链接:https://www.haomeiwen.com/subject/xacmbftx.html