Откат транзакции

введите сюда описание изображения> Объясните, пожалуйста, почему при добавлении нового имени транзакция не откатывается, хотя такое имя уже есть в таблице PersonPhone Задание. Выполните ряд записей вставки в виде транзакции в хранимой процедуре. Если такой сотрудник имеется откатите базу данных обратно. Условие отката: IF EXISTS (SELECT * FROM PersonPhone WHERE pname = name AND id != Id) THEN ROLLBACK; последний выполненный инкремент @@identity хранится в переменной Id и сравнивается после вставки с id таблицы PersonPhone, если имена одинаковые, но разные айди, то такая транзакция откатывается. Но при выполнении одинаковые имена записываются в таблицу


create table PersonPhone(id int auto_increment primary key, pname varchar(15), pnumber varchar(15) ); 
insert into PersonPhone(id, pname, pnumber ) values
(1, 'Andrey', null),
(2, 'Mik', '26-23-11'),
(3, 'Luk', '27-34-25'),
(4, 'Lena', '34-54-32'),
(5, 'Bella', '46-75-88'),
(6, 'Karina', '21-90-50');

DELIMITER |
DROP PROCEDURE MyTransactProc; |
CREATE PROCEDURE MyTransactProc (IN name varchar(25))

BEGIN
DECLARE Id int;
START TRANSACTION;
            
        INSERT PersonPhone (pname)
        VALUES (name);
        SET Id = @@IDENTITY;
         
IF EXISTS (SELECT * FROM PersonPhone WHERE pname = name AND id != Id)
            THEN
                ROLLBACK; 
                
            END IF; 
            
        COMMIT; 
END; |  


CALL MyTransactProc ( 'Bella'); |


SELECT * FROM PersonPhone;  |


Ответы (0 шт):