自动生成字符mysql的唯一id



我想创建一个mysql表,其中有三列id、name、name_id和

我想做的是每当用户在数据库中输入名称时然后系统应该自动为name生成一个唯一的id。

例如。name为JJ,则name_id应为1;如果name为DD,则name_i应为2如果名称JJ在数据库中重复,则name_id应该是1。

number_id值应根据名称排序进行分配即A应得到1,B应该得到2。

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

以下内容如何?

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 ed.

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

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

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

创建一个返回名称的sql函数_将name作为参数传递时的id。一种方法是添加所有字符,但这样做不行,因为相同字符的不同排列会为不同的名称提供相同的总和。可以在总和的末尾连接主索引就可以了。我认为您可以在sql函数中定义一个合适的逻辑来实现结果。

最新更新