sql trigger & transaction
0 отговора
124 прегледа
sql trigger & transaction
В момента работя с MySQL, но въпроса ми е принципен. Предпочитам да не използвам специфични особености на отделен SQL сървър.
По редица причини трябва аз да генерирам ключа на таблицата.
1. Дали тригера, който е най-долу ще работи както трябва. Т.е. дали има някаква атомарност и ще се изпълни все едно има изолация SERIALIZABLE?
2. Ако не -- може ли по някакъв друг начин да стане с тригер?
3. Ако и това не -- предполагам, че ще трябва да забраня INSERT в таблицата и да създам отделна процедура, която да INSERT-ва.
CREATE TRIGGER `ins_document` BEFORE INSERT ON `document` FOR EACH ROW
BEGIN
SELECT Max(Id) INTO @AId FROM document;
IF IsNull(@AId) THEN
SET @AId=1;
ELSE
SET @AId=@AId+1;
END IF;
SET NEW.Id = @AId;
END
По редица причини трябва аз да генерирам ключа на таблицата.
1. Дали тригера, който е най-долу ще работи както трябва. Т.е. дали има някаква атомарност и ще се изпълни все едно има изолация SERIALIZABLE?
2. Ако не -- може ли по някакъв друг начин да стане с тригер?
3. Ако и това не -- предполагам, че ще трябва да забраня INSERT в таблицата и да създам отделна процедура, която да INSERT-ва.
CREATE TRIGGER `ins_document` BEFORE INSERT ON `document` FOR EACH ROW
BEGIN
SELECT Max(Id) INTO @AId FROM document;
IF IsNull(@AId) THEN
SET @AId=1;
ELSE
SET @AId=@AId+1;
END IF;
SET NEW.Id = @AId;
END