Php 如何在mysql中散列自动增量

Php 如何在mysql中散列自动增量,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,有没有办法让mysql散列表的自动增量值? 例如md5 id - name 1 - New York 2 - Chicago 3 - Sydney 4 - Berlin id-名称 1-纽约 2-芝加哥 3-悉尼 4-柏林 我想得到的 id - name c4ca4238a0b923820dcc509a6f75849b - New York c81e728d9d4c2f636f067f89cc14862c - Chi

有没有办法让mysql散列表的自动增量值? 例如md5

id - name 1 - New York 2 - Chicago 3 - Sydney 4 - Berlin id-名称 1-纽约 2-芝加哥 3-悉尼 4-柏林 我想得到的

id - name c4ca4238a0b923820dcc509a6f75849b - New York c81e728d9d4c2f636f067f89cc14862c - Chicago eccbc87e4b5ce2fe28308fd9f2a7baf3 - Sydney a87ff679a2f3e71d9181a67b7542122c - Berlin id-名称 c4ca4238a0b923820dcc509a6f75849b-纽约 c81e728d9d4c2f636f067f89cc14862c-芝加哥 eccbc87e4b5ce2fe28308fd9f2a7baf3-悉尼 a87ff679a2f3e71d9181a67b7542122c-柏林 提前谢谢

编辑:

我想我需要进一步澄清这个问题,我想做的不是调用ID,而是插入它们。此时ID列是一个int字段,我将把它改为varchar


我想将标识符保存为数据库中的哈希值,而不是使用mysql SELECT调用它们。谢谢

MySQL
文档说

函数不能作为列默认值添加-除了now()之外 内部表示为当前时间戳的同义词

最好的办法是这样做

UPDATE yourtablename SET id=MD5(id) WHERE 1=1;
或者运行
触发器

类似于。。。(不是100%正确…只是给你一个想法)


也许我不明白这个问题,但我的看法是:

我想你应该试着创建一个哈希表。因此,插入id字段作为数据的散列(md5(name))


但如果不是,请在插入后使用表触发器生成字段哈希。

这里的答案让我想到了一个想法。。我认为这是目前最好的解决办法。。但如果有人知道更简单的方法,我很高兴听到

解决方案:


创建一个具有自动递增字段(如id或count)的新表,您将始终首先递增该字段,并使用该表中的最后一个id将其散列到另一个表的主字段中。

如果出于某种原因确实需要此字段,您可以通过一个单独的排序表和一个
BEFORE
触发器来实现它

表架构:

创建表表1\u seq
(id INT非空自动递增主键);
创建表1
(id VARCHAR(32)非空默认值0,名称VARCHAR(32));
扳机

分隔符$$
创建触发器tg_bi_表1
在表1中插入之前
每行
开始
插入表1_seq()值();
设置NEW.id=MD5(最后一次插入id());
结束$$
定界符;
现在,您可以在
表1
表中插入行

在表1中插入(`name`)值('New York')、('Chicago')、('Sydney')、('Berlin');
或选择

从表1中选择*,其中id=MD5(2);

下面是演示

以上所有答案都没有很好地理解使用散列id的必要性

散列自动递增id违反了整个概念。 您想要达到的概念是,下一个id与上一个id相比是不可预测的

在散列id的思想中,md5(1)的下一个id是md5(2)

如果你使用有帮助的名字

最好从几个字段创建哈希。
字段一起应该是唯一的,以创建唯一的散列。

不幸的是,在BEFORE触发器中,id列没有被赋予自动递增值。但现在要在触发后改变它已经太晚了。此外,不能使VARCHAR列自动递增,它必须是整数类型之一。但是如果它是整数,你不能在里面存储十六进制数字串。谢谢比尔。你是对的。这就是为什么我把这个语句放在斜体中的原因,因为我不确定这是否真的有效。我喜欢为标识符使用唯一字段的想法,比如。。md5(名称),但这意味着我需要重新设计整个程序,这将花费太多时间。我喜欢触发的想法,但没有太多的经验。我将在稍后进行试验,并尝试将其与我在这里发布的Solunton结合起来,如果这样的事情是可能的。。但总而言之,谢谢你的回答。你能检查一下小提琴演示吗。它不显示anything@KapilPaul这是小提琴方面的问题
CREATE TRIGGER generateMD5forID BEFORE INSERT ON `yourtablename` FOR EACH ROW SET id = MD5(id);