[mysql]插入重复的关键更新,在相同的 ID

标签: jQuery MySQL PHP
发布时间: 2017/4/9 23:22:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我需要创建图表 analist,我想记录那一天做些什么。到处找不到如何做工作,我找到的东西而不是良好的插入,在这里我有代码

$mysqli->query('
INSERT INTO chart_sales (date, sales_order) VALUES (Now(), sales_order +1) 
ON DUPLICATE KEY UPDATE sales_order =VALUES(+1)');
 $rslt = mysql_query($stmt);

如何记录那一天,做了些什么,如果你把另一个日期来生成另一个 ID?

这里是我的数据库表

-- ----------------------------
-- Table structure for `chart_sales`
-- ----------------------------
DROP TABLE IF EXISTS `chart_sales`;
CREATE TABLE `chart_sales` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL DEFAULT '0000-00-00',
  `sales_order` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of chart_sales
-- ----------------------------
INSERT INTO `chart_sales` VALUES ('1', '2015-09-11', '1');
INSERT INTO `chart_sales` VALUES ('2', '2015-09-11', '1');
INSERT INTO `chart_sales` VALUES ('3', '2015-09-11', '1');
INSERT INTO `chart_sales` VALUES ('4', '2015-09-11', '1');

解决方法 1:

几个语法错误。这里是你拍摄的︰

INSERT INTO chart_sales (date, sales_order) VALUES (Now(), someValue) 
ON DUPLICATE KEY UPDATE sales_order =sales_order +1

你需要一个唯一键date

它的工作的关键是架构必须是现有的唯一键 Primary Key (PK) 或 unique key 就是冲突的候选人。你的情况你都是 pk。你需要一个唯一的密钥date

你可以有很多独特的主要的参选人为 clash ,所需的只是其中一个。

所以,如果你不呈现一个重复的 id,它将 INSERT 。如果会有 clash ,然后 UPDATE 发生。

注︰ clash 指的尝试,否则会违反唯一性,这是一件好事,声明,使更新发生时。

然后放在一起

CREATE TABLE `chart_sales` (
  `id` int(11) AUTO_INCREMENT primary key,
  `date` date NOT NULL,
  `sales_order` int(11) NOT NULL,
  unique key(`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-11',1) on duplicate key update sales_order=sales_order+1;
INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-22',1) on duplicate key update sales_order=sales_order+1;
INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-22',1) on duplicate key update sales_order=sales_order+1;
INSERT INTO `chart_sales` (date,sales_order) VALUES ('2015-09-22',1) on duplicate key update sales_order=sales_order+1;

...

select * from chart_sales;
+----+------------+-------------+
| id | date       | sales_order |
+----+------------+-------------+
|  1 | 2015-09-11 |           1 |
|  2 | 2015-09-22 |           3 |
+----+------------+-------------+
2 rows in set (0.00 sec)
赞助商