← Back to team overview

maria-discuss team mailing list archive

Re: transactional sql update patch system ?

 

I have 
DBMS: MariaDB (ver. 10.1.37-MariaDB-1~bionic) Driver: MariaDB Connector/J (ver. 2.4.1, JDBC4.2

Cant get it to work it simply strikes at the second word "NOT"

BEGIN NOT ATOMIC is not valid :(

any hints ?


Markus Mäkelä schrieb am 28.02.2020 13:57 (GMT +01:00):

> Hi,
> 
> Perhaps this blog post written about Atomic Compound Statements can be 
> of help: https://mariadb.com/resources/blog/atomic-compound-statements/
> 
> Markus
> 
> On 2/28/20 2:53 PM, launchpad@xxxxxxxx wrote:
>> Hello,
>>
>> we want, that a sql patch file can ONLY be applied if all commands in it can
>> applied successful !
>>
>> so our first try was:
>>
>>
>> START TRANSACTION;
>>
>> statement1
>> statement2
>> statement3
>> statement4
>> ....
>>
>> COMMIT;
>>
>> problem: this is not working because an statement can also create table, which
>> is an ddl command and which do an commit !
>> (https://mariadb.com/kb/en/start-transaction/#autocommit)
>>
>> .... DDL statements (CREATE, ALTER, DROP) and administrative statements
>> (FLUSH, RESET, OPTIMIZE, ANALYZE, CHECK, REPAIR, CACHE INDEX), and LOAD DATA
>> INFILE, cause an implicit COMMIT and start a new transaction.
>>
>> the result is that all before an failing create table statement will be
>> applied !
>>
>>
>> so this is no solution.
>>
>> so how can i garantee that only whole files can be applied ?!
>>
>> Here is an sample:
>>
>> CREATE TABLE test (number int);
>>
>> START TRANSACTION;
>> INSERT INTO test (number) VALUES (1);
>> COMMIT;
>>
>> START TRANSACTION;
>> INSERT INTO test (number) VALUES (2);
>> COMMIT;
>>
>> START TRANSACTION;
>> INSERT INTO test (number) VALUES (3);
>> CREATE TABLE test (thiswillfail int);
>> COMMIT;
>>
>> And the logs from mariadb:
>>
>>   8 Connect   root@localhost as anonymous on arcus
>>   8 Query     CREATE TABLE test (number int)
>>   8 Query     START TRANSACTION
>>   8 Query     INSERT INTO test (number) VALUES (1)
>>   8 Query     COMMIT
>>   8 Query     START TRANSACTION
>>   8 Query     INSERT INTO test (number) VALUES (2)
>>   8 Query     COMMIT
>>   8 Query     START TRANSACTION
>>   8 Query     INSERT INTO test (number) VALUES (3)
>>   8 Query     CREATE TABLE test (thiswillfail int)
>>   8 Quit
>>
>> And with another connection the table test
>>
>> SELECT * FROM test;
>> 1
>> 2
>> 3
>>
>> So we can see value 3 were persistet although there was no COMMIT !!!! because
>> of autocommit when do an create table.
>>
>> But i want that nothing is applied from my sql file when something fail !
>>
>>
>>
>> Greetings Robert
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~maria-discuss
>> Post to     : maria-discuss@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~maria-discuss
>> More help   : https://help.launchpad.net/ListHelp
> 
> -- 
> Markus Mäkelä, Senior Software Engineer
> MariaDB Corporation
> t: +358 40 7740484
> 
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~maria-discuss
> Post to     : maria-discuss@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~maria-discuss
> More help   : https://help.launchpad.net/ListHelp
> 


References