以下是我的表架构,我们使用的是mysql 5.7版本
CREATE TABLE rule_reports (
pkey int(11) NOT NULL AUTO_INCREMENT,
email varchar(250) DEFAULT NULL,
domain varchar(250) NOT NULL,
rule_id bigint(20) unsigned NOT NULL,
rule_type varchar(250) NOT NULL,
log_time datetime DEFAULT NULL,
count int(11) DEFAULT NULL,
PRIMARY KEY (pkey),
KEY dwl (domain,rule_id,log_time)
)
我想在表格中增加 count 列而不是新行,如果 表格行中已存在 域,rule_id,rule_type 值的组合
表格
的示例行+------+-------------------------+---------+------------------+------------------+-------------------------+----------
| pkey | email | domain | rule_id | rule_type | log_time | count
+------+-------------------------+---------+------------------+------------------+-------------------------+-----------
| 1 | user1@yopmail.com | user1 | 566 | type1 | 2016-09-13 17:23:02.000 | 1
| 2 | user2@yopmail.com | user2 | 567 | type2 | 2016-09-13 17:23:02.000 | 1
-----------------------------------------------------------------------------------------------------------------------
假设if下面的语句不应该创建一行,因为domain,rule_id,rule_type的相同值已存在于表中,所以我需要 count 列增量
insert into rule_reports(domain,rule_id,rule_type,count) values('user1',566,'type1',1)
下面的语句应该在表格中创建一个新行
insert into rule_reports(domain,rule_id,rule_type,count) values('user3',568,'type3',1)
答案 0 :(得分:0)
在相关列上添加唯一索引,如果记录已存在,则使用ON DUPLICATE KEY UPDATE
增加计数。
ALTER TABLE rule_reports ADD UNIQUE unique_index(domain, rule_id, rule_type);
INSERT INTO rule_reports (domain, rule_id, rule_type, count)
VALUES ('user1', 566, 'type1', 1)
ON DUPLICATE KEY UPDATE count = count + 1