根据MySql中表中其他列的值创建/更新行

时间:2016-11-08 09:45:05

标签: mysql

以下是我的表架构,我们使用的是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)

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