Nel database seguente qual è la differenze tra "COMMIT", "ROLLBACK" e non mettere nulla?
-- Create table
create table APP_USER
(
USER_ID BIGINT not null,
USER_NAME VARCHAR(36) not null,
ENCRYTED_PASSWORD VARCHAR(128) not null,
ENABLED Int not null
) ;
--
alter table APP_USER
add constraint APP_USER_PK primary key (USER_ID);
alter table APP_USER
add constraint APP_USER_UK unique (USER_NAME);
-- Create table
create table APP_ROLE
(
ROLE_ID BIGINT not null,
ROLE_NAME VARCHAR(30) not null
) ;
--
alter table APP_ROLE
add constraint APP_ROLE_PK primary key (ROLE_ID);
alter table APP_ROLE
add constraint APP_ROLE_UK unique (ROLE_NAME);
-- Create table
create table USER_ROLE
(
ID BIGINT not null,
USER_ID BIGINT not null,
ROLE_ID BIGINT not null
);
--
alter table USER_ROLE
add constraint USER_ROLE_PK primary key (ID);
alter table USER_ROLE
add constraint USER_ROLE_UK unique (USER_ID, ROLE_ID);
alter table USER_ROLE
add constraint USER_ROLE_FK1 foreign key (USER_ID)
references APP_USER (USER_ID);
alter table USER_ROLE
add constraint USER_ROLE_FK2 foreign key (ROLE_ID)
references APP_ROLE (ROLE_ID);
-- Used by Spring Remember Me API.
CREATE TABLE Persistent_Logins (
username varchar(64) not null,
series varchar(64) not null,
token varchar(64) not null,
last_used timestamp not null,
PRIMARY KEY (series)
);
--------------------------------------
insert into App_User (USER_ID, USER_NAME, ENCRYTED_PASSWORD, ENABLED)
values (2, 'dbuser1', '$2a$10$PrI5Gk9L.tSZiW9FXhTS8O8Mz9E97k2FZbFvGFFaSsiTUIl.TCrFu', 1);
insert into App_User (USER_ID, USER_NAME, ENCRYTED_PASSWORD, ENABLED)
values (1, 'dbadmin1', '$2a$10$PrI5Gk9L.tSZiW9FXhTS8O8Mz9E97k2FZbFvGFFaSsiTUIl.TCrFu', 1);
---
insert into app_role (ROLE_ID, ROLE_NAME)
values (1, 'ROLE_ADMIN');
insert into app_role (ROLE_ID, ROLE_NAME)
values (2, 'ROLE_USER');
---
insert into user_role (ID, USER_ID, ROLE_ID)
values (1, 1, 1);
insert into user_role (ID, USER_ID, ROLE_ID)
values (2, 1, 2);
insert into user_role (ID, USER_ID, ROLE_ID)
values (3, 2, 2);
Commit;
Vorrei appuntarmi nel codice questa differenza per non dimenticarmi più. Mi è stato detto che quello che avevo in mente non era esatto.
-- COMMIT invia una segnalazione di errore nel caso una delle N transazioni precedenti alla parola COMMIT fallisca ma
-- non riporta il DB allo stato originario, quindi può accadere che queste N transazioni vengano in parte applicate al
-- DB.
-- ROLLBACK invia una segnalazione di errore nel caso una delle N transazioni precedenti alla parola ROLLBACK fallisca
-- ma riporta il DB allo stato originario, quindi se anche solo una delle precedenti transazioni fallisce il DB non
-- viene assolutamente modificato. Con ROLLBACK il DB prima di eseguire le N modifiche le testa e verifica che non vi
-- siano errori.
-- Per definire le N transazioni atomiche queste ultime vengono precedute da "BEGIN TRANSACTION;" in PostgreSQL, da
-- "START TRANSACTION;" in MySQL e vengono fatte seguire da "COMMIT;" oppure da "ROLLBACK;".
-- Se mancano "BEGIN TRANSACTION;" oppure "START TRANSACTION;" le N transazioni sono rappresentate dall'intero file
-- .sql.