是这样的,我有一个表“table”,里面有三个字段,分别是“aa,bb,cc”,其中aa,bb,cc单独的时候可以重复,所以无法在这些字段里设置主键primary或者唯一索引unique,现在我想实现的功能是,如何判断当插入数据的时候,如果要插入的数据重复的时候,就不允许插入,如何实现呢?假设表table里已经有这些数据:
table
aa               bb               cc
11               22               33
11               33               22
33               44               22现在我想插入这三条数据:
aa                bb              cc
11                33              44           (因为没有与之前的所有内容重复,可插入)
22                33              33           (因为没有与之前的所有内容重复,可插入)
11                22              33           (因为与之前第一条全部相同,所以禁止插入)如何现实,万分感谢!

解决方案 »

  1.   

    用触发器,after insert之后再删掉,期待大版有其他好办法
      

  2.   

    http://blog.csdn.net/wangjian0228/article/details/53189313
    下面有触发器的写法,自己按照需求改一下
      

  3.   


    命名目标table为 test1;要导入的数据table为test2 
    sql如下:
    INSERT INTO 
    test1 
    SELECT 
    t2.aa,
    t2.bb,
    t2.cc
    FROM 
    (
    SELECT test2.aa,test2.bb,test2.cc 
    FROM test2,test1 
    WHERE 
        test1.aa = test2.aa 
    and test1.bb = test2.bb 
    and test1.cc = test2.cc
    ) t1 
    RIGHT JOIN test2  t2 ON 
    t2.aa = t1.aa
    and t2.bb = t1.bb
    and t2.cc = t1.cc
    WHERE t1.aa is NULL
      

  4.   

    建立aa               bb               cc的联合唯一索引
    alter table tbname add unique index(aa,bb,cc)
      

  5.   

    执行这个sql语句
    alter table tbname add unique index(aa,bb,cc)
      

  6.   

    create unique index xxx001 on 我有一个表“table”(aa,bb,cc)
      

  7.   

    直接这样:
    ALTER TABLE table_name 
    ADD UNIQUE(aa, bb, cc)
      

  8.   

    多列组合唯一索引
    ALTER TABLE 表名 ADD UNIQUE INDEX (aa, bb, cc)
      

  9.   

    索引设置唯一unique
      

  10.   

    INSERT INTO TABLE(aa,bb,cc) SELECT 11,22,33 FROM DUAL WHERE EXISTS(SELECT 0 FROM TABLE WHERE aa!=11 AND bb!=22 AND cc!=33) ;