您的问题实际上有两个问题。第一个问题是使
Number列唯一,第二个问题是
Name通过添加数字(如果已经存在)来增加列。
第一部分
由于数字为
UNIQUE,因此
UNIQUE对列实施约束。可能是a
PRIMARY KEY或a
UNIQUE KEY。
如果该列没有,
KEY而您想创建该列
PRIMARY,则
ALTER语句如下:
ALTER TABLE TableName ADD ConSTRAINT tb_pk PRIMARY KEY (Number)
- SQLFiddle演示
但是如果您只希望它
UNIQUE成为主键而不是主键,
ALTER TABLE TableName ADD ConSTRAINT tb_uq UNIQUE (Number)
- SQLFiddle演示
第二部分
实际上,您可以不使用join来执行此操作。
INSERT INTO TableName(Number, Name)SELECt 124 AS Number, CONCAt('Robert', COALESCE(MAX(CAST(REPLACE(Name, 'Robert', '0') AS UNSIGNED)) + 1,'')) AS NameFROM TableNameWHERe Name LIKE 'Robert%'- SQLFiddle演示
- SQLFiddle演示( 添加了更多示例 )
- SQLFiddle演示( 由于唯一性而引发异常 )
一些细节:
当列上提供的值
Number已经存在时,由于列是唯一的,因此将引发错误。我从已删除的帖子中读到一条评论,上面写着: “
..数字不是唯一的,但如果确实存在,则我不想输入记录。” -如果您不想在列上添加 唯一性
,则没有任何意义。您怎么知道这个号码是否已经存在?对
Number感觉的存在进行一点检查对我来说有点像是开销。因此,我最好的建议是强制执行唯一性。



