En realidad, hay dos problemas en su pregunta. El primer problema es hacer Number columna única y la segunda es incrementar la columna Name agregando un número si ya existe.
PRIMERA PARTE
Dado que el número es UNIQUE , aplicar un UNIQUE restricción en la columna. Podría ser una PRIMARY KEY o una UNIQUE KEY .
Si la columna no tiene KEY y quieres que sea PRIMARY , aquí está el ALTER declaración:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
pero si solo quieres que sea UNIQUE y no una clave principal,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
SEGUNDA PARTE
De hecho, puedes hacerlo sin usar join.
INSERT INTO TableName(Number, Name)
SELECT 124 AS Number,
CONCAT('Robert', COALESCE(MAX(CAST(REPLACE(Name, 'Robert', '0') AS UNSIGNED)) + 1,'')) AS Name
FROM TableName
WHERE Name LIKE 'Robert%'
- Demostración de SQLFiddle
- Demostración de SQLFiddle (agregado más ejemplo )
- Demostración de SQLFiddle (arroja una excepción debido a la unicidad )
Algunos detalles:
cuando el valor proporcionado en la columna Number ya existe, arrojará un error ya que la columna es única. He leído un comentario de una publicación eliminada que dice:"..El número no es único, pero si existe, no quiero ingresar un registro". -- no tiene ningún sentido si no desea agregar singularidad en la columna ¿Cómo sabrás si el número ya existe o no? Haciendo una pequeña verificación de la existencia de Number se siente como un poco sobrecarga para mí. Así que mi mejor recomendación es hacer cumplir la singularidad.