W twoim pytaniu są właściwie dwa problemy. Pierwszym problemem jest zrobienie Number
kolumna unikalna, a druga to zwiększenie kolumny Name
dołączając numer, jeśli już istnieje.
CZĘŚĆ PIERWSZA
Ponieważ numer to UNIQUE
, wymuś UNIQUE
ograniczenie na słupie. Może to być PRIMARY KEY
lub UNIQUE KEY
.
Jeśli kolumna nie zawiera KEY
i chcesz, aby był PRIMARY
, oto ALTER
oświadczenie:
ALTER TABLE TableName ADD CONSTRAINT tb_pk PRIMARY KEY (Number)
ale jeśli chcesz tylko, aby był UNIQUE
a nie klucz podstawowy,
ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (Number)
CZĘŚĆ DRUGA
Możesz to zrobić bez korzystania z dołączania.
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%'
- Pokaz SQLFiddle
- Demo SQLFiddle (dodano więcej przykładów )
- Demo SQLFiddle (zgłasza wyjątek ze względu na unikalność )
Kilka szczegółów:
gdy wartość podana w kolumnie Number
już istnieje, zgłosi błąd, ponieważ kolumna jest unikalna. Przeczytałem komentarz z usuniętych postów o treści:"..Numer nie jest unikalny, ale jeśli istnieje, nie chcę wprowadzać rekordu." -- nie ma sensu, jeśli nie chcesz dodawać wyjątkowości na kolumnie. Skąd będziesz wiedzieć, czy numer już istnieje, czy nie? Małe sprawdzenie istnienia Number
wydaje mi się trochę nad głową. Więc moją najlepszą rekomendacją jest egzekwowanie unikalności.