• 唯一约束 UNIQUE KEY


    什么是唯一约束

    Unique Key:它是 MySQL 中的唯一约束,是指在所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为0001,那么该表中就不能出现另一条记录的 id 值也为0001

    与主键的区别

    Unique KeyPrimary Key 都是 MySQL 中的唯一约束类型,但不同的是,Unique Key 可以有多个字段,而且可以为空,但只能有一个为空,而主键约束则只允许有一个字段,且不能为空。

    创建唯一约束

    我们可以创建多字段唯一约束,例如:

    CREATE TABLE `employee` (
      `id` int NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      `age` int DEFAULT NULL,
      `city` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `UNIQUE_KEY` (`name`,`city`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    

    id 是主键,namecity 是一个组合 Unique_key,现在插入一条数据:

    INSERT INTO `employee` (`name`, `age`, `city`) VALUES ('Tom', '10', '北京');
    

    数据结果:

    id name age city
    1 Tom 10 北京

    唯一性验证

    这时候,如果我们再次插入相同namecity的一条数据:

    INSERT INTO `employee` (`name`, `age`, `city`) VALUES ('Tom', '10', '北京');
    

    这时候出现了如下报错信息,存在重复键Tom-北京

    [SQL]INSERT INTO `employee` (`name`, `age`, `city`) VALUES ('Tom', '10', '北京');
    [Err] 1062 - Duplicate entry 'Tom-北京' for key 'employee.UNIQUE_KEY'
    

    所以,唯一约束起了作用。

    注意:Unique_key 是允许字段为空的。因为 namecity 都没有非空限制,所以,我们可以将它们设置为null

    这里我们需要解释下,Unique_key唯一性是说你不能插入相同的值,但如果你插入的字段其中有null,那么,即使你重复插入,唯一约束也不会起作用!

    例如,我们连续执行以下SQL:

    INSERT INTO `employee` (`name`, `age`, `city`) VALUES ('Tom', '10', NULL);
    INSERT INTO `employee` (`name`, `age`, `city`) VALUES ('Tom', '10', NULL);
    INSERT INTO `employee` (`name`, `age`, `city`) VALUES ('Tom', '10', NULL);
    

    这时候是不会报错的,而且全都插入成功。

    id name age city
    1 Tom 10 NULL
    2 Tom 10 NULL
    3 Tom 10 NULL

    原因:

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

    这里,我们在使用的时候需要特别注意下!

  • 相关阅读:
    【python】为什么IDE看很多源码的函数都是pass带过
    【PyQt5】使用pyqtgraph绘图时UI卡顿的解决
    Qt designer button图标适应控件大小
    【转载】标量,向量,矩阵与张量
    Python实现简单的HTTP服务器(支持文件下载)
    Python——Pygame实现生命游戏(game of life)
    mysql允许外部连接设置
    fastdfs在ubuntu的编译安装,php扩展fastdfs的安装
    ubuntu下安装mongodb
    ubuntu16.04安装mongo扩展出现的问题
  • 原文地址:https://www.cnblogs.com/ason-wxs/p/13397559.html
Copyright © 2020-2023  润新知