插入使用相同的行(相同的主键)mysql php pdo

时间:2016-05-06 05:47:27

标签: php mysql

INSERT INTO courses1 (sys_id,name, location) 
SELECT *
FROM courses 
WHERE sys_id= $sysid

我有上面的两个表格,我想在课程中插入我当然拥有的内容。但是我遇到了sys_id的问题,因为我得到了Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'' in所以我所做的是在课程1中添加了一个名为system_id的列,但后来又收到了另一个错误,指出列不匹配。

Tried

INSERT IGNORE INTO但结果不是我所期待的。我想要的结果是每次进行交易时都有从课程到课程1的数据。我希望数据不被覆盖。

  1. 插入同一行(同一主键)时insert into的最佳解决方案是什么?
  2. UPDATE

    我的目标是备份数据(历史数据)。我想在编辑之前记录数据。基本上我正在做的是在更新之前将数据插入另一个表中

2 个答案:

答案 0 :(得分:0)

这个问题是一个完美的例子,它表明了给出答案,必须要理解问题的背景,不仅仅是写一个由问题中的某个关键字触发的自动帖子。

如果需要历史记录表,则必须具有与主表不同的结构。至少它应该具有来自主表的id的非唯一键。

因此,请创建具有相同结构的历史记录表,但添加main_id字段。这给你一个像

这样的结构
id
manin_id
name
location

然后,要将记录添加到历史记录表中,

INSERT INTO courses_history SELECT NULL, * FROM courses  WHERE sys_id=?

您可能还需要为main_id字段添加索引(非唯一)。

这样它将允许存储主表中同一行的多个“副本”。

要获取最后一个副本,您需要这样的查询:

SELECT * FROM courses_history WHERE sys_id=? ORDER BY id desc

答案 1 :(得分:-1)

制作名为PRIMARY KEY AUTO INCREMENT的{​​{1}},在名为courses1_id的{​​{1}}表格中再添加一个字段并更改您的查询

courses1

或者只需使用courses_id表格中的CREATE TABLE `courses1` ( `courses1_id` INT(11) NOT NULL AUTO_INCREMENT , `courses_id` INT(11) NOT NULL , `name` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `location` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , PRIMARY KEY (`courses1_id`), INDEX (`courses_id`)); INSERT INTO `courses1` (`courses_id`,`name`, `location`) SELECT * FROM `courses` WHERE `courses_id`= $id 字段来保留更改前的日期参考

DATETIME