C# MYSQL Insert…在重复值上以增量再次插入

C# MYSQL Insert…在重复值上以增量再次插入,c#,mysql,sql,C#,Mysql,Sql,我有5列a、b、c、d和e。 我想在前4列中插入值,并在最后一列中将默认值保留为1。 我保留了前4列作为主键。 如果在前4列中插入了重复的值,那么我想再次插入相同的值,但在第5列中增加值。 例如:如果1,2,3,4是前4列的值。然后,当1,2,3,4再次出现时,它们需要作为1,2,3,4插入,但第五列作为2。如果前四列是主键,则不能再次插入1,2,3,4 i、 e 服用 第1列、第2列、第3列、第4列 1,2,3,4-正常 2,1,3,4-正常 2,3,1,4-正常 1,4,3,2-正常 ..

我有5列a、b、c、d和e。 我想在前4列中插入值,并在最后一列中将默认值保留为1。 我保留了前4列作为主键。 如果在前4列中插入了重复的值,那么我想再次插入相同的值,但在第5列中增加值。
例如:如果1,2,3,4是前4列的值。然后,当1,2,3,4再次出现时,它们需要作为1,2,3,4插入,但第五列作为2。

如果前四列是主键,则不能再次插入1,2,3,4

i、 e

服用 第1列、第2列、第3列、第4列

1,2,3,4-正常 2,1,3,4-正常 2,3,1,4-正常 1,4,3,2-正常 .. 像4c4组合

但是

1,2,3,4-正常 1,2,3,4-同样,这将是一个错误


因此不能再次插入1,2,3,4

首先删除主键,然后添加唯一键

ALTER TABLE test DROP PRIMARY KEY, ADD UNIQUE KEY 'test_uIdx_a_b_c_d_e' ( a,b,c,d,e );
假设你的桌子现在看起来像这样

CREATE TABLE test (
    a int NOT NULL DEFAULT '0',
    b int NOT NULL DEFAULT '0',
    c int NOT NULL DEFAULT '0',
    d int NOT NULL DEFAULT '0',
    e int NOT NULL DEFAULT '0',
    UNIQUE KEY 'test_uIdx_a_b_c_d_e' ( a,b,c,d,e )
)
然后可以在插入之前在上创建触发器

DELIMITER ;;
CREATE TRIGGER before_test_insert 
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
    SET NEW.e := ( SELECT COUNT(*)+1 FROM test WHERE a = NEW.a AND b = NEW.b AND c = NEW.c AND d = NEW.d;
END;;

DELIMITER ;
这会将字段e设置为a、b、c、d的出现次数

上面的一条评论提供了一个更简单的选择


我发现的只是重复更新……但我不想更新。我想再插入一次。这里有一个用于重复插入的函数。我尝试了if exists,但它似乎不适用于mysqlPrimary key。primary key有一个唯一的约束,所以如果没有使用primary key,数据库将拒绝这样的插入,并且有5列,比如a、b、c、d、e,其中e的默认值为1。然后,当遇到a、b、c、d的重复值时,我希望将它们存储在数据库中,e增加1。如何检查a、b、c、d是否重复?
在重复密钥更新时插入tbl_abc集合a=1、b=1、c=1、d=1、e=1插入tbl_abc集合a=1、b=1、c=1、d=1、e=1+1所有的5列都应该有唯一的键约束。让我们忘掉主键吧。如果相同的4个值再次出现,那么我想再次将它们存储在数据库中,并在第5列中增加值。您添加一个新列,称为serial_no,并将其标记为主键,而不是这4列。现在你正常插入。它应该有用!