• MySql -- unique唯一约束


    3、UNIQUE 约束

      约束唯一标识数据库表中的每条记录。

    创建一张测试表

    CREATE TABLE `test`.`info`(  
      `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `idCard` VARCHAR(18) UNIQUE NOT NULL, -- 直接在字段上添加唯一约束
      `mobile` VARCHAR(11),
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_estonian_ci;

    添加唯一约束UNIQUE

    /*
    除了上面的添加唯一约束的方法以外,
    如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,写法如下:
    uc_idCard约束由mobile和idCard组合成唯一约束。
    */
    CREATE TABLE `test`.`info`(  
      `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `idCard` VARCHAR(18) UNIQUE,
      `mobile` VARCHAR(11),
      PRIMARY KEY (`id`),
      CONSTRAINT `uc_idCard` UNIQUE (`mobile`,`idCard`) 
    ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_estonian_ci;
    
    
    如果在存在表的情况下,添加唯一约束
    -- 无名字的约束 ALTER TABLE `info` ADD UNIQUE (`idCard`);
    -- uc_idCard约束由mobile和idCard组合成唯一约束 ALTER TABLE `info` ADD CONSTRAINT `uc_idCard` UNIQUE (`mobile`,`idCard`);

    撤销 UNIQUE 约束

    -- 移除指定字段的约束
    ALTER TABLE `info` DROP INDEX `idCard`; 
    
    -- 移除有名字的约束
    ALTER TABLE `info` DROP INDEX `uc_idCard`; 

    向 UNIQUE 约束添加数据

    -- 添加一条基础数据
    INSERT INTO `info`(`idCard`,`mobile`) VALUES('99999','1111');
    
    -- 添加一条idCard重复的记录
    INSERT INTO `info`(`idCard`,`mobile`) VALUES('99999','2222');
    
    结果:
    错误代码: 1062
    DUPLICATE entry '99999' FOR KEY 'idCard';
    
    -- 在唯一约束中添加 NULL
    INSERT INTO `info`(`idCard`,`mobile`) VALUES(NULL,'1111');
    -- 再次添加NULL
    INSERT INTO `info`(`idCard`,`mobile`) VALUES(NULL,'2222');
    
    结果:
        id  idCard  mobile  
    -------------------------
         6  (NULL)  1111    
         7  (NULL)  2222
    原因:因为 NULL != NULL
    原创内容,如果你觉得文章还可以的话,不妨点个赞支持一下!转载请注明出处。
  • 相关阅读:
    Tcp/ip 报文解析
    使用redis构建可靠分布式锁
    提高服务器程序性能的一些方法
    socket读写返回值的处理
    也写年终总结
    记录服务上线一年来的点点滴滴
    C++实现线程安全的单例模式
    一步一步实现读写锁
    从I/O复用谈epoll为什么高效
    同域SQL server 做镜像服务器遇到1418错误
  • 原文地址:https://www.cnblogs.com/lixingwu/p/7206658.html
Copyright © 2020-2023  润新知