mysql insert exists

情景如下:

  "今日前端忽然说句, 我需要做个判断, 不能重复收藏, 我犹如颈有寒冰不寒而栗, 于是思考我该怎么做?为什么她都思考到了我没有思考到这是我的工作啊"

  思考后得到三种解决方案:

    1. 两条sql, 然后通过第一条sql判断

    2. 一条sql, insert 中使用exists方式(暂时不会,下面讲解)

    3. 存储过程

  后请教公司一同事,得到结论, 如果是两个客户端同时操作就采用存储过程, 如果不是, 那么第一种第二种都ok, 后决定采用方案2

  

INSERT INTO table(column1,column2,column3 ...columnN)
SELECT value1,value2,value3 ...valueN
FROM dual
WHERE NOT EXISTS(
      SELECT *
      FROM table
      WHERE value = ?
);  

sql结构

INSERT INTO content (
    detail,
    status,
    beginTime,
    endTime)
SELECT
    @detail,
    1,
    NULL,
    NULL
FROM DUAL
    WHERE NOT EXISTS(
        SELECT contentId
        FROM content
        WHERE detail[email protected]);  

sql示例

dual是为了构建查询语句而存在的表,Oracle中很常见,配合INSERT ... SELECT构建成我们需要的表,并指定了数据项. 
EXISTS通过这个判断是否存在的函数,就免去了我们做IF-ELSE的冗繁操作

发现自己的sql还有漫长的路要走...

原文地址:https://www.cnblogs.com/renfanzi/p/8340967.html

时间: 2024-10-29 17:18:29

mysql insert exists的相关文章

MySQL关于exists的一个bug

今天碰到一个很奇怪的问题,关于exists的, 第一个语句如下: SELECT count(1) FROM APPLY t WHERE EXISTS ( SELECT r.APPLY_ID FROM RECORD r WHERE t.APPLY_ID = r.APPLY_ID ); 产生的结果是:89584 第二个语句如下: SELECT count(1) FROM APPLY t WHERE EXISTS ( SELECT max(r.FINISH_TIME) FROM RECORD r WH

mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问题 [CSDN博客] mysql 主从复制 双主从复制原理 防止主键重复问题(必看) [CSDN博客] replace into导致mysql自增列导致主键重复问题分析 [CSDN博客] 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql) [CSDN博客] mysql i

MySQL INSERT ON DUPLICATE KEY UPDATE

来源:https://www.mysqltutorial.org/mysql-insert-or-update-on-duplicate-key-update/ Introduction to the MySQL INSERT ON DUPLICATE KEY UPDATE statement The INSERT ON DUPLICATE KEY UPDATE is a MySQL's extension to the SQL standard's INSERT statement. When

MySQL 中 EXISTS 的用法

在MySQL中 EXISTS 和 IN 的用法有什么关系和区别呢? 假定数据库中有两个表 分别为 表 a 和表 b create table a ( a_id int, a_name varchar(20) ) create table b ( b_id int, b_name varchar(20) ) 那么 select * from a where a_name in (select b_name from b) 这条SQL语句的意义很明显是选取满足where条件下 a 中的所有列的数据

使用 xlrd 模块实现对excel 的读取、excel转json 、excel 转 mysql insert 语句

#-*- coding:utf-8 -*- # 处理 excel 中的 area 为 Mysql insert 语句 import xlrd, json, codecs, os # data = xlrd.open_workbook('101.xls') data = xlrd.open_workbook('C:\Users\Administrator\Desktop\changanyiyuan.xlsx') # table = data.sheets()[0] table = data.she

mysql> insert into tb values (6,'66') -> ;

mysql> insert into tb values (6,'66')    -> ;mysql> select * from tb; +------+------+| id   | name |+------+------+|    2 | 22   |+------+------+1 row in set (0.00 sec) mysql> insert into tb values (6,'66') -> ;

解决安装mysql的”A Windows service with the name MySQL already exists.“问题

如果以前安装过mysql,卸载重装,很可能会碰到"A Windows service with the name MySQL already exists."这样的提示.即服务已经存在.我们可以在window任务管理器----服务中查看,发现确实存在,没有卸载干净. 解决这个问题,可以在dos窗口,使用如下命令: sc delete mysql 如果成功,出现如下结果:[SC] DeleteService SUCCESS 之后,重启电脑.如果再在任务管理器----服务中查看,会发现my

如何优化MySQL insert性能

对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是插入时间长.我们就有一个业务系统,每天的数据导入需要4-5个钟.这种费时的操作其实是很有风险的,假设程序出了问题,想重跑操作那是一件痛苦的事情.因此,提高大数据量系统的MySQL insert效率是很有必要的. 经过对MySQL的测试,发现一些可以提高insert效率的方法,供大家参考参考. 1. 一条SQL语句插入多条数据. 常用的插入语句如: INSERT INTO `insert_table` (`dateti

Mysql insert语句的优化

1) 如果你同时从同一客户插入很多行,使用多个值表的INSERT语句.这比使用分开INSERT语句快(在一些情况中几倍).    Insert into test values(1,2),(1,3),(1,4)- 2) 如果你从不同客户插入很多行,能通过使用INSERT DELAYED语句得到更高的速度.Delayed的含义是让insert 语句马上执行,其实数据都被放在内存的队列中,并没有真正写入磁盘:这比每条语句分别插入要快的多:LOW_PRIORITY刚好相反,在所有其他用户对表的读写完后