大数据★东东
2018-05-30 06:54
采纳率: 66.7%
浏览 2.4k

Mysql插入一行前检查改行是否已经存在,存在则不插入,不存在则插入

例如我想插入一条记录,c_id是100001,stu_id是100010,插入前检查是否已存在该行
,如果存在相同的行就不插入,求简单的sql语句,不要创建存储记录图片说明

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

16条回答 默认 最新

  • threenewbee 2018-05-30 06:59
    已采纳
     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
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-05-30 07:36

    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设置为联合主键

    评论
    解决 无用
    打赏 举报
  • 忧雅的哀伤 2018-05-30 07:40

    看看,on duplicate key update 这个语法。应该可以实现你想要的结果。类似 oracle的 MERGE into

    评论
    解决 无用
    打赏 举报
  • qq_36596719 2018-05-30 07:50

    EXISTS

    指定一个子查询,检测行的存在。 
    

    语法

    EXISTS subquery
    

    参数

    subquery
    
    是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 SELECT 中有关子查询的讨论。 
    

    结果类型

    Boolean
    

    结果值

    如果子查询包含行,则返回 TRUE。
    

    例如:表【dbo.tb_e_User】,其中列【UserID】不允许重复

    评论
    解决 无用
    打赏 举报
  • qq_33448617 2018-05-30 08:06

    INSERT INTO 表

    (c_id,stu_id)

    SELECT "100001","100010"

    FROM DUAL

    WHERE NOT EXISTS (SELECT * FROM 表

    WHERE c_id="100001" and stu_id="100010")

    评论
    解决 无用
    打赏 举报
  • Fatal Error 2018-05-30 09:26

    Mysql 有一个东西叫唯一索引

    评论
    解决 无用
    打赏 举报
  • Fatal Error 2018-05-30 09:28

    创建一个c_id和stu_id 的联合唯一索引

    评论
    解决 无用
    打赏 举报
  • shen931205 2018-05-30 09:57

    直接使用insert就好,只要设立一个c_id和stu_id 的联合唯一索引,插入的时候,如果有这两个字段相同的就会被阻止。

    评论
    解决 无用
    打赏 举报
  • weixin_39860597 2018-05-30 10:56

    创建一个c_id和stu_id 的联合索引啊

    评论
    解决 无用
    打赏 举报
  • ge_ge1 2018-05-30 10:58

    根据c_id 和stu_id建立索引,直接insert如果存在是插不进去的

    评论
    解决 无用
    打赏 举报
  • 纯属巧合l 2018-05-30 12:21

    创建c_id和stu_id 的唯一索引,然后使用replace into语句插入..简单快捷

    评论
    解决 无用
    打赏 举报
  • 大明子。 2018-05-30 12:37

    在插入前 做一个查询语句 如果 有 就 不插入 。如果是 mybatis可以用 动态sql来写

    评论
    解决 无用
    打赏 举报
  • 点点320 2018-05-31 03:49

    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')

    评论
    解决 无用
    打赏 举报
  • coolsuosuo 2018-05-31 03:53

    如果不需要提示,可以创建一个c_id和stu_id 的联合索引;
    如果需要提示,可以先到数据库检查一下是否已经存在c_id 和stu_id,如果存在,那么提示一下;如果不存在,再写入数据库。

    评论
    解决 无用
    打赏 举报
  • Angry_greens 2018-05-31 06:30

    INSERT INTO tablename(c_id ,stu_id) VALUES(3, 1) ON DUPLICATE KEY UPDATE stu_id=1;
    类似这样一个语法试一下

    评论
    解决 无用
    打赏 举报
  • zhangxl5232 2018-05-31 08:15

    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')

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题