我想要创建一个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脚本或触发器来实现这一点?
发布于 2013-08-15 12:15:50
下面的呢?
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) .
发布于 2013-08-15 12:11:20
创建一个sql函数,该函数在将名称作为参数传递时返回名称_id。一种方法是添加所有字符,但不会这样做,因为相同字符的不同排列会为不同的names.may提供相同的和,连接在sum末尾的主索引将完成这项工作。我认为您可以在sql函数中定义一个合适的逻辑来实现结果。
https://stackoverflow.com/questions/18252268
复制相似问题