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的数据。我希望数据不被覆盖。
insert into
的最佳解决方案是什么? UPDATE
我的目标是备份数据(历史数据)。我想在编辑之前记录数据。基本上我正在做的是在更新之前将数据插入另一个表中
答案 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