[MySQL] Transakcje.

0

Stworzyłem prostą procedurę w MySQL która zawiera transakcję

DELIMITER $$

DROP PROCEDURE IF EXISTS `baza`.`select_article` $$
CREATE DEFINER=`przemek`@`localhost` PROCEDURE `select_article`()

BEGIN

START TRANSACTION;
DELETE FROM article WHERE article_id = 10;
INSERT INTO article(article_id, title, text, active) VALUES (1,'tytul','jakis text', 0);
COMMIT;

END $$

DELIMITER ;

Celowo próbuje wstawić artykuł o "article_id", który już istnieje. Według mnie przez pojawienie się błędu , że nie da się wstawić wiersza do tabeli "article" powinno spowodować cofnięcie transakcji i artykuł o "article_id" równym 10 powinien zostać w bazie. Dlaczego tak się nie dzieje??

0

A sprawdzałeś:
http://dev.mysql.com/doc/refman/5.1/en/commit.html
SET AUTOCOMMIT=0;

pozdrawiaMM

0

Nie o to chodziło, ale Dzięki Wielkie bo naprowadziłeś mnie na odp.
Otóż tabela na której chciałem wykonać transakcję miała Engine=MyISAM, a w tym trybie składowania danych nie da się stworzyć transakcji z kilku instrukcji. Jedynie pojedyncza instrukcja jest traktowana jako transakcja.

0

[rotfl] Nie ma to jak obsługa błędów polegająca na ich ignorowaniu. Ech, brawa dla tych panów, co piszą MySQLa. A może to tylko ja uważam, że ten kod w przypadku uzycia tabeli MyISAM przynajmniej jakiś warning powinien wywalić?

0

A skad wiesz ze nie ma zadnego warninga? Nie wynika to z tekstu. Z tego co pamietam to MySQL wywala rozne bledy i warningi na ekran jesli uzywasz z konsoli, w Javie zwraca warningi, wiec pewnie i z innymi sposobami polaczenia tez daje rade.
A jesli nie ma warningow, to tak, ja sie z toba agadzam, powinny byc! :-)

0

@Krolik
a jak mysql pisza rowniez panie??
i chca warningi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1