【问题标题】:PHP/Mysql CalendarPHP/Mysql 日历
【发布时间】:2012-05-18 07:22:11
【问题描述】:

对不起,我的英语不好。

我想使用“重复密钥更新”,但我不知道如何。

我的 MySQL 数据库是一样的:

id (primary key | autoincrement), id_hostel, date, allotement

我的 MySQL 查询:

insert into table (id_hostel, datebvj, allotement) VALUES
('1','09/05/2012','7'), ('1','10/05/2012','5'),
('1','11/05/2012','6')
ON DUPLICATE KEY UPDATE allotement=VALUES(allotement)

分配意味着房间

问题:即使数据库中已有数据,此查询也会进行插入查询。

我希望查询运行良好。

有什么建议吗?

非常感谢。

【问题讨论】:

  • 如何确定要插入的记录是否与现有记录“相同”?是不是id_hostel是一样的?
  • 附带说明,您是否考虑过使用REPLACE INTO
  • 我会考虑的...谢谢伦纳德!

标签: mysql insert duplicates key


【解决方案1】:

只有在插入会导致创建重复记录时,“重复记录”才会转换为更新,其中重复意味着会违反唯一/主键索引。

鉴于您的表结构,您必须插入重复的 id 字段才能触发转换。您的其他字段都没有唯一键,并且您的 insert 语句没有插入 id 值,因此无法触发 insert->update 开关。

【讨论】:

  • id_hostel 从 1 变为 3(旅馆数量)。 date 和 id_hostel 都决定是否插入记录。
  • 我将查询更改为:插入表 (id_hostel, datebvj, alloment) VALUES ('1','09/05/2012','7'), ('1','10 /05/2012','5'), ('1','11/05/2012','6') ON DUPLICATE KEY UPDATE id_hostel=VALUES(id_hostel) 但它不起作用!
  • 那是因为id_hostel 不是唯一键。表中唯一的唯一键是 id 字段,您没有向其中插入任何内容,让 mysql 生成自己的键值,防止发生冲突,导致更新
  • 我应该让 id_hostel 成为主键?
  • 不知道 - 只有你可以做出这个决定,但是如果插入新数据会违反唯一键,则“重复键”类型查询只会进行更新。但是,您要重新安排表格以实现这一点,这取决于您。
猜你喜欢
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多