有没有办法让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调用它们。感谢
答案 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为其他表的主字段哈希。