如何在mysql中哈希自动增量

时间:2013-10-26 17:59:11

标签: php mysql phpmyadmin

有没有办法让mysql哈希表的自动增量值? 例如,使用md5?

    id - name
    1  - New York  
    2  - Chicago   
    3  - Sydney    
    4  - Berlin    

我想要的是什么

    id - name 
    c4ca4238a0b923820dcc509a6f75849b - New York  
    c81e728d9d4c2f636f067f89cc14862c - Chicago   
    eccbc87e4b5ce2fe28308fd9f2a7baf3 - Sydney    
    a87ff679a2f3e71d9181a67b7542122c - Berlin    

提前致谢

编辑:

我想我需要更多地澄清这个问题,我想要做的不是调用ID而是插入它们。目前,ID列是一个int字段,我将更改为varchar。

我想将标识符保存为DB中的Hashed,而不是使用mysql SELECT调用它们。感谢

5 个答案:

答案 0 :(得分:6)

如果你真的需要这个,出于某种原因,你可以借助一个单独的排序表和一个BEFORE触发器来实现它

表模式:

CREATE TABLE table1_seq
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE table1
(id VARCHAR(32) NOT NULL DEFAULT 0, name VARCHAR(32));

触发器

DELIMITER $$
CREATE TRIGGER tg_bi_table1
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
  INSERT INTO table1_seq () VALUES ();
  SET NEW.id = MD5(LAST_INSERT_ID());
END$$
DELIMITER ;

现在您可以在table1

中插入行
INSERT INTO table1 (`name`) VALUES ('New York'),('Chicago'),('Sydney'),('Berlin');

或选择

SELECT * FROM table1 WHERE id = MD5(2);

这是 SQLFiddle 演示

答案 1 :(得分:1)

MySQL 文档说..

  

无法将函数添加为COLUMN DEFAULTS - 除了now()   在内部表示为CURRENT_TIMESTAMP的同义词。

最好的办法就是这样做......

UPDATE yourtablename SET id=MD5(id) WHERE 1=1;

或运行 TRIGGER

类似......(不是100%正确......只是给你一个想法

CREATE TRIGGER generateMD5forID BEFORE INSERT ON `yourtablename` FOR EACH ROW SET id = MD5(id);

答案 2 :(得分:1)

也许我不明白这个问题,但这是我的观点:

我认为您尝试创建哈希表。因此,将id字段作为数据的哈希值插入(md5(name))。

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

答案 3 :(得分:1)

上面的所有答案都缺乏对使用散列id的需要的充分理解。

哈希自动增量ID违反了整个概念。 您想要达到的概念是下一个ID将不可预测。

在哈希id的想法中,md5(1)的下一个id是md5(2)。

如果使用有帮助的名称。

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

答案 4 :(得分:0)

这里的答案在我身上提出了一个想法..我认为这将是现在最好的解决方案..但如果有人知道一种更简单的方法,我很高兴听到它。

<强>解决方案:

使用自动增量字段(如id或count)创建一个新表,您将始终首先递增并使用该表中的最后一个ID为其他表的主字段哈希。