当前位置:首页 > 生活百科

mysql添加唯一索引语句(mysql查看表字段命令)

栏目:生活百科日期:2025-01-26浏览:0

当MySQL表字段设置unique key或者primary key时,被约束的字段就必须是唯一的。新插入数据直接使用insert into,如果出现唯一性冲突,就会抛出异常。我们可以根据需求选择合适的插入语句。

为了演示,我们先新建一张user表,SQL语句如下,其中user_id为主键,username为唯一索引

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user`  (  `user_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',  `username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名',  `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',  `mobile_phone_number` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号码',  `email` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱',  `delete_state` tinyint(1) UNSIGNED DEFAULT 0 COMMENT '用户状态,1表示删除,0表示未删除',  `create_time` datetime(0) DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `update_time` datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',  PRIMARY KEY (`user_id`) USING BTREE,  UNIQUE INDEX `uk_username`(`username`) USING BTREE COMMENT '用户名唯一') ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES (1, 'JourWon', '123456', '13800000000', 'JourWon@163.com', 0, CURRENT_TIMESTAMP, NULL);INSERT INTO `user` VALUES (2, '马云', '123456', '13800000011', 'JackMa@163.com', 0, CURRENT_TIMESTAMP, NULL);INSERT INTO `user` VALUES (3, '马化腾', '123456', '13800000022', 'PonyMa@163.com', 0, CURRENT_TIMESTAMP, NULL);INSERT INTO `user` VALUES (4, '李彦宏', '123456', '13800000033', 'RobinLee@163.com', 0, CURRENT_TIMESTAMP, NULL);INSERT INTO `user` VALUES (5, '任正非', '123456', '13800000044', 'RenZhengfei@163.com', 0, CURRENT_TIMESTAMP, NULL);INSERT INTO `user` VALUES (6, 'Jobs', '123456', '13800000055', 'Jobs@163.com', 0, CURRENT_TIMESTAMP, NULL);INSERT INTO `user` VALUES (7, 'Bill Gates', '123456', '13800000066', 'Bill Gates@163.com', 0, CURRENT_TIMESTAMP, NULL);INSERT INTO `user` VALUES (8, 'Buffett', '123456', '13800000077', 'Buffett@163.com', 0, CURRENT_TIMESTAMP, NULL);SET FOREIGN_KEY_CHECKS = 1;

常用插入语句

insert into

当插入数据时,如果唯一性校验出现重复问题,则报错;

如果没有重复性问题,则执行插入操作。

简单总结:重复则报错,不重复则插入。

示例

INSERT INTO `user`VALUES( 8, 'Buffett', '123456', '13800000077', 'Buffett@163.com', 0, CURRENT_TIMESTAMP, NULL );

执行结果

INSERT INTO `user`VALUES( 8, 'Buffett', '123456', '13800000077', 'Buffett@163.com', 0, CURRENT_TIMESTAMP, NULL )&> 1062 - Duplicate entry '8' for key 'user.PRIMARY'&> 时间: 0.001s

insert into … on duplicate key update

当插入数据时,如果唯一性校验出现重复问题,则在原有记录基础上,更新指定字段内容,其它字段内容保留;

如果没有重复性问题,则执行插入操作。

简单总结:重复则更新指定字段,不重复则插入

示例

INSERT INTO `user` ( username, PASSWORD, mobile_phone_number, email )VALUES( 'Buffett', '123456', '13800000088', 'Buffett@163.com' ) ON DUPLICATE KEY UPDATE mobile_phone_number = '13800000088';

执行结果

INSERT INTO `user` ( username, PASSWORD, mobile_phone_number, email )VALUES( 'Buffett', '123456', '13800000088', 'Buffett@163.com' ) ON DUPLICATE KEY UPDATE mobile_phone_number = '13800000088'&> Affected rows: 2&> 时间: 0.022s

表记录,mobile_phone_number更新了,update_time也有值了,但是user_id没有变

replace into

replace into表示插入替换数据,当插入数据时,如果唯一性校验出现重复问题,删除旧记录,插入新记录;

如果没有重复性问题,则执行插入操作,效果和insert into是一样的。

简单总结:重复则先删除再插入新记录,不重复则插入

示例

REPLACE INTO `user` ( username, PASSWORD, mobile_phone_number, email )VALUES( 'Buffett', '123456', '13800000099', 'Buffett@163.com' );

执行结果

REPLACE INTO `user` ( username, PASSWORD, mobile_phone_number, email )VALUES( 'Buffett', '123456', '13800000099', 'Buffett@163.com' )&> Affected rows: 2&> 时间: 0.019s

表记录,user_id和mobile_phone_number变了,update_time变为了空

使用场景总结

如果出现重复异常,希望捕获异常,则使用insert into

如果出现重复异常,希望保存旧纪录,忽略新纪录,则使用insert ignore into

如果出现重复异常,希望更新指定字段,则使用insert into … on duplicate key update

如果出现重复异常,希望删除旧记录,插入新记录,则使用replace into

“mysql添加唯一索引语句(mysql查看表字段命令)” 的相关文章

工信部下架90款APP(天涯社区、大麦、途牛都在里面)

关于下架侵害用户权益APP名单的通报2021年4月23日,我部向社会通报了93家存在侵害用户权益行为APP企业的名单。截至目前,经第三方检测机构核查复检,尚有3...

努比亚最新款手机怎么样(简介努比亚Z30 Pro所有参数)

随着人们生活节奏的加快,手机的使用在日常生活中也越来越重要,续航也就成了手机很重要的一项指标,本人就经常晚上忘了给手机充电,早上一看手机电量只有不到20%,甚至...

excel如何制作下拉菜单进行筛选(excel制作数据表步骤)

在我们用Excel制作表格中,有些数据是需要录入特定的内容,而不是任意填写,比如在录入性别时,只有男、女两个选项,象这种数据的录入,我们可以制作一个下接菜单,通...

女性创业网络时代售卖些什么好(推荐5大产品类目)

现在想创业的人越来越多,大家都着这自己当老板即赚钱又自由,这是一件多么爽歪歪的事情。创业项目不计其数,例如:加盟、养生、美容美妆、餐饮等。2020年受疫情影响,...

什么是产品思维应该怎样去锻炼(效果最好的5种提升法)

产品思维的底层能力好比手机的操作系统,所有安装在手机上的APP都是我们后天学到的理性的东西。只有搞懂和升级我们的操作系统,安装在我们手机上或者大脑上的东西才会更...

卖什么小吃赚钱,推荐6道成本低街边小吃

不知道有没有朋友和我一样,明明在家里已经吃过饭了,本想着出去散散步健健身,可是一看到路边的各种小吃就迈不动腿了,即使刚刚已经吃饱了,可是还能吃下不少小吃呢。可能...

互联网的发展前景与优势(详解互联网前景分析)

领潮天下,互联未来新冠疫情的出现,严重影响到了人们生活的方方面面,不仅如此,中国经济面临着严峻考验。居民的日常生活,企业复工等等都受到了严重的影响,大量的企业面...

elasticsearch创建索引命令(elasticsearch重建索引)

学习计划安排如下:Elasticsearch作为一门全文检索技术,那它是如何使用的呢?先学习Elasticsearch的一些语法,后续再在项目中实战应用。一、I...

交换机划分vlan配置步骤(VLAN配置命令用法)

VLAN(VirtualLocalAreaNetwork)又称虚拟局域网,是指在交换局域网的基础上,采用网络管理软件构建的可跨越不同网段、不同网络的端到端的逻辑...

人人教育加盟怎么样(浅析加盟人人教育的好处)

美国纽约时代广场被誉为“世界的十字路口”,每年千万商业精英汇集于此,是全球当之无愧的商业核心地和知名财富地标。其中纳斯达克半圆柱形巨幅屏是最受瞩目的标志性建筑之...