[TCL]
BEGIN TRANSACTION(BEGIN TRAN)
로 트랜잭션을 시작하고
COMMIT (TRANSACTION)
/ ROLLBACK (TRANSACTION)
로 종료한다.
-- [Oracle]
SAVEPOINT SVPT1;
...
ROLLBACK TO SVPT1;
-- [SQL Sever]
SAVE TRANSACTION SVTR1;
...
ROLLBACK TRANSACTION SVTR1;
CREATE TABLE 품목
( 품목ID VARCHAR (5) NOT NULL,
단가 NUMBER NOT NULL);
INSERT INTO 품목 (품목ID, 단가)
VALUES ('001', 1000);
INSERT INTO 품목 (품목ID, 단가)
VALUES ('002', 2000);
INSERT INTO 품목 (품목ID, 단가)
VALUES ('003', 1000);
INSERT INTO 품목 (품목ID, 단가)
VALUES ('004', 2000);
BEGIN TRANSACTION;
INSERT INTO 품목(품목ID, 단가) VALUES('005', 2000);
COMMIT;
BEGIN TRANSACTION;
DELETE FROM 품목 WHERE 품목ID='200';
BEGIN TRANSACTION;
UPDATE 품목 SET 단가=2000 WHERE 단가=1000;
ROLLBACK;
SELECT COUNT(품목ID) FROM 품목
WHERE 단가=2000;
정답: 3
해설:BEGIN TRANSACTION; INSERT INTO 품목(품목ID, 단가) VALUES(005, 2000); COMMIT;
BEGIN TRANSACTION; DELETE FROM 품목 WHERE 품목ID='200'; BEGIN TRANSACTION; UPDATE 품목 SET 단가=2000 WHERE 단가=1000; ROLLBACK;
ROLLBACK
은COMMIT
되지 않은 상위 모든TRANSACTION
을 모두 롤백SELECT COUNT(품목ID) FROM 품목 WHERE 단가=2000;
품목ID 단가 002 2000 004 2000 005 2000
[상품]
상품ID | 상품명 |
---|---|
001 | LCD-TV |
CREATE TABLE 상품
( 상품ID VARCHAR(5) NOT NULL,
상품명 VARCHAR(10) NOT NULL);
INSERT INTO 상품 (상품ID, 상품명)
VALUES ('001', 'TV');
[SQL]
BEGIN TRANSACTION;
SAVE TRANSACTION SP1;
UPDATE 상품 SET 상품명 ='LCD-TV' WHERE 상품ID = '001';
SAVE TRANSACTION SP2;
UPDATE 상품 SET 상품명 ='평면-TV' WHERE 상품ID = '001';
ROLLBACK TRANSACTION SP2;
COMMIT;
-- '001'의 최종 상품명 : LCD-TV
정답: LCD-TV
해설:BEGIN TRANSACTION; SAVE TRANSACTION SP1; UPDATE 상품 SET 상품명 ='LCD-TV' WHERE 상품ID = '001'; SAVE TRANSACTION SP2;
상품ID 상품명 001 LCD-TV UPDATE 상품 SET 상품명 ='평면-TV' WHERE 상품ID = '001'; ROLLBACK TRANSACTION SP2; COMMIT;
ROLLBACK TRANSACTION SP2;
구문에 의해 첫 번째UPDATE
문장만 유효한 상태에서COMMIT
되었으므로 최종 상품명은 'LCD-TV'.
팀별성적 테이블에서 승리건수가 높은 순으로 3위까지 출력하되 3위의 승리 건수가 동일한 팀이 있다면 함께 출력하기 위한 SQL?
CREATE TABLE 팀별성적
( 팀명 VARCHAR(10) NOT NULL,
승리건수 NUMBER NOT NULL,
패배건수 NUMBER NOT NULL);
INSERT INTO 팀별성적 (팀명, 승리건수, 패배건수)
VALUES ('A팀', 120, 80);
INSERT INTO 팀별성적 (팀명, 승리건수, 패배건수)
VALUES ('B팀', 20, 180);
INSERT INTO 팀별성적 (팀명, 승리건수, 패배건수)
VALUES ('C팀', 10, 190);
INSERT INTO 팀별성적 (팀명, 승리건수, 패배건수)
VALUES ('D팀', 100, 100);
INSERT INTO 팀별성적 (팀명, 승리건수, 패배건수)
VALUES ('E팀', 110, 90);
INSERT INTO 팀별성적 (팀명, 승리건수, 패배건수)
VALUES ('F팀', 100, 100);
INSERT INTO 팀별성적 (팀명, 승리건수, 패배건수)
VALUES ('G팀', 70, 130);
정답:
SELECT TOP(3) WITH TIES 팀명, 승리건수 FROM 팀별성적 ORDER BY 승리건수 DESC;