我想创建一个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函数中定义一个合适的逻辑来实现结果。