EQUIPO : Investigation
Systems
Estudiantes
: Aguilar Rafael Jaime
Diaz Guerrero Imer
Hobet
CURSO :
Base de Datos II
TEMA :
TRANSACCIONES
DOCENTE :
Marco Aurelio Porro Chulli
BAGUA GRANDE - 2018
Transacciones
1.
Contenido
ü
Definición
Una transacción es una unidad
de trabajo que se compone de una o más instrucciones SQL que realizan un
conjunto de acciones relacionadas.
La
transacción puede incluir varias instrucciones SQL, realizando cada una de ellas
una tarea específica.
Para
que un conjunto de acciones califique como una transacción, debe pasar la
prueba ACID. ACID es el acrónimo comúnmente utilizado para referirse a los nombres
en inglés de las cuatro características de una transacción (Atomic,Consistent,
Isolated y Durable, respectivamente).
ü
Propiedades
ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad)
v Atomicidad (Atómic): Esta característica se refiere a la naturaleza todo-o-nada
de una transacción. Se realizan ya sea todas las operaciones en una
transacción, o ninguna de ellas. Aunque algunas instrucciones sean ejecutadas,
los resultados de éstas regresan a su punto inicial si la transacción falla en
cualquier punto antes de ser completada. Solamente cuando todas las
instrucciones se ejecutan apropiadamente y todas las acciones se realizan, se
considera completa una transacción y sus resultados se aplican a la base de datos.
v Consistencia (Consistent): La base de datos debe ser consistente al inicio y al final
de la transacción. De hecho, se puede considerar una transacción como un
conjunto de acciones que lleva a la base de datos de un estado consistente a
otro. Todas las reglas que definen y limitan los datos deben ser aplicadas a
esos datos como resultado de cualquier cambio que ocurra durante la
transacción.
Además, todas las estructuras dentro de la base
de datos deben estar correctas al final de la transacción.
v Aislamiento (Isolated): Los
datos que pudieran encontrarse en un estado inconsistente temporalmente durante
una transacción no deberán estar disponibles a otras transacciones hasta que
los datos sean consistentes una vez más. En otras palabras, ningún usuario deberá
ser capaz de acceder a los datos inconsistentes durante una transacción
implementada por otro usuario cuando los datos impactados por esa transacción
están en un estado inconsistente. Además, cuando una transacción se encuentra
aislada, ninguna otra transacción puede afectarla.
v Durabilidad (Durable): Una vez que los cambios hechos en una transacción sean
completados, esos cambios deberán ser preservados, y los datos deberán estar en
un estado confiable y consistente, incluso si ocurren errores de aplicación o
de hardware.
Si
surge cualquier problema en cualquier momento durante una transacción, la
transacción completa regresa a su punto inicial y la base de datos regresa al
estado en que se encontraba antes de que la transacción iniciara. Cualquier acción
que se tome es cancelada y los datos se restauran a su estado original. Si la
transacción se completa exitosamente, entonces todos los cambios son
implementados. A través de todo el proceso, la transacción siempre asegura la
integridad de la base de datos, sin importar si la transacción fue completada
exitosamente o debió regresar a su punto inicial.
ü Tipos de Transacciones (Implícitas,
Explícitas, Ámbito de lote, etc.)
Transacciones Explícitas
Las Transacciones
explícitas son las que se define en el código T-SQL. Hay que indicar cuando se
inician (BEGIN TRANSACTION) y cuando finalizan (COMMIT TRANSACTION), y pueden
albergar un conjunto de instrucciones dentro de la misma transacción.
Cuando se produce el
COMMIT, se hacen efectivos los cambios en los ficheros de datos (.mdf y .ndf).
Mientras no se realiza el COMMIT las sentencias de los cambios se guardan en el
log de transacciones (.log), que gracias a este es posible revertir los cambios
si fuese necesario...
Transacciones
explícitas, es el modo de trabajo recomendado. y de esta forma se puede tener
el control de un conjunto de operaciones, definidas dentro de la misma
transacción. Si una operación fuese errónea, es posible hacer ROLLBACK del
conjunto de operaciones que están dentro de la misma transacción. Esto nos
permite establecer reglas de negocio de forma fácil, y mantener coherencia en
los datos según lo que queramos realiza
Transacciones
Implícitas
Este tipo de transacciones,
se conocen como transacciones "de Confirmación
automática" y es el comportamiento predeterminado de SQL Server, donde
ejecuta (o hace efectivo los cambios en los ficheros de datos) por separado
cada sentencia Transact-SQL justo después de que se termine dicha sentencia.
Cuando
una conexión funciona en modo de transacciones implícitas, SQL Server Database
Engine (Motor de base de datos de SQL Server) inicia automáticamente una nueva
transacción después de confirmar o revertir la transacción actual. No tiene que
realizar ninguna acción para delinear el inicio de una transacción, sólo tiene
que confirmar o revertir cada transacción. El modo de transacciones implícitas
genera una cadena continua de transacciones.
Tras establecer el modo de
transacciones implícitas en una conexión, la instancia de Motor de base de
datos inicia automáticamente una transacción la primera vez que ejecuta una de
estas instrucciones:
La
transacción sigue activa hasta que emita una instrucción COMMIT o ROLLBACK. Una
vez que la primera transacción se ha confirmado o revertido, la instancia Motor
de base de datos inicia automáticamente una nueva transacción la siguiente vez
que la conexión ejecuta una de estas instrucciones. La instancia continúa
generando una cadena de transacciones implícitas hasta que se desactiva el modo
de transacciones implícitas.
El
modo de transacciones implícitas se establece mediante la instrucción SET de
Transact-SQL o a través de funciones y métodos de la API de bases de datos.
Transacciones de Ámbito de Lote
Una transacción implícita o explícita de
Transact-SQL que se inicia en una sesión de MARS (conjuntos de resultados
activos múltiples), que solo es aplicable a MARS, se convierte en una
transacción de ámbito de lote. Si no se confirma o revierte una
transacción de ámbito de lote cuando se completa el lote, SQL Server la
revierte automáticamente.
ü Comandos BEGIN TRANSACTION, ROLLBACK TRANSACTION
y COMMIT TRANSACTION
BEGIN TRANSACTION
Marca el punto de inicio de una transacción local
explícita. Las transacciones explícitas empiezan con la instrucción BEGIN
TRANSACTION y acaban con la instrucción COMMIT o ROLLBACK.
Sintaxis
BEGIN { TRAN |
TRANSACTION }
[ { transaction_name |
@tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Argumentos
transaction_name
Es el nombre asignado a la transacción. transaction_name debe cumplir las reglas de los identificadores, pero no se admiten identificadores de más de 32 caracteres. Utilice nombres de transacciones solamente en la pareja más externa de instrucciones BEGIN…COMMIT o BEGIN…ROLLBACK anidadas. transaction_name siempre distingue mayúsculas de minúsculas, incluso cuando la instancia de SQL Server no distingue mayúsculas de minúsculas.
Es el nombre asignado a la transacción. transaction_name debe cumplir las reglas de los identificadores, pero no se admiten identificadores de más de 32 caracteres. Utilice nombres de transacciones solamente en la pareja más externa de instrucciones BEGIN…COMMIT o BEGIN…ROLLBACK anidadas. transaction_name siempre distingue mayúsculas de minúsculas, incluso cuando la instancia de SQL Server no distingue mayúsculas de minúsculas.
@tran_name_variable
Se trata del nombre de una variable definida por el usuario que contiene un nombre de transacción válido. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar. Si se pasan más de 32 caracteres a la variable, solo se utilizarán los primeros 32; el resto de caracteres se truncará.
Se trata del nombre de una variable definida por el usuario que contiene un nombre de transacción válido. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar. Si se pasan más de 32 caracteres a la variable, solo se utilizarán los primeros 32; el resto de caracteres se truncará.
WITH MARK [‘description’]
Especifica que la transacción está marcada en el registro. description es una cadena que describe la marca. Un valor description de más de 128 caracteres se trunca en 128 antes de almacenarse en la tabla msdb.dbo.logmarkhistory.
Especifica que la transacción está marcada en el registro. description es una cadena que describe la marca. Un valor description de más de 128 caracteres se trunca en 128 antes de almacenarse en la tabla msdb.dbo.logmarkhistory.
Si utiliza WITH MARK, debe
especificar un nombre de transacción. WITH MARK permite restaurar un
registro de transacciones hasta una marca con nombre.
ROLLBACK
TRANSACTION
Revierte una transacción explícita o implícita
hasta el inicio de la transacción o hasta un punto de retorno dentro de la
transacción. Puede usar ROLLBACK TRANSACTION para borrar todas las
modificaciones de datos realizadas desde el inicio de la transacción o hasta un
punto de retorno.También libera los recursos que mantiene la transacción.
Sintaxis
ROLLBACK { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable
|
savepoint_name | @savepoint_variable ]
[ ;
]
Argumentos
transaction_name
Es el nombre asignado a la transacción en BEGIN
TRANSACTION. transaction_name debe ajustarse a las reglas para
los identificadores, pero solo se usan los 32 primeros caracteres del nombre de
la transacción. Cuando se anidan transacciones, transaction_name debe
ser el nombre de la instrucción BEGIN TRANSACTION más externa. transaction_name siempre
distingue mayúsculas de minúsculas, incluso cuando la instancia de SQL Server
no distingue mayúsculas de minúsculas.
@ tran_name_variable
Nombre de una variable definida por el usuario que
contiene un nombre de transacción válido. La variable se debe declarar con
un tipo de datos char, varchar, nchar o nvarchar.
savepoint_name
Es savepoint_name de una
instrucción SAVE TRANSACTION. savepoint_name debe ajustarse a
las reglas para los identificadores. Utilice savepoint_name cuando
una operación de reversión condicional solo deba afectar a parte de la
transacción.
@ savepoint_variable
Es el nombre de una variable definida por el
usuario que contiene un nombre de punto de retorno válido. La variable debe declararse con un tipo
de datos char, varchar, nchar o nvarchar.
COMMIT TRANSACTION
Marca el
final de una transacción correcta, implícita o explícita. Si @@TRANCOUNT
es 1, COMMIT TRANSACTION hace que todas las modificaciones de datos realizadas
desde el inicio de la transacción sean parte permanente de la base de datos,
libera los recursos mantenidos por la transacción y reduce @@TRANCOUNT a
0. Si @@TRANCOUNT es mayor que 1, COMMIT TRANSACTION solo reduce
@@TRANCOUNT en 1 y la transacción se mantiene activa.
Sintaxis
COMMIT [ { TRAN |
TRANSACTION } [ transaction_name |
@tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]
[
; ]
transaction_name
Motor de base de datos de SQL Server lo omite. transaction_name especifica un nombre de transacción asignado por una instrucción BEGIN TRANSACTION anterior. transaction_name debe cumplir con las reglas para identificadores, pero no puede superar los 32 caracteres.transaction_name se puede usar como una ayuda de legibilidad, ya que indica a los programadores a qué instrucción BEGIN TRANSACTION anidada está asociada la instrucción COMMIT TRANSACTION.
Motor de base de datos de SQL Server lo omite. transaction_name especifica un nombre de transacción asignado por una instrucción BEGIN TRANSACTION anterior. transaction_name debe cumplir con las reglas para identificadores, pero no puede superar los 32 caracteres.transaction_name se puede usar como una ayuda de legibilidad, ya que indica a los programadores a qué instrucción BEGIN TRANSACTION anidada está asociada la instrucción COMMIT TRANSACTION.
@tran_name_variable
Se trata del nombre de una variable definida por el usuario que contiene un nombre de transacción válido. La variable se debe declarar con un tipo de datos char, varchar, nchar o nvarchar. Si se pasan más de 32 caracteres a la variable, solo se usarán 32 caracteres; el resto de los caracteres se truncarán.
Se trata del nombre de una variable definida por el usuario que contiene un nombre de transacción válido. La variable se debe declarar con un tipo de datos char, varchar, nchar o nvarchar. Si se pasan más de 32 caracteres a la variable, solo se usarán 32 caracteres; el resto de los caracteres se truncarán.
DELAYED_DURABILITY
La opción que solicita esta transacción se confirma con la durabilidad diferida. Se omitirá la solicitud si la base de datos se ha modificado con DELAYED_DURABILITY = DISABLED o DELAYED_DURABILITY = FORCED. Vea el tema Control de la durabilidad de las transacciones para más obtener información.
La opción que solicita esta transacción se confirma con la durabilidad diferida. Se omitirá la solicitud si la base de datos se ha modificado con DELAYED_DURABILITY = DISABLED o DELAYED_DURABILITY = FORCED. Vea el tema Control de la durabilidad de las transacciones para más obtener información.
ü
Ejemplos
En
la BdTransacciones, en la tabla Producto realizar Transacciones
1. Utilizando Commit modificar +1 la Existencia del
Producto Leche Gloria, es decir no hubo ningún error
--Transaaciones
Begin Transaction
--Primera acción física de la Transacción
Update Producto
set Existencia=Existencia+1
where NomProducto='Leche Gloria'
--Fin de Transacción
commit
Después
de realizar Transacción
2. Utilizando Rollback modificar +0.50 la CostoUnitario
del Producto Ace Patito, es decir hubo ningún error
--Transaaciones
Begin
Transaction
--Primera acción
física de la Transacción
Update
Producto
set
CostoUnitario=CostoUnitario+0.5
where
NomProducto='Ace Patito'
--Fin de
Transacción
Rollback
Pero si aplicamos Rollback miremos
que sucede con el Costo Unitario, vuelve a su costo que era antes de ser
modificado.
Use master
Go
IF EXISTS(SELECT * FROM sysdatabases WHERE name = 'BDTienda')
DROP DATABASE BDTienda
Go
CREATE DATABASE BDTienda
GO
Use BDTienda
Go
--Tablas
CREATE TABLE Marca
(codmarca CHAR (3) NOT NULL,
nombremarca VARCHAR(30) NOT NULL
)
GO
ALTER TABLE Marca ADD CONSTRAINT PK_Marca PRIMARY KEY (codmarca)
GO
CREATE TABLE Categoria
(codcategoria CHAR (4) NOT NULL,
nombrecategoria VARCHAR(30) NOT NULL,
descripcion VARCHAR(50) NOT NULL
)
GO
ALTER TABLE Categoria ADD CONSTRAINT PK_Categoria
PRIMARY KEY (codcategoria)
GO
CREATE TABLE Producto
( codproducto CHAR(5) NOT NULL,
nombreproducto VARCHAR(100) NOT NULL,
preciounitario DECIMAL(6,2) NOT NULL,
existencia INT NOT NULL,
idmarca CHAR(3) ,
idcategoria CHAR(4) ,
)
GO
ALTER TABLE Producto ADD CONSTRAINT PK_Producto
PRIMARY KEY (codproducto)
GO
--Relaciones
ALTER TABLE Producto ADD CONSTRAINT FK_ProductoMarca
FOREIGN KEY (idmarca) REFERENCES Marca(codmarca)
GO
ALTER TABLE Producto ADD CONSTRAINT FK_ProductoCategoria
FOREIGN KEY (idcategoria) REFERENCES Categoria(codcategoria)
GO
--Procedimientos
Almacenados INSERT utilizando Transacciones
--Marca
CREATE PROCEDURE
sp_Inserta_Marca
@col1 CHAR(3),
@col2 VARCHAR(30)
AS
BEGIN TRAN
INSERT Marca
VALUES(@col1,@col2)
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
UPDATE UTLIZANDO TRANSACCIONES
CREATE PROCEDURE
sp_Actualiza_Marca
@col1 CHAR(3),
@col2 VARCHAR(30)
AS
BEGIN TRAN
UPDATE Marca
SET nombremarca=@col2 WHERE codmarca=@col1
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
DELETE UTILIZANDO TRANSACCIONES
CREATE PROCEDURE
sp_Elimina_Marca
@col1 CHAR(3)
AS
BEGIN TRAN
DELETE FROM Marca WHERE codmarca=@col1
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
CREATE PROCEDURE sp_Listado_Marca
AS
SELECT * FROM Marca ORDER BY 2
Go
--Categoria
CREATE PROCEDURE sp_Inserta_Categoria
@col1 CHAR(4),
@col2 VARCHAR(30),
@col3 VARCHAR(50)
AS
BEGIN TRAN
INSERT Categoria VALUES(@col1,@col2,@col3)
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
CREATE PROCEDURE sp_Actualiza_Categoria
@col1 CHAR(4),
@col2 VARCHAR(30),
@col3 VARCHAR(50)
AS
BEGIN TRAN
UPDATE Categoria
SET nombrecategoria=@col2,descripcion=@col3 WHERE codcategoria=@col1
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
CREATE PROCEDURE sp_Elimina_Categoria
@col1 CHAR(4)
AS
BEGIN TRAN
DELETE FROM Categoria WHERE codcategoria=@col1
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
CREATE PROCEDURE sp_Listado_Categoria
AS
SELECT * FROM Categoria ORDER BY 2
Go
--Producto
CREATE PROCEDURE sp_Inserta_Producto
@col1 CHAR(5),
@col2 VARCHAR(100),
@col3 DECIMAL(6,2),
@col4 INT,
@col5 VARCHAR(30),
@col6 VARCHAR(30)
AS
BEGIN TRAN
DECLARE @cod_mar CHAR(3)
DECLARE @cod_cat CHAR(4)
SELECT @cod_mar=codmarca FROM Marca WHERE nombremarca=@col5
SELECT @cod_cat=codcategoria FROM Categoria WHERE nombrecategoria=@col6
INSERT Producto VALUES(@col1,@col2,@col3,@col4,@cod_mar,@cod_cat)
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
CREATE PROCEDURE sp_Actualiza_Producto
@col1 CHAR(5),
@col2 VARCHAR(100),
@col3 DECIMAL(6,2),
@col4 INT,
@col5 VARCHAR(30),
@col6 VARCHAR(30)
AS
BEGIN TRAN
DECLARE @cod_mar CHAR(3)
DECLARE @cod_cat CHAR(4)
SELECT @cod_mar=codmarca FROM Marca WHERE nombremarca=@col5
SELECT @cod_cat=codcategoria FROM Categoria WHERE nombrecategoria=@col6
UPDATE Producto
SET nombreproducto=@col2,preciounitario=@col3,existencia=@col4,idmarca=@cod_mar, idcategoria=@cod_cat
WHERE codproducto=@col1
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
CREATE PROCEDURE sp_Elimina_Producto
@col1 CHAR(7)
AS
BEGIN TRAN
DELETE FROM Producto WHERE codproducto=@col1
IF @@ERROR<>0 GOTO verError
COMMIT TRAN
RETURN(0)
verError:
ROLLBACK TRAN
RETURN (-1)
Go
CREATE PROCEDURE sp_Listado_Producto
AS
SELECT * FROM Producto ORDER BY 2
Go
CREATE VIEW V_Basico_Producto
AS
SELECT codproducto,nombreproducto,preciounitario,existencia,nombremarca,nombrecategoria
FROM Producto
P,Marca M, Categoria C
WHERE P.idmarca=M.codmarca AND P.idcategoria=C.codcategoria
Go
--Registros
EXEC sp_Inserta_Marca 'M01','INTEL'
EXEC sp_Inserta_Marca 'M02','Cannon'
EXEC sp_Inserta_Marca 'M03','HP'
EXEC sp_Inserta_Marca 'M04','Samsung'
EXEC sp_Inserta_Marca 'M05','KINSTONG'
EXEC sp_Inserta_Marca 'M06','D-LINK'
EXEC sp_Inserta_Marca 'M07','GX-Force'
EXEC sp_Inserta_Marca 'M08','Creative'
EXEC sp_Inserta_Marca 'M09','LG'
Go
EXEC sp_Listado_Marca
Go
EXEC sp_Inserta_Categoria 'C001','Entrada','Teclados,Scanner,Lapiz
Optico,etc'
EXEC sp_Inserta_Categoria 'C002','Salida','Impresora,Monitores,etc'
EXEC sp_Inserta_Categoria 'C003','Entrada / Salida','Pantallas Tactiles,etc'
EXEC sp_Inserta_Categoria 'C004','Otros','Mainboard,Memorias ,etc'
Go
EXEC sp_Listado_Categoria
Go
EXEC sp_Inserta_Producto '00001','Mainboard PERL815 Bus 800',540.00,100,'INTEL','Entrada'
EXEC sp_Inserta_Producto '00002','Memorias DDR3 1 GB',200.00,80,'KINSTONG','Entrada'
EXEC sp_Inserta_Producto '00003','Microprocesador 3.2 GHZ HP',380.50,70,'INTEL','Entrada'
EXEC sp_Inserta_Producto '00004','Tarjeta de Red 100/100 Full
Duplex',380.50,70,'D-LINK','Entrada'
EXEC sp_Inserta_Producto '00005','Monitor 17" Pantalla
Plana LED Full HD',435.00,20,'D-LINK','Salida'
EXEC sp_Inserta_Producto '00006','Disco Duro 500 GB 7200 RPM',450.00,40,'KINSTONG','Entrada'
EXEC sp_Inserta_Producto '00007','Mainboard MSV415 Bus 500',185.00,20,'INTEL','Entrada'
EXEC sp_Inserta_Producto '00008','Scanner 3200 ',180.50,25,'HP','Entrada'
EXEC sp_Inserta_Producto '00009','Disco Duro 720 GB 7200 RPM',325.00,40,'Samsung','Entrada'
EXEC sp_Inserta_Producto '00010','Microprocesador 2.8 GHZ HP',450.50,70,'INTEL','Entrada'
EXEC sp_Inserta_Producto '00011','Impresora Injet PX-2500',120.50,70,'Cannon','Entrada'
EXEC sp_Inserta_Producto '00012','Grabadora DVD',380.50,70,'LG','Entrada'
EXEC sp_Inserta_Producto '00013','Monitor 18" Pantalla
LED FLATON',380.50,70,'LG','Salida'
EXEC sp_Inserta_Producto '00014','Lectora DVD',100.50,30,'LG','Entrada'
EXEC sp_Inserta_Producto '00015','Web Cam 1024 x 2048 pixel',150.00,10,'D-LINK','Entrada'
EXEC sp_Inserta_Producto '00016','Mouse Optico',15.50,20,'HP','Entrada'
EXEC sp_Inserta_Producto '00017','Memoria USB 32 GB',55.00,20,'KINSTONG','Entrada'
EXEC sp_Inserta_Producto '00018','Memoria USB 16 GB',30.00,15,'KINSTONG','Entrada'
EXEC sp_Inserta_Producto '00019','Teclado Multimedia 101
Teclas',35.50,20,'Creative','Entrada'
EXEC sp_Inserta_Producto '00020','Monitor 18" Pantalla
LED Color Negro ',320.50,12,'LG','Salida'
Go
EXEC sp_Listado_Producto
Go
SELECT *
FROM V_Basico_Producto
Go
2.
Resumen
Transacción: Es una unidad de trabajo
que se compone de una o más instrucciones SQL que realizan un conjunto de
acciones relacionadas.
Propiedades
ACID
Atomicidad: Esta característica se
refiere a la naturaleza todo-o-nada de una transacción. Se realizan ya sea
todas las operaciones en una transacción, o ninguna de ellas.
Consistencia: La base de datos debe ser
consistente al inicio y al final de la transacción.
Aislamiento: Los datos que pudieran
encontrarse en un estado inconsistente temporalmente durante una transacción no
deberán estar disponibles a otras transacciones hasta que los datos sean
consistentes una vez más.
Durabilidad: Una vez que los cambios
hechos en una transacción sean completados, esos cambios deberán ser
preservados.
Tipos
Transacciones
explícitas
Cada transacción se inicia explícitamente con
la instrucción BEGIN TRANSACTION y se termina explícitamente con una
instrucción COMMIT o ROLLBACK.
Transacciones
implícitas
Se inicia implícitamente una nueva transacción
cuando se ha completado la anterior, pero cada transacción se completa
explícitamente con una instrucción COMMIT o ROLLBACK.
Transacciones
de ámbito de lote
Una transacción implícita o explícita de
Transact-SQL que se inicia en una sesión de MARS (conjuntos de resultados
activos múltiples), que solo es aplicable a MARS.
Comandos
Begin
Transaction
Marca el punto de inicio de una transacción local explícita. Las
transacciones explícitas empiezan con la instrucción BEGIN TRANSACTION y acaban
con la instrucción COMMIT o ROLLBACK.
Commit Transaction
Marca el final de una transacción correcta, implícita o explícita. Si
@@TRANCOUNT es 1, COMMIT TRANSACTION hace que todas las modificaciones de datos
realizadas desde el inicio de la transacción sean parte permanente de la base
de datos.
Rollback
Transaction
Revierte una
transacción explícita o implícita hasta el inicio de la transacción o hasta un
punto de retorno dentro de la transacción. Puede usar ROLLBACK TRANSACTION
para borrar todas las modificaciones de datos realizadas desde el inicio de la
transacción o hasta un punto de retorno.
3.
Summary
Transaction:
It is a unit of work that is composed of one or more SQL statements that
perform a set of related actions.
ACID Properties
Atomicity: This
feature refers to the all-or-nothing nature of a transaction. All transactions
are performed in one transaction, or none of them.
Consistency: The
database must be consistent at the beginning and end of the transaction.
Isolation: Data
that might be in a temporarily inconsistent state during a transaction should
not be available to other transactions until the data is consistent once more.
Durability: Once
the changes made in a transaction are completed, those changes must be
preserved.
Types
Explicit transactions
Each
transaction is explicitly started with the BEGIN TRANSACTION statement and is terminated
explicitly with a COMMIT or ROLLBACK statement.
Implicit transactions
A new
transaction is implicitly started when the previous one is completed, but each
transaction is explicitly filled in with a COMMIT or ROLLBACK statement.
Batch scope transactions
An
implicit or explicit Transact-SQL transaction that starts in a MARS session
(multiple active result sets), which is only applicable to MARS.
Commands
Begin Transaction
Marks
the start point of an explicit local transaction. Explicit transactions start
with the BEGIN TRANSACTION statement and end with the COMMIT or ROLLBACK
statement.
Commit Transaction
Mark
the end of a correct, implicit or explicit transaction. If @@ TRANCOUNT is 1,
COMMIT TRANSACTION makes all data modifications made from the beginning of the
transaction a permanent part of the database.
Rollback Transaction
Reverses
an explicit or implicit transaction until the start of the transaction or up to
a point of return within the transaction. You can use ROLLBACK TRANSACTION to delete
all data modifications made from the start of the transaction or up to a point
of return.
4.
Recomendaciones
ü Es muy importante trabajar
con Transacciones ya que no sabemos que en cualquier momento exista un error el
en el proceso que estés realizando en el sistema.
ü Las Transacciones se pueden
utilizar con Lenguaje de Manipulación de Datos DML (INSERT, UPDATE, DELETE,
SELECT); cómo también con Lenguaje de Definición de Datos DDL (CREATE, DROP,
ALTER).
ü En diferentes Gestores de
Base de Datos se utilizan Transacciones, para la mejor control de datos en una
BD.
5.
Conclusiones
ü Un sistema
de base de datos todas las operaciones relacionadas entre sí que se ejecuten
dentro un mismo flujo lógico de trabajo, deben ejecutarse en bloque. De esta
manera si todas funcionan la operación conjunta de bloque tiene éxito, pero si
falla cualquiera de ellas, deberán retrocederse todas las anteriores que ya se
hayan realizado. De esta forma evitamos
que el sistema de datos quede en un estado incongruente.
ü Una transacción es una unidad de
trabajo compuesta por diversas tareas, cuyo resultado final debe ser
que se ejecuten todas o ninguna de ellas.
ü Que luna Transacción es un conjunto de operaciones que van
a ser tratadas como una única unidad. Estas transacciones deben cumplir 4
propiedades fundamentales comúnmente conocidas como ACID (atomicidad,
coherencia, asilamiento y durabilidad).
6.
Apreciación
del Equipo
ü Para encargarse este tipo de inconsistencias en los datos
como se describe en el siguiente ejemplo, SQL utiliza transacciones para controlar
las acciones de los usuarios individuales. Un usuario pudiera estar viendo los
datos en una tabla, tomar cierto tipo de acción basada en esos datos, y luego
arrojarlos a la tabla para verificar los datos una vez más. Sin embargo, si
otro usuario actualiza la tabla entre los dos momentos que el primer usuario la
visualiza, el primer usuario encontrará datos diferentes la segunda vez que lo
hace, y pudiera incluso notar que la acción tomada por el segundo usuario
invalidó los cambios que ambos hicieron después de haber visto la tabla por
primera vez.
ü Existen infinidad de posibilidades de que algo salga
mal en cualquier proceso que involucre varias operaciones, y las
posibilidades de fallo se multiplican a medida que aumenta la simultaneidad de
acceso a la misma información. Por eso los sistemas de datos grandes son muy
complejos.
ü Para situaciones cómo se va la luz eléctrica, existen las
transacciones: marcan bloques
completos de operaciones y comprueban que, o se realizan todas, o que si hay
algún problema se deshacen todas.
7.
Glosario
de Términos
ü Atomicidad: Las operaciones que componen una transacción deben considerarse como
una sola.
ü Consistencia: Una operación nunca deberá dejar datos inconsistentes.
ü Aislamiento: Los datos "sucios" deben estar aislados, y evitar que los
usuarios utilicen información que aún no está confirmada o validada. (por
ejemplo: ¿sigue siendo válido el saldo mientras realizo la operación?)
ü Durabilidad: Una vez completada la transacción los datos actualizados ya serán
permanentes y confirmados.
ü Implícitas: Cuando el gestor de datos comienza una transacción automáticamente
cada vez que se produce una actualización de datos, pero el que dicha
transacción se confirme o se deshaga, lo debe indicar el programador.
ü Explícitas: Son las que iniciamos nosotros "a mano" mediante
instrucciones SQ. somos nosotros, los programadores, los que indicamos qué
operacio0nes va a abarcar.
ü BEGIN
TRANSACTION o BEGIN TRAN: Marca el
inicio de una transacción. TRAN es un sinónimo de TRANSACTION y se suele usar
más a menudo por abreviar.
ü ROLLBACK
TRANSATION o ROLLBACK TRAN: Fuerza
que se deshaga la transacción en caso de haber un problema o querer
abandonarla. Cierra la transacción.
ü COMMIT
TRANSACTION O COMMIT TRAN: Confirma
el conjunto de operaciones convirtiendo los datos en definitivos. Marca el
éxito de la operación de bloque y cierra la transacción.
ü READ
COMMITED: Una transacción no podrá ver los cambios de otras
conexiones hasta que no hayan sido confirmados o descartados.
ü READ
UNCOMMITTED: No afectan los bloqueos producidos por otras
conexiones a la lectura de datos.
ü SNAPSHOT: Los datos seleccionados en la transacción se verán tal y como estaban
al comienzo de la transacción, y no se tendrán en cuenta las actualizaciones
que hayan sufrido por la ejecución de otras transacciones simultáneas.
8.
Bibliografía
o Linkografía
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/commit-transaction-transact-sql?view=sql-server-2017
VIDEOS








BUEN TRABAJO
ResponderEliminar