问题:插入一条数据,判重除id的所有字段,不重复才插入。

搜索关键词: 插入数据判重非主键,https://cn.bing.com/。

 

由于我是判重除id外的字段,所以,按主键判重的ON DUPLICATE KEY就不考虑了。

共三种方法,第一种适合不在乎索引的情况(我用的),第二种比较笨但是最安全,第三种必须是非空表才行,不推荐。

 

-- 1、MySQL设置唯一索引,然后insert ignore就行了。

-- 问题:(1)返回的是插入条数,而非id,如何返回id?(2)自增id会增长!

ALTER TABLE saml_list ADD UNIQUE(members,member_classify,list_compound,exp)

INSERT IGNORE saml_list(members,member_classify,list_compound,exp) VALUES ('13,0,25',1,8,'file,loff_t,int')

 

问题解决:(1)返回的是插入条数,而非id,如何返回id?

过程如下:

 

1、搜索关键词:mysql insert如何返回插入的id?spring data JPA 返回插入的id?

MySQL--获取最新插入数据的id【不行】

mysql 插入数据后返回自增 ID 的七种方法【除了Mybatis还是不行】

用insert into 插入数据后直接返回刚插入数据的ID (自增ID)【Mybatis】

@GeneratedValue(strategy = GenerationType.IDENTITY)//加上这条注解后,save方法就会返回数据库id了! 【JPA的save方法,这里原生SQL不一定适用】

2、中文不行,尝试官方API,发现找不到。尝试英文搜索:spring data jpa insert and return id。

查到这个:Returning an Auto-Generated Id with JPA

 

还是不行,再来:spring data jpa native sql insert and return id 。

查到:insert a data and get back ID in spring boot JPA

 

3、两处都提到了EntityManager,没用过,查一下吧。【未完】

 

 

 

-- 2、直接换成两条语句,查询是否存在,不存在插入。

-- 由于限制了limit 1,所以cout(*),不存在是0,存在是1。

-- Java处理逻辑,不连表。连表有一个问题,就是事务太长,容易出现死锁。

 

SELECT count(*) FROM saml_list WHERE members='13,1,25' LIMIT 1;

INSERT INTO saml_list(members,member_classify,list_compound,exp) VALUES ('13,0,25',1,8,'file,loff_t,int')

 

-- 3、insert into ...select ...where not exists (...)

-- 问题:很奇怪的东西,只有表不空的时候才能用,表空的时候死活插不进去。

INSERT INTO saml_list(members,member_classify,list_compound,exp)
SELECT '13,0,25',1,8,'file,loff_t,int' FROM saml_list
WHERE NOT EXISTS (
    SELECT members,member_classify,list_compound,exp FROM saml_list 
    WHERE members='13,0,25' AND member_classify=1 AND list_compound=8 AND exp='file,loff_t,int')
LIMIT 1;

 

INSERT INTO s(SN,SD,SA)
SELECT 'user2','dep1',20 FROM s
WHERE NOT EXISTS (
SELECT SN,SD,SA FROM s
WHERE SN='user1' AND SD='dep1' AND SA=20
)LIMIT 1;

 

注意:用单引号。

  在标准 SQL 中,字符串使用的是单引号。

  mysql中也允许用双引号表示字符串,但是这不是标准是扩展,最好不用,oracle中只允许用单引号。

 

 

 

参考:

(1)面试官:MySQL 唯一索引为什么会导致死锁?

(2)在MySQL数据库中,这4种方式可以避免重复的插入数据!

(3)update 没有索引导致业务崩了,老板骂了一个小时

 

 

posted on 2021-09-28 23:36  西伯尔  阅读(950)  评论(0编辑  收藏  举报