2023/07/19
2023.07.18 - [LG 헬로비전 DX DATA SCHOOL/DATA BASE] - Data Base 2
1. 테이블 관련 명령
1.1) 테이블 생성 구문
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 이름(
컬럼이름 자료형 [컬럼 제약 조건 나열],
컬럼이름 자료형 [컬럼 제약 조건 나열],
...
[테이블 제약 조건]) 옵션 나열;
- 자료형
숫자 : INT(INTEGER), FLOAT, DOUBLE, DECIMAL(전체 자릿수[, 소수 자릿수])
문자 : CHAR(바이트 수), VARCHAR(바이트 수),
BINARY(바이트 수), VARBINARY(바이트 수),
TEXT, LONGTEXT, BLOB, LONGBLOB
한글을 저장하는 경우는 바이트수 *3
CHAR는 고정된 공간에 저장하고 VARCHAR는 가변 공간에 저장
CHAR(30)을 설정한 상태에서 "한글"을 저장하면 30바이트의 공간을 할당받아서 한글을 저장
VARCHAR(30) 을 설정한 상태에서 "한글"을 저장하면 30바이트의 공간을 할당받아서 한글을 저장하고 남는 24바이트는 다른 데이터를 저장할 수 있도록 할당합니다.
실제로는 6바이트 공간만 할당합니다.
VARCHAR의 경우 데이터가 변경되서 바이트 수가 변경되면 Row Migration(행 이주) 발생 가능성이 있다.
프로그래밍에서 CHAR를 연결할 때는 뒤의 빈 칸에 주의해야 한다.
MySQL에서 VARCHAR는 대소문자 구별을 하지 않고 비교를 한다.
저장을 할 때는 대소문자를 구별한다.
BINARY는 메모리의 코드 값을 저장하는데 이 경우는 대소문자 구분을 한다.
VARBINARY를 이용해서 문자열을 저장하면 대소문자 구별해서 비교
VARHCHAR를 대소문자를 구별해서 비교할 때는BINARY 함수로 감싸서 비교하면 된다.
TEXT(65535)와 LONGTEXT(43억 글자) 는 긴 문자열을 저장하는데 이용하는데 인덱스 설정이 되지 않는다.
BLOB와 LONGBLOB는 대용량의 바이트 배열을 저장하는데 일반적으로 파일의 내용을 저장할 때 사용
파일을 데이터베이스에 저장하는 방법
- 파일을 별도로 만들고 파일의 경로만 저장하는 방법이 있고(권장)
- 파일의 내용을 데이터 베이스에 직접 저장하는 방법
- 날짜와 시간
DATE : 날짜만 저장
DATETIME : 날짜와 시간을 저장하는데 초 단위까지 저장
TIMESTAMP : 날짜와 시간을 저장하는데 미세하게 저장
TIME : 시간만 저장
YEAR : 년도만 저장
- 기타
BOOL : TRUE 또는 FALSE
JSON : json 문자열
GEOMETRY : 공간 데이터
1.2) 테이블 생성 옵션
- ENGINE
- MyISAM : 조회에 유리하도록 만듬, 인덱스 기능이 우수
-InnoDB : 트랜잭션 처리(삽입, 삭제, 갱신)에 유리한데 인덱스 기능이 떨어짐
- auto_increment
시퀀스(일련번호)의 초기 값을 설정
ALTER_TABLE 테이블 이름 auto_increment = 초기값 을 이용해서 변경이 가능
- DEFAULT CHARSET
인코딩 방식으로 utf8 이나 utf8mb4를 주로 이용
- Collation
문자 정렬 방식
1.3) 테이블에 컬럼 추가
- 이미 데이터가 있는 경우는 컬럼에 NULL 이 삽입된다.
ALTER TABLE 테이블 이름
ADD 컬럼이름 자료형 [컬럼 제약 조건];
1.4) 컬럼 삭제
- 기존의 데이터가 존재하면 데이터는 모두 삭제되며 복구가 안됩니다.
ALTER TABLE 테이블 이름
DROP 컬럼이름;
1.5) 컬럼 수정
- 이름과 자료형을 수정
ALTER TABLE 테이블 이름
change 기존컬럼이름 새로운컬럼이름 자료형;
- 자료형 변경
ALTER TABLE 테이블 이름
modify 컬럼이름 자료형;
NOT NULL(NULL 일 수 없다) 제약조건의 변경은 제약조건 변경이 아니고 자료형 변경으로 취급한다
NOT NULL의 추가나 삭제는 modify 명령을 수행
NOT NULL(바이트를 책정받아 체크! 메모리를 할당하는 것임)
- 컬럼 순서 조정
ALTER TABLE 테이블이름
MODIFY COLUMN 컬럼이름 자료형 FIRST; (맨앞 위치)
ALTER TABLE 테이블이름
MODIFY COLUMN 컬럼이름 자료형 AFTER 다른 컬럼이름; (다른컬럼 뒤 위치)
1.6)테이블 이름 변경
ALTER TABLE 이전테이블 이름
RENAME 새로운 테이블 이름
1.7)테이블 삭제
DROP TABLE 테이블 이름;
외래키가 설정된 테이블은 삭제되지 않는다.
1.8) 테이블의 모든 데이터 삭제
TRUNCATE TABLE 테이블 이름;
- 복구가 되지 않으므로 주의!
1.9) 테이블 압축
- CREATE TABLE의 옵션으로 ROW_FORMAT=COMPRESSED를 추가하면 압축해서 생성
- 저장 용량은 줄어들지만, 작업 시간이 늘어난다.
1.10) 테이블 주석
COMMENT ON TABLE 테이블 이름 IS '주석';
-- 데이터베이스 사용 설정
use svng;
-- 테이블 생성
-- 테이블 이름은 contact
-- 속성
-- num은 정수이고 일련번호 그리고 기본키
-- name은 한글 7자 까지 저장하고 글자 수는 변경되지 않는다고 가정 (varchar)
-- address 는 한글 100자 까지 저장하고 글자 수의 변경이 자주 발생
-- tel 은 숫자로된 문자열 11자리이고 글자 수의 변경은 발생하지 않음
-- email 은 영문 100자 이내이고 글자 수의 변경이 자주 발생 (char)
-- birthday는 날짜만 저장
-- 주로 조회를 하고 일련번호는 1부터 시작하고 인코딩은 utf8
CREATE TABLE contact(
num INTEGER AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(21),
address TEXT,
tel VARCHAR(11),
email CHAR(100),
birthday DATE
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
-- contact 테이블에 age 컬럼을 정수 자료형으로 추가
ALTER TABLE contact
ADD age INTEGER;
-- contact 테이블 구조 확인
DESC contact;
-- contact 테이블에서 age 컬럼 삭제
ALTER TABLE contact
DROP age;
DESC contact;
-- CONTACT 테이블에서 tel 컬럼의 이름을 phone으로 자료형은 정수로 수정
ALTER TABLE contact
CHANGE tel phone INTEGER;
DESC contact;
-- contact 테이블 삭제!!!!!!!
DROP TABLE contact;
SHOW TABLES;
-- DEPT 테이블은 EMP 테이블에서 DEPTNO 컬럼을 참조하므로 삭제가 안됨.
DROP TABLE DEPT;
-- NOT NULL 제약조건 설정
CREATE TABLE tNullable(
name CHAR(10) NOT NULL,
age INTEGER
);
INSERT INTO tNullable(name, age) VALUES("adam", 23);
-- 에러
INSERT INTO tNullable(name, age) VALUES(33);
DROP TABLE tNullable;
-- 기본값 설정
CREATE TABLE tDefault(
name CHAR(10) NOT NULL,
age INTEGER DEFAULT 0
);
INSERT INTO tDefault(name, age) VALUES("adam", 23);
INSERT INTO tDefault(name) VALUES("jussi");
-- 데이터 확인
SELECT *
from tDefault
-- name, gender(성별 - 남 또는 여), age(나이는 양수)를 속성으로 갖는 테이블을 생성
CREATE table tCheck(
name CHAR(10) NOT NULL,
gender CHAR(3) CHECK(gender IN('남','여')),
age INT CHECK(age >=0)
);
INSERT into tCheck(name, gender, age) VALUES('김좌진','남', 35);
INSERT into tCheck(name, gender, age) VALUES('김좌진','남', -1);
INSERT into tCheck(name, gender, age) VALUES('김좌진','여자', 35);
SELECT *
from tCheck
-- 기본키 설정 : 제약조건 이름없이 생성
CREATE TABLE tPK1(
name CHAR(10 PRIMARY Key.
age INT
))
-- 기본키 생성 : 제약조건 이름과 함께 생성
CREATE TABLE tPK2(
name CHAR(10),
age INT,
constraint PK_tPK2 PRIMaRY KEY(name)
-- 2개의 컬럼으로 기본키 설정 : 테이블을 생성할 때 primary key는 한번만 사용이 가능
CREATE TABLE tPK2(
name CHAR(10),
age INT PRIMaRY KEY
CONSTRAINT PK_tPK3 PRIMARY KEY(name, age));
INSERT INTO tPK1(name, age) VALUEs('adam', 53);
INSERT INTO tPK1(name, age) VALUEs('adam', 53);
INSERT INTO tPK1(name, age) VALUEs('adam', 53);
-- UNIQUE
CREATE TABLE tUnique(
name CHAR(10),
age INT UNIQUE,
CONSTRAINT tUnique PRIMARY KEY(name));
INSERT INTO tUnique(name, age) VALUEs('adam', 53);
-- 중복되면 삽입 안됨
INSERT INTO tUnique(name) VALUEs('jessica');
INSERT INTO tUnique(name) VALUEs('jessy');
INSERT INTO tUnique(name) VALUEs('jay');
select *
from tUnique;
2. CONSTRAINT(제약 조건)
2.1) DATA INTIGRITY(무결성)
- 데이터의 정확성과 일관성을 유지하고 보증하는 것
- Entity Integrity(개체 무결성) : Primary Key(기본키)는 NULL 이거나 중복될 수 없다.
- Referential Integrity(참조 무결성) : Foreign Key(외래키, 참조키)는 NULL 이거나 참조할 수 있는 값만을 가져야 한다.
- Domain Integrity(도메인 무결성) : 컬럼에는 설정한 도메인 값만을 저장해야 한다.
2.2)NOT NULL
필수 입력을 위한 제약조건
컬럼 제약 조건으로만 설정가능하다.
데이터베이스에서는 NULL을 표현할 떄 NULL 값을 저장하는 것이 아니고 NULL을 표현하기 위한 별도의 메모리를 할당합니다.
NOT NULL 이 적용된 컬럼과 NOT NULL 이 적용되지 않은 컬럼은 크기가 1차이가 납니다.
NOT NULL은 제약조건이지만 데이터의 크기와도 연관성이 있습니다.
2.3) DEFAULT
컬럼의 값이 입력이 안될 때 자동으로 설정되는 값
컬럼의 자료형 다음에 DEFAULT 값
기본값을 사용하고자 하는 경우는 컬럼을 제외하고 입력하던가 DEFAULT로 입력하면 된다.
2.4) CHECK
속성의 값을 제한하는 제약조건
CHECK(컬럼이름 조건)
성별은 남 또는 여만 가져야 한다.
gender CHAR(3) CHECK(gender in ('남', '여'))
점수는 0에서 100사이의 값을 가져야 한다.
score INTEGER CHECK(gender in ('남, '여'))
2.5) Primary Key
- 기본키를 설정
- 기본키는 NOT NULL 이고 UNIQUE
- 테이블에서 기본키는 하나만 설정 가능
- 컬럼 제약 조건으로 설정할 수 있고 테이블 제약 조건으로 설정할 수도 있습니다.
- 하나의 속성으로 설정할 수 있고 여러 개의 속성으로도 설정 가능
단 여러개의 속성으로 설정할 때는 테이블 제약 조건으로 설정해야 합니다.
컬럼 제약 조건은 컬럼의 자료형 뒤에 설정하는 것이고 테이블 제약 조건은 컬럼을 전부 정의한 후 제약 조건을 설정하는 것입니다.
- 기본키를 설정하면 인덱스가 생성되고 MySQL은 기본키 순서대로 저장됩니다.
- 컬럼 제약 조건
컬럼이름 자료형 [CONSTRAINT 제약조건이름] PRIMARY KEY(컬럼 이름 나열)
- 테이블 제약 조건
컬럼이름 자료형 [CONSTRAINT 제약조건이름] PRIMARY KEY(컬럼 이름 나열)
- 제약조건 이름을 만드는 이유는 나중에 관리를 편리하게 할려고 하는 것이다.
2.6) UNIQUE
중복된 값을 허용하지않는 머시
2.7) Foreign KEY (외래키)
- 다른 테이블을 참조하기 위한 속성
- 다른 테이블에서는 PRIMARY KEY 나 UNIQUE 한 속성이어야 한다.
- 설정방법
- 컬럼 제약 조건
references 참조할 테이블 이름(컬럼이름) [옵션]
- 테이블 제약 조건
[constraint 이름] FOREIGN KEY(외래키 컬럼 이름) REFERENCES 참조할 테이블 이름(컬럼이름) [옵션]
- 옵션없이 외래키를 설정하면 외래키의 값은 NULL 이거나 참조할 테이블에 존재하는 값만 삽입이 가능하며 참조당하는 테이블에서는 참조되는 데이터를 삭제할 수 없다.
- 외래키를 설정할 때는 1:1의 경우는 양쪽 테이블의 기본키를 다른 테이블에 외래기로 추가해야 하고 1:N 관계 에서는 1쪽의 기본키를 N쪽에 외래키로 추가해야 하며 N:N의 경우는 양쪽의 기본키를 외래키를 갖는 별도의 테이블을 생성해야 합니다.
- 옵션
ON DELETE {NO ACTION | CASCADE | SET NULL | SET DEFAULT} : 4가지 중 선택해서 사용 가능
ON UPDATE {NO ACTION | CASCADE | SET NULL | SET DEFAULT} : 4가지 중 선택해서 사용 가능
NO ACTION : 참조하고 있는 테이블에 변화가 있어도, 아무 액션을 취하지 않는 것.
CASCADE : 같이 수정 및 삭제(tEmployee 테이블에서 아이린을 삭제하려 하면, tProject 테이블에서 아이린이 있는 모든 데이터를 같이 수정/삭제)
SET NULL : NULL로 변경(tEmployee 테이블에서 아이린을 삭제하려 하면, tProject 테이블에서 아이린이 있는 모든 데이터가 NULL로 변경)
SET DEFAULT : 기본값으로 변경(tEmployee 테이블에서 아이린을 삭제하려 하면, tProject 테이블에서 아이린이 있는 모든 데이터를 기본값으로 변경)
2.8) AUTO_INCREMENT
MySQL에서 일련번호를 설정하기 위해서 사용하는 것
하나의 테이블에서 한 번만 사용 가능
AUTO_INCREMENT 가 설정된 컬럼은 UNIQUE나 PRIMARY KEY 제약조건이 설정되어야 합니다.
테이블을 만들 때 초기 값을 설정할 수 있고 ALTER TABLE 명령을 이용해서 초기 값을 변경할 수 있습니다.
AUTO_INCREMENT가 설정되어 있어도 직접 값을 입력할 수 있습니다 - 권장은 하지 않음
-- 외래키를 지정하지 않는 2개의 테이블
-- 직원 테이블
create table tEmployee(
name CHAR(10) primary key,
salary INT NOT NULL,
addr VARCHAR(30) NOT NULL);
insert into tEmployee VALUES('아이린','650','대구');
insert into tEmployee VALUES('정만수','850','광주');
insert into tEmployee VALUES('김덕배','1050','서울');
SELECT *
from tEmployee;
-- 프로젝트 테이블
-- employee는 프로젝트에 참여한 직원 이름
create table tProject(
projectid int primary key,
employee char(10) not null,
poject varchar(30) not null,
cost int);
insert into tProject values(1, '아이린', ' 웹서비스', 3000);
insert into tProject values(2, '조이', ' Microservic 구축', 4000);
select *
from tProject
DROP TABLE tEmployee;
DROP table tProject;
show tables;
-- 외래키 설정 - 직원 과 프로젝트의 관계는 1: N
-- 직원 테이블
create table tEmployee(
name CHAR(10) primary key,
salary INT NOT NULL,
addr VARCHAR(30) NOT NULL);
insert into tEmployee VALUES('아이린','650','대구');
insert into tEmployee VALUES('정만수','850','광주');
insert into tEmployee VALUES('김덕배','1050','서울');
select *
from tEmployee
-- 프로젝트 테이블
create table tProject(
projectid int primary key,
employee char(10) not null references tEmployee(name),
poject varchar(30) not null,
cost int,
constraint FK_emp foreign key(employee) references tEmployee(name));
insert into tProject values(1, '아이린', ' 웹서비스', 3000);
-- 조이는 tEmploee 테이블에 없는 이름이라서 삽입 불가능
insert into tProject values(2, '조이', ' Microservic 구축', 4000);
-- tEmployee 테이블의 데이터를 삭제
DELETE from tEmployee where name = '정만식';
-- 정만식은 지워지지만, 아이린은 지울수 없다.. 왜? foreign key 니까! 외부 참조니까!
-- tProject에서 참조 중이므로 불가.
DROP table tEmployee;
-- 실행 x, 외부 참조로 인해 삭제가 불가능한 상태가 되었음!
DROP TABLE tProject;
DROP TABLE tEmployee;
SHOW TABLES;
-- 우선 프로젝트, EMPLOYEE 테이블을 삭제후 확인.
-- 직원 테이블
create table tEmployee(
name CHAR(10) primary key,
salary INT NOT NULL,
addr VARCHAR(30) NOT NULL);
insert into tEmployee VALUES('아이린','650','대구');
insert into tEmployee VALUES('정만수','850','광주');
insert into tEmployee VALUES('김덕배','1050','서울');
SELECT *
FROM tEmployee;
-- 프로젝트 테이블
-- tEmployee 테이블의 name 이 수정되거나 삭제 될 시, 같이 수정 혹은 삭제가 된다.
create table tProject(
projectid int primary key,
employee char(10) ,
poject varchar(30) ,
cost int,
constraint FK_emp foreign key(employee) references tEmployee(name)
ON DELETE SET null ON UPDATE SET null
);
-- 아이린의 데이터를 삽입
insert into tProject values(1, '아이린', ' 웹서비스', 3000);
SELECT *
FROM tProject;
-- temployee 테이블에서 배주현을 삭제
DELETE from tEmployee WHERE name = "배주현";
UPDATE tEmployee SET name = '배주현' WHERE name = '아이린';
SELECT *
FROM tEmployee;
-- 둘다 바뀐것을 확인!
-- 제약 조건을 줌에 따라 일관성을 획득할 수도, 혹은 제약을 없애 일관성을 없앨 수도 있다.
2.9) 제약조건 작업
- 조회
select *
from information_schema.table_constraints; -- 테이블당 제약조건을 확인 가능 명령
- 제약조건 수정
alter table 테이블이름
modify 컬럼이름 자료형 제약조건;
- 제약조건 추가
alter table 테이블이름
add 테이블 제약조건 형태로 작성;
- 제약조건 삭제
alter table 테이블이름
drop 테이블 제약조건 이름;
3. DML
- 데이터를 삽입하고 삭제하고 수정하는 명령
- 이론에서는 select 도 dml로 간주하지만 실무에서는 select는 dql로 분리
3.1) 데이터 삽입
- 기본형식
insert into 테이블이름(컬럼 이름 나열)
values(값을 나열)
모든 컬럼에 값을 순서대로 삽입할 때는 컬럼이름을 제외해도 됨.
제외된 컬럼은 default 값이 있으면 default 값(auto_increment 포함)이 설정되고, 없으면 null이 된다.
oracle에서는 into를 생략해도 됩니다.
values 다음에 여러 개의 데이터를 입력해서 한꺼번에 삽입하는 것이 가능하다.
- SELECT 구문의 결과를 삽입
INSERT INTO 테이블 이름(컬럼이름)
SELECT 구문
- SELECT 구문의 결과로 테이블을 생성 - 테스트 할 때 주로 이용
CREATE TABLE 테이블이름 AS
SELECT 구문
- 스크립트를 이용해서 삽입할 때 INSERT 다음에 IGNORE를 추가하면 에러가 발생해도 다음 스크립트를 수행한다.
3.2) 데이터 삭제
- 기본형식
delete from 테이블 이름
[where 조건];
where 절을 생략한다면, 테이블의 모든 데이터를 삭제하게 됨.
SELECT * from tCity;
-- tcity 에서 대전인 데이터 삭제
DELETE from tCity where name = "대전";
3.3) 데이터 갱신
- 기본형식
update 테이블 이름
set 컬럼이름 = 수정할 내용[, 컬럼이름 = 수정할 내용...]
[where 조건];
where 절을 생략하면 테이블의 모든 데이터를 수정합니다.
4. TCL(Transaction Control Language)
4.1) transaction
- 개념
논리적으로 한번에 이루어져야 하는 작업의 단위
- 성질
Atomicity : ALL OR NOTHING(전부 혹은 전무)
Consistency : 트랜잭션 수행 전과 수행 후의 결과가 일관성이 있어야 한다.
Isolation : 트랜잭션 작업 중 다른 트랜잭션이 사용 중인 데이터에 접근해서는 안된다.
Durability : 완료된 트랜잭션은 계속 되어야 한다.
- 동작
COMMIT : 작업 내역을 원본에 반영
- DB와 Application이 작업을 처리할 때, DB에서 복사본을 만들어 Application에 가져온다. 그 작업 영역에 세션(코드값)이 부여된다.
따라서 Application 에서 작업을 진행해도, DB에 있는 원본은 수정되지 않으나, Commit을 하면 수정한 내용을 원본에 복사를 하게 된다.
ROLLBACK : 작업 내역을 원본에 반영하지 않는 것
- 수정한 내용이 맘에 안들면, 수정된 복사본을 없애고 원본을 그대로 유지하는 것임.
물리적인 단위 - SQL 문장 한개
논리적인 단위 - TRANSACTION(SQL, 물리적인 단위와는 상관없이 한번에 이루어져야 하는 작업)
TRANSACTION이란?
EX) A가 B에게 물건을 판매할 때, C를 500에 판매.
판매를 한다면 C를 업데이트 해야됨 (A 의 C 개수- 1, B의 C개수 + 1/ 돈: A + 500, B - 500)
판매 자체는 물리적으로 4개 임. 그러나 트랜잭션은 1개! 전체 거래를 위한 연산.
따라서 이중에 하나라도 완수가 안되면 판매 행위 자체가 이루어지지 않기 때문에 ALL OR NOTHING 이다.
-> ATOMICITY
거래가 진행 될 수록, C의 개수의 증감, 돈의 증감은 일정해야 함.
-> CONSISTENCY
거래 중에, 갑자기 새로운 돈이 들어온다는 둥의 데이터 유입은 안된다.
-> ISOLATON
거래가 진행되었으면, 펜의 이동과 돈의 이동이 정확히 완료가 되어야한다. 취소 X
-> DURABILITY
4.2) Transaction 관련 명령어
- commit : 현재까지 작업 내역을 원본에 반영
- rollback [to 세이브포인트이름]: 세이브포인트 자리로 작업을 이동
- 세이브포인트 이름을 작성하지 않으면 트랜잭션을 생성한 위치로 이동
- savepoint 이름 : 세이브포인트 생성
4.3) transaction 생성 시점
- Transaction 이 없는 시점에서 DML(insert, delete, update) 문장을 처음 실행할 때
4.4) Transaction 이 종료시점
- commit 이나 roll back이 수행되면 transaction은 자동 종료
4.5) commit 하는 방법
- 명시적으로 commit 명령을 수행
- DDL 이나 DCL 문장을 수행 (AUTO COMMIT : 수행 완료시 자동 COMMIT)
- 접속 프로그램을 정상 종료
DDL/DCL은 관리자의 명령이기 때문에, 작업 내용은 바로 모든 USER에게 반영이 되어야 하기 때문에 COMMIT이 자동으로 수행되도록 되어있음.
4.6) ROLLBACK 하는 방법
- 명시적으로 ROLLBACK 명령을 수행
- 접속 프로그램을 비정상적으로 종료(직접 종료하는 것이 아니고, 특수한 상황이 발생한 경우)
4.7) 트랜잭션 모드
- MANUAL COMMIT : 트랜잭션 동작을 직접 조작하는 것
- AUTO COMMIT : 하나의 SQL 문장을 수행하면 바로 COMMIT이 이루어짐
JAVA, DBeaver 기본적으로 AUTO COMMIT 이다.
SQL 에 INSERT 문장이 있다면, COMMIT 효과로 인해, 그 뒤엔 INSERT를 실행해선 안된다. 따라서 SELECT로 불러와 새로 실행해야함.
트랜잭션 시에는 AUTO COMMIT 이 아닌 MANUAL COMMIT으로 수행해야 적절하다.
'LG 헬로비전 DX DATA SCHOOL > DATA BASE' 카테고리의 다른 글
파이썬 MySQL 연동 (0) | 2023.07.20 |
---|---|
DATA BASE 4 (0) | 2023.07.20 |
Data Base 2 (0) | 2023.07.18 |
Data Base (0) | 2023.07.17 |
DataBase - 기초 (0) | 2023.07.14 |