首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动生成字符mysql的唯一id

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

Stack Overflow用户
提问于 2013-08-15 12:04:45
回答 2查看 1.2K关注 0票数 0

我想要创建一个mysql表,其中包含三个列id、name、name_id、

我想要的是,每当用户向数据库输入名称时,系统就应该自动生成唯一的名称id。

例如,名称是JJ,那么name_id应该是1,如果名称是DD,那么name_id应该是2,如果在数据库中重复名称JJ,那么name_id应该是1。

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-08-15 12:15:50

下面的呢?

代码语言:javascript
复制
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将被扫描两次。在这种情况下,应该应用不同的逻辑:

首先通过nameed select查找所有group-name_id对,然后使用导入列表对结果进行INNER JOIN。对于其余的项(没有现有的name_id),请执行以下操作:查找所有记录中最高的@i=max(name_id),然后导入排序列表,并为name_id设置自动计数机制(@i:=@i+1) .

票数 1
EN

Stack Overflow用户

发布于 2013-08-15 12:11:20

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18252268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档