繁体   English   中英

更新id而不是select,删除再插入?

[英]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...再次感谢大家! 干杯!

你知道还有一个UPDATE类型的查询对吗?

警告! 前方纯恶!

UPDATE `table`
SET `field1`='value1', `field2` = 'value2', `id`=LAST_INSERTED_ID()+1
WHERE `id` = 49;

为什么是纯邪恶警告? 您绝对不能更改现有条目的 ID,因为它一定弄乱您的表格。 最后的代码是纯理论,不推荐使用。

手册参考

我遇到了一篇解释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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM