Jen pro zajimavost – ktera databaze podporuje zacleneni „příkazů pracujících se strukturou tabulek“ do transakce?
Vlákno názorů k článku
Co nefunguje v MySQL a jak to obejít
Re: ad Příkazy ukončující transakci
všechny ostatní? když už to umí MSSQL …
begin transaction
create table dbo.omg(id int not null)
select *
from information_schema.tables
where table_name = ‚omg‘
and table_schema = ‚dbo‘
– vyselecti jeden radek
rollback transaction
select *
from information_schema.tables
where table_name = ‚omg‘
and table_schema = ‚dbo‘
– vyselecti nula radku
Re: ad Příkazy ukončující transakci
Zajimave, MSSQL neznam, treba Oracle toto pokud vim neumi (tedy ne ze by mi to chybelo). A co se stane, pokud tabulku se stejnym nazvem chce zaroven zalozit jiny uzivatel v konkurencni transakci?
Re: ad Příkazy ukončující transakci
tak sem si to zkusil nasimulovat a pozdější transakce čekala na dokončení tý první a pokud se první commitla, tak druhá zdechla, jinak to prošlo
isolation level mam READ COMMITED
Re: ad Příkazy ukončující transakci
jo oracle to neumi. postgresql, mssql a db2 jo. Apache Derby jsem nezkousel. Ovsem nedoporucuje se toho moc zneuzivat protoze to muze drzet X zamky v systemovem katalogu.
Re: ad Příkazy ukončující transakci
Pro poradek doplnim, ze Oracle to umi, ale ne v ramci transakce. Jinak se samozrejme da v PL/SQL procedurach vytvaret tabulky, disablovat / enablovat indexy atp.
Re: ad Příkazy ukončující transakci
např. postgresql.
postgres=# begin;
BEGIN
Time: 27,588 ms
postgres=# create table xx(a integer);
CREATE TABLE
Time: 200,168 ms
postgres=# insert into xx values(10);
INSERT 0 1
Time: 35,007 ms
postgres=# rollback;
ROLLBACK
Time: 0,682 ms
postgres=# select * from xx;
ERROR: relation „xx“ does not exist
LINE 1: select * from xx;
^
postgres=# create table xx(a integer);
CREATE TABLE
Time: 1,445 ms
postgres=# \d xx
Table „public.xx“
Column | Type | Modifiers
--------±--------±----------
a | integer |
postgres=# begin;
BEGIN
Time: 0,250 ms
postgres=# alter table xx add column b integer;
ALTER TABLE
Time: 0,537 ms
postgres=# insert into xx values(10,20);
INSERT 0 1
Time: 0,474 ms
postgres=# select * from xx;
a | b
----±---
10 | 20
(1 row)
Time: 0,380 ms
postgres=# rollback;
ROLLBACK
Time: 0,475 ms
postgres=# select * from xx;
a
(0 rows)
Time: 1,129 ms
postgres=# \d xx
Table „public.xx“
Column | Type | Modifiers
--------±--------±----------
a | integer |

