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 脚本或触发器来实现?

4

2 回答 2

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都会被扫描两次。对于这种情况,应该应用不同的逻辑:

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

于 2013-08-15T12:15:50.260 回答
0

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

于 2013-08-15T12:11:20.400 回答