所以,设想一个带有几个简单列,自动增量和哈希(varchar,UNIQUE)的mysql表。MySQL独特的哈希插入
是否有可能给MySQL一个查询,将添加一列,并生成一个独特的散列没有多个查询?
目前,我能想到实现这一目标的唯一方法是一段时间,我担心会越来越多的处理器密集型数据库中的条目越多。
下面是一些伪PHP,显然未经测试,但得到的总体思路跨越:
while(!query("INSERT INTO table (hash) VALUES (".generate_hash().");")){
//found conflict, try again.
}
在上面的例子中,哈希列将是唯一的,所以查询将失败。问题是,比方说db中有500,000个条目,我正在使用一个base36哈希生成器,有4个字符。冲突的可能性几乎为1比3,而且我绝对不能运行160,000个查询。事实上,超过5我会认为是不可接受的。
那么,我可以用纯SQL做到这一点吗?我需要生成一个base62,6个字符串(例如:“j8Du7X”,字符a-z,A-Z和0-9),并且用它更新last_insert_id,或者甚至更好地在插入过程中生成它。
我可以使用MySQL来处理基本的CRUD,但即使JOIN也在我的MySQL舒适区之外,所以如果这是蛋糕,请原谅我的无知。
任何想法?我宁愿使用纯MySQL或PHP & MySQL,但是如果其他语言能够完成这项工作,我会建立一个脚本和AJAX。
谢谢!
为什么你想要散列?你不能使用auto_increment列来达到同样的目的吗? – zneak 2010-03-18 22:16:41
我需要base62,6个字符的散列,以在URL字符串中使用。我可以将auto_inc翻译成base62,但是这不会让我手动创建一个条目(比如说TheLnk - 这是一个有效的base62哈希,但是如果我在一个汽车公司工作,我不能添加它。 ..)。 – Jesse 2010-03-19 01:15:43