避免MySQL替换逻辑SQL的坑爹操作 推荐 原创 dbapower 2017-12-11 17:27:19 博主文章分类:MySQL ©著作权 文章标签 replace into insert 文章分类 MySQL 数据库 ©著作权归作者所有:来自51CTO博客作者dbapower的原创作品,请联系作者获取转载授权,否则将追究法律责任 replace into和insert into on duplicate key 区别 replace的用法 当不冲突时相当于insert,其余列默认值 当key冲突时,自增列更新,replace冲突列,其余列默认值 Com_replace会加1 Innodb_rows_updated会加1 Insert into …on duplicate key的用法 不冲突时相当于insert,其余列默认值 当与key冲突时,只update相应字段值。 Com_insert会加1 Innodb_rows_inserted会增加1 实验展示 表结构 create table helei1( id int(10) unsigned NOT NULL AUTO_INCREMENT, name varchar(20) NOT NULL DEFAULT '', age tinyint(3) unsigned NOT NULL default 0, PRIMARY KEY(id), UNIQUE KEY uk_name (name) ) ENGINE=innodb AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; </br> 表数据 root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 1 | 贺磊 | 26 | | 2 | 小明 | 28 | | 3 | 小红 | 26 | +----+-----------+-----+ 3 rows in set (0.00 sec) replace into用法 root@127.0.0.1 (helei)> replace into helei1 (name) values('贺磊'); Query OK, 2 rows affected (0.00 sec) root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 2 | 小明 | 28 | | 3 | 小红 | 26 | | 4 | 贺磊 | 0 | +----+-----------+-----+ 3 rows in set (0.00 sec) root@127.0.0.1 (helei)> replace into helei1 (name) values('爱璇'); Query OK, 1 row affected (0.00 sec) root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 2 | 小明 | 28 | | 3 | 小红 | 26 | | 4 | 贺磊 | 0 | | 5 | 爱璇 | 0 | +----+-----------+-----+ 4 rows in set (0.00 sec) replace的用法 当没有key冲突时,replace into 相当于insert,其余列默认值 当key冲突时,自增列更新,replace冲突列,其余列默认值 Insert into …on duplicate key: root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 2 | 小明 | 28 | | 3 | 小红 | 26 | | 4 | 贺磊 | 0 | | 5 | 爱璇 | 0 | +----+-----------+-----+ 4 rows in set (0.00 sec) root@127.0.0.1 (helei)> insert into helei1 (name,age) values('贺磊',0) on duplicate key update age=100; Query OK, 2 rows affected (0.00 sec) root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 2 | 小明 | 28 | | 3 | 小红 | 26 | | 4 | 贺磊 | 100 | | 5 | 爱璇 | 0 | +----+-----------+-----+ 4 rows in set (0.00 sec) root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 2 | 小明 | 28 | | 3 | 小红 | 26 | | 4 | 贺磊 | 100 | | 5 | 爱璇 | 0 | +----+-----------+-----+ 4 rows in set (0.00 sec) root@127.0.0.1 (helei)> insert into helei1 (name) values('爱璇') on duplicate key update age=120; Query OK, 2 rows affected (0.01 sec) root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 2 | 小明 | 28 | | 3 | 小红 | 26 | | 4 | 贺磊 | 100 | | 5 | 爱璇 | 120 | +----+-----------+-----+ 4 rows in set (0.00 sec) root@127.0.0.1 (helei)> insert into helei1 (name) values('不存在') on duplicate key update age=80; Query OK, 1 row affected (0.00 sec) root@127.0.0.1 (helei)> select * from helei1; +----+-----------+-----+ | id | name | age | +----+-----------+-----+ | 2 | 小明 | 28 | | 3 | 小红 | 26 | | 4 | 贺磊 | 100 | | 5 | 爱璇 | 120 | | 8 | 不存在 | 0 | +----+-----------+-----+ 5 rows in set (0.00 sec) 总结 replace into这种用法,相当于如果发现冲突键,先做一个delete操作,再做一个insert 操作,未指定的列使用默认值,这种情况会导致自增主键产生变化,如果表中存在外键或者业务逻辑上依赖主键,那么会出现异常。因此建议使用Insert into …on duplicate key。由于编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。 喜欢的读者可以点个赞来个关注,您的赞美和关注是对笔者继续发文的最大鼓励与支持! 赞 收藏 评论 分享 举报 上一篇:3分钟看完MongoDB3.6新特性 下一篇:Walk Through the Fire,Is there a way out 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 mysql8.0大小写的坑 这两天又被mysql8.0大小写的问题坑到了,看下面的报错:chown: cannot access './proc/38/fd/6': No such file or directorychown: cannot access './proc/38/fd/7': No such file or directorychown: cannot access './proc/38/fdinfo lower_case_table_nam my.cnf mysql8.0 chown not permmit MySQL sql优化详解 MySQL是什么?MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。今天给大家分享9个简单好用的数据库优化方式,希望对你的开发有帮助 字段 MySQL 数据库 Python中的MySQL操作:使用mysql-connector-python 在现代的软件开发中,数据库是存储和检索数据的关键组件。MySQL是世界上最流行的开源数据库之一,广泛用于网站和服务端应用程序。Python通过mysql-connector-python模块提供了与MySQL数据库进行交互的能力。在本文中,我们将看到如何在Python中使用这个模块来执行基本的数据库操作。安装mysql-connector-python在开始之前,你需要确保mysql-connec 数据库 mysql MySQL MySQL 5.7 坑爹参数 1.log_timestamps发现慢查询查了8个小时mysql> show variables like '%zone%';+------------------+--------+| Variable_name | Value |+------------------+--------+| system_time_zone | CST log_timestamps 坑爹的MSN 对于MSN这玩意我表示不是很爽,一天到晚给我出问题老板是台湾的,他们没有QQ的概念整天用的是MSN这个破玩意在大陆这边一天掉几次,没有解决办法,尼了个玛的……更气人就是要设置Outlook,你说说,这玩意能用吗?刚给老板设置好当时能收能发,把我得意的呀……还没过一天呢,一个个都来找我,为什么收不了邮件啊?为什么登不上啊?你 职场 MSN 休闲 坑爹的 非常坑爹 调试了好久,在MFC内居然不能够解析“Mat”总是显示"Mat"未定义,修改includ #include 依赖库 未定义 踩坑CBO,解决那些坑爹的SQL优化问题 踩坑CBO,解决那些坑爹的SQL优化问题本文根据DBAplus社群第93期线上分享整理而成讲师介绍 丁俊新炬网络首席性能优化专家SQL审核产品经理DBAplus社群联合发起人,《剑破冰山-Oracle开发艺术》副主编。Oracle ACEA,ITPUB开发版资深版主,十年电信行业从业经验。本次分享大纲:CBO优化器存在哪些坑CBO优化器坑的解决之道加强SQL审核,将性能问题扼杀于襁褓之中分享 SQL优化 STRAIGHT_JOIN优化坑爹SQL select d.device_id, d.device_token, d.app_name, d.user_id, d.app_name_aliases, d.app_version, vipruid from apns_device d, user_group u where d.user_id <> '0' and d.status =1 and u.user_ SQL 执行计划 数据 mysql utf8坑爹 # MySQL UTF8坑爹在开发过程中,我们经常会遇到处理多语言和特殊字符的需求。而MySQL作为一种常用的关系型数据库,使用UTF-8字符集来存储和处理多语言字符是很常见的。然而,UTF-8在MySQL中存在一些坑爹的问题,本文将向大家介绍这些问题并提供相应的解决方案。## 问题1:默认字符集并不是真正的UTF-8当我们在创建数据库或表时,使用默认字符集为UTF-8时,实际上MyS MySQL 特殊字符 多语言 坑爹的U盘 问题如下: 往U盘里复制文件,突然中断。 显示复制上了,但其实是乱码文件,并且无法删除,只能全盘格式化。 全盘格式化后,测试了一下似乎又能用了,便抱着试试看的态度再用用。 结果,没用几次,又出现上述问题。我把电脑里A的文件复制到U盘里就删除了,结果往电脑B里复制时,发现文件是乱码状态。这下好了,电脑 u盘 复制文件 文件复制 坑爹的Python陷阱 我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>>> a=1>>> def func():... a+=1... print a...>>> func()tra Python 坑爹的memaslap安装 在安装memaslap的过程中,按照晚上的安装方法安装后,没有错误提示,总是找不到memaslap执行文件,看到了 centos 错误提示 安装方法 Javascript 坑爹的BOM PHP PHP 打印了一个 php 字符串 linux 坑爹的AppleID设置 用邮箱a注册了苹果账号1,用邮箱b注册了苹果账号2,后来想更换账号2的邮箱,于是把账号2邮箱a换成了c 其它 坑爹的负载啊 坑爹的负载啊,你还能不能更坑爹一点。 丫的早上一过来同事说:“那台服务器的负载好高啊”,上去一看丫的将近200。查日志php-cgi严重不够用,添加php-cgi的数目,你个球球的还是不降;查看I/O 低的很,奇了怪了;我找找找,找了个上午丫的还是找不到。 火大,干掉其他的程序只留nginx+php-cgi,开启php 心情 闺女坑爹啊 刚才闺女坐我腿上嗑瓜子,转头跟我说:“爸爸给你一个。”我还很感动的说谢谢,也没看就吃了,结果… 其它 坑爹的Windows版 nginx 每次 双击 nginx.exe, 它都会 创建 两个nginx 进程 。 好像因为默认是2 个 nginx 进程。双击是可以的,但是如果 cmd 窗口执行,那么就会导致窗口一直 打开不会关闭, 而且输入任何东西都无响应。(其实不是没有响应, ) ctrl c 或者ctrl d 都无效。任务管理器中杀掉那个nginx 进程, 那么窗口就会恢复正常状态。 只能关闭cmd 窗口。 但是呢, 从任务管理器 nginx 任务管理器 排错 jQuery那坑爹的text() 有一段代码:var jTd = $("td:first"); jTd.text(jTd.find(":input").val()).addClass("readonly"); 结果居然报告:对象不支持“addClass”属性或方法难道 text(par jQuery 居然 坑爹 text() c++坑爹的char* char类型 获取调用一些别人给的函数时可能有尾部的意外多余字节,需要严格进行长度限制和截断。char也 赋值 常用函数 中间件 坑爹的RockSaw和坑爹的windows7 http://chen4w.iteye.com/blog/1153433 系统