Il y a en fait deux problèmes dans votre question. Le premier problème est de faire Number
colonne unique et la seconde consiste à incrémenter la colonne Name
en ajoutant un numéro s'il existe déjà.
PREMIÈRE PARTIE
Puisque le numéro est UNIQUE
, appliquer un UNIQUE
contrainte sur la colonne. Il peut s'agir d'une PRIMARY KEY
ou une UNIQUE KEY
.
Si la colonne n'a pas de KEY
et vous voulez en faire PRIMARY
, voici le ALTER
déclaration :
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
mais si vous voulez seulement qu'il soit UNIQUE
et non une clé primaire,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
DEUXIÈME PARTIE
Vous pouvez en fait le faire sans utiliser 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%'
- Démo SQLFiddle
- Démo SQLFiddle (ajout d'un exemple supplémentaire )
- Démo SQLFiddle (lève une exception en raison de l'unicité )
Quelques détails :
lorsque la valeur fournie dans la colonne Number
existe déjà, il renverra une erreur puisque la colonne est unique. J'ai lu un commentaire d'un message supprimé disant :"..Le numéro n'est pas unique, mais s'il existe, je ne veux pas entrer d'enregistrement." -- cela n'a aucun sens si vous ne voulez pas ajouter l'unicité sur la colonne. Comment saurez-vous si le numéro existe déjà ou non ? Faire une petite vérification de l'existence de Number
se sent comme un peu au-dessus pour moi. Donc, ma meilleure recommandation est d'imposer l'unicité.