mysql中unique创建唯一索引

mysql 专栏收录该内容
1 篇文章 0 订阅

很多情况下我们都会要求某些字段不可重复,如用户名、手机号等,我们可以在MySQL数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。主键约束要保证数据既不可以为空也不可重复,而UNIQUE唯一索引,是可以允许数据为空的,而且唯一索引的主要作用就是避免数据重复(不是提高效率哦)。
本人也目前也是小白一个,在网上查得有人建表时这样添加唯一索引:

DROP TABLE
IF EXISTS `t_user`;

CREATE TABLE `t_user` (
    ID VARCHAR (100) NOT NULL COMMENT '主键',
    NAME VARCHAR (30) NOT NULL COMMENT '用户昵称',
    PASSWORD VARCHAR (100) NOT NULL COMMENT '用户密码',
    EMAIL VARCHAR (50) NOT NULL COMMENT '用户邮箱',
    PHONENUMBER VARCHAR (20) NOT NULL COMMENT '用户手机号码',
    PRIMARY KEY (`ID`),
    UNIQUE(NAME, PHONENUMBER)
);

但是我在添加数据时发现,这个唯一约束只对括号里的第一个字段NAME有作用,而对后面的PHONENUMBER没有作用(无论后面添加几个都是只对第一个有用)。也有说如果允许字段为空唯一索引就会失效,可是我这里需要创建索引的字段也没有允许为空的
不过如果无需命名UNIQUE,只创建一个唯一索引的话,这是可以的

还有一种方式说如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,可以使用以下SQL

DROP TABLE
IF EXISTS `t_user`;

CREATE TABLE `t_user` (
    ID VARCHAR (100) NOT NULL COMMENT '主键',
    NAME VARCHAR (30) NOT NULL COMMENT '用户昵称',
    PASSWORD VARCHAR (100) NOT NULL COMMENT '用户密码',
    EMAIL VARCHAR (50) NOT NULL COMMENT '用户邮箱',
    PHONENUMBER VARCHAR (20) NOT NULL COMMENT '用户手机号码',
    PRIMARY KEY (`ID`),
    CONSTRAINT uc_user UNIQUE (NAME, EMAIL)
);

可是不知道为什么我测的还是有问题,如果括号里两个字段,还是只对第一个字段有作用,如果有三个及三个以上的字段,这个唯一索引就失效了,对这三个任何一个字段都没有作用
不过既然有人这么写,他应该是测试没问题的,可是在我这里就是没有作用,所以最后,我只能一条一条写了(也可以不命名,好像很笨的样子,不过测试通过了)

ID VARCHAR (100) NOT NULL COMMENT '主键',
    NAME VARCHAR (30) NOT NULL COMMENT '用户昵称',
    PASSWORD VARCHAR (100) NOT NULL COMMENT '用户密码'
    EMAIL VARCHAR (50) NOT NULL COMMENT '用户邮箱',
    PHONENUMBER VARCHAR (20) NOT NULL COMMENT '用户手机号码',
    PRIMARY KEY (`ID`),
    UNIQUE KEY nameindex(NAME),
    UNIQUE KEY emailindex(EMAIL),
    UNIQUE KEY PHONENUMBERindex(PHONENUMBER)

学习更多:
http://www.runoob.com/mysql/mysql-handling-duplicates.html
https://www.aliyun.com/jiaocheng/1107895.html?spm=5176.100033.2.11.AjpvRQ
http://www.w3school.com.cn/sql/sql_unique.asp

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

rem_only

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值