[英]How to select mysql row ID for WHERE clause on UPDATE, INSERT, DELETE via php?
[英]update id instead of select, delete and insert?
我想要做的是运行一个 php 脚本,该脚本选择某些 mysql 条目并将它们移动到表的顶部(或者就像插入时一样自动增加 id 列)。
说明:我有一个包含 100 个条目的表。 条目 n. 49 和条目 88 必须像这样更新:条目 49 被删除,所有数据仍在/插入表中,但 id 为 101。
条目 88 也是如此:删除/更新 id 列值为 88 的行,新条目/更新的相同条目出现 id 为 102,但数据相同。
此外,脚本运行后不会出现重复 id 等问题,需要一个对 mysql 友好的解决方案。
你明白了吗?
我的问题是:如何以最有效和最简单的方式做到这一点?
我想到的唯一选择真的很长,而且似乎不必要地复杂: select 整行,删除它,插入一个包含所有数据的新行,让 id 自动递增......
现在,如果有人愿意与我分享他们对此事的看法,我将不胜感激!
其他信息:脚本每天运行一次,功能强大的apache专用服务器。 不需要优化,要求简单解决方案的问题要求一种简单的方法来处理我的问题,而实际上不需要如此努力。
感谢大家的帮助,我感谢您的每一个回答和评论,因为我认为这个问题不能比我上面所说的更简单地解决。 使用一块 PHP,我现在要结束这个问题了,我再说一遍,感谢所有回答的人,如果你有一个解决问题的想法,而不是使用 php。 请在这里回答,我会读的。 或者至少也许我们会帮助任何其他将在未来阅读此主题的人。 假设 2012 年不会带来世界末日,……在那种情况下。 没有人会再读这个帖子了,你最好不要发帖:.. 但我喜欢认为未来是我们来决定的。P...再次感谢大家! 干杯!
我遇到了一篇解释A Point In Time 数据库设计的文章。 本文描述了使用触发器来实现设计。 您可以使用此解决方案创建一个触发器,该触发器不是删除,而是更新 id。
如前所述,弄乱您的 ID 非常危险,而且迟早肯定会损坏您的数据。
我真的不知道你为什么需要它,但这将是我认为最好的查询:
UPDATE %table% SET id = (SELECT Auto_increment FROM information_schema.tables WHERE table_schema = DATABASE() && table_name = '%table%') WHERE id = %id%
如果您想确保数据库不会搞砸,请使用事务 (InnoDB) 或 LOCK (MyISAM)
InnoDB
START TRANSACTION;
UPDATE %table% SET id = (SELECT Auto_increment FROM information_schema.tables
WHERE table_schema = DATABASE() && table_name = '%table%') WHERE id = %id%; 犯罪;
MyISAM
LOCK TABLES %table% WRITE;
UPDATE %table% SET id = (SELECT Auto_increment FROM information_schema.tables
WHERE table_schema = DATABASE() && table_name = '%table%') WHERE id = %id%; 解锁表;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.