例如我想插入一条记录,c_id是100001,stu_id是100010,插入前检查是否已存在该行
,如果存在相同的行就不插入,求简单的sql语句,不要创建存储记录
IF NOT exists(SELECT * FROM 表 WHERE c_id=100001 and stu_id=100010)
INSERT INTO 表(字段...) VALUES (值, ...)
ELSE
UPDATE 表 SET 字段=值 WHERE c_id=100001 and stu_id=100010
IF NOT EXISTS(SELECT * FROM classchoose WHERE c_id='100001' AND stu_id='100010') then
INSERT INTO classchoose(c_id,stu_id) VALUES ('100001','100010');
或者试试看
NSERT INTO classchoose(c_id,stu_id)
VALUES ('100001','100010')
ON DUPLICATE KEY UPDATE
c_id='100001', stu_id='100010'
c_id,stu_id设置为联合主键
看看,on duplicate key update 这个语法。应该可以实现你想要的结果。类似 oracle的 MERGE into
EXISTS
指定一个子查询,检测行的存在。
语法
EXISTS subquery
参数
subquery
是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 SELECT 中有关子查询的讨论。
结果类型
Boolean
结果值
如果子查询包含行,则返回 TRUE。
例如:表【dbo.tb_e_User】,其中列【UserID】不允许重复
INSERT INTO 表
(c_id,stu_id)
SELECT "100001","100010"
FROM DUAL
WHERE NOT EXISTS (SELECT * FROM 表
WHERE c_id="100001" and stu_id="100010")
Mysql 有一个东西叫唯一索引
创建一个c_id和stu_id 的联合唯一索引
直接使用insert就好,只要设立一个c_id和stu_id 的联合唯一索引,插入的时候,如果有这两个字段相同的就会被阻止。
创建一个c_id和stu_id 的联合索引啊
根据c_id 和stu_id建立索引,直接insert如果存在是插不进去的
创建c_id和stu_id 的唯一索引,然后使用replace into语句插入..简单快捷
在插入前 做一个查询语句 如果 有 就 不插入 。如果是 mybatis可以用 动态sql来写
INSERT INTO classchoose(c_id,stu_id)
select '100001','100011' from dual
WHERE NOT EXISTS(SELECT * FROM classchoose
WHERE c_id='100001' AND stu_id='100011')
如果不需要提示,可以创建一个c_id和stu_id 的联合索引;
如果需要提示,可以先到数据库检查一下是否已经存在c_id 和stu_id,如果存在,那么提示一下;如果不存在,再写入数据库。
INSERT INTO tablename(c_id ,stu_id
) VALUES(3, 1) ON DUPLICATE KEY UPDATE stu_id=1;
类似这样一个语法试一下
insert into student1(c_id,stu_id)
select '1','2' where not EXISTS (select 1 from student1 where c_id='1' and stu_id='2')