自动为字符mysql生成唯一的id

时间:2013-08-15 12:04:46

标签: mysql sql database

我想创建一个包含三列id,name,name_id,

的mysql表

我想要实现的是每当用户在数据库中输入名称时 那么系统应该自动生成名称的唯一ID。

e.g。 name是JJ,name_id应该是1,如果name是DD,那么name_id应该是2 如果在数据库中重复名称JJ,则name_id应为1。

应根据名称排序分配number_id值 即 A 应为1, B 应为2。

如何通过sql脚本或触发器实现这一目标?

2 个答案:

答案 0 :(得分:1)

以下情况如何?

INSERT INTO tbl (name,name_id) 
SELECT newname, COALESCE((SELECT name_id FROM tbl WHERE name=newname ),
                         (SELECT max(name_id)+1 FROM tbl))

这是假设列id自行处理,即auto_increment编辑。

newname当然也可以是一个字符串常量,您必须使用它来执行命令。

上面的命令在用于单独插入(“由用户”)时效果最佳。如果您想进行批量导入,那么它可能会非常昂贵,因为对于每个新值,表tbl将被扫描两次。对于这种情况,应该应用不同的逻辑:

首先通过name ed select找到所有name_id - group对,然后使用导入列表INNER JOIN找到结果。对于其余项目(没有现有name_id),请执行以下操作:找出所有记录中的最高@i=max(name_id),然后使用自动编号机制导入已排序列表({{ 1}})@i:=@i+1到位......

答案 1 :(得分:0)

创建一个返回名称的sql函数 _id传递名称作为参数。一种方法是添加所有字符但不会这样做因为不同的相同字符排列会给不同名称提供相同的总和。可能在汇总结束时连接主索引就可以完成工作。我认为你可以在sql函数中定义一个合适的逻辑来实现结果。

相关问题