본문 바로가기

여러가지/DBMS

[MariaDB] 테이블

1) 전체 테이블 조회

SHOW TABLES;

 

2) 테이블 생성

CREATE TABLE table_name (

    column1 datatype constraints,

    column2 datatype constraints,

    ...,

    PRIMARY KEY (column)

) ENGINE=storage_engine CHARACTER SET character_set COLLATE collation;

 

ex)

CREATE TABLE table_name1 (

    team_id INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(50) DEFAULT 'Unknown'

);

 

CREATE TABLE table_name2 (

    num INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(50) DEFAULT 'Unknown',

    team_id INT NOT NULL,

    email VARCHAR(50) UNIQUE,

    age INT CHECK (age >= 18),

    FOREIGN KEY (team_id) REFERENCES table_name1(team_id) 

         ON DELETE CASCADE ON UPDATE CASCADE

);

 

▷ 상세 설명

(a) AUTO_INCREMENT : 자동 증가 값 할당

※ 임의로 값을 입력하면 (ex. 4) 입력된 값으로부터 순차적으로 증가합니다. (ex. 5)

또한, 임의로 입력된 값 이후를 삭제하더라도 순차적으로 증가합니다. (ex. 6)

 

※ AUTO_INCREMENT 값 변경하는 방법은 아래와 같습니다.

SHOW TABLE STATUS LIKE 'table_name'\G;  // 확인

ALTER TABLE table_name auto_increment = 3;  // 변경

단, 테이블에 입력되어 있는 AUTO_INCREMENT 값 이상의 정수로만 변경 가능합니다.

 

(b) 키

PRIMARY KEY : 기본 키

FOREIGN KEY : 외래 키

 

FOREIGN KEY (team_id) REFERENCES table_name1(team_id) 

         ON DELETE CASCADE ON UPDATE CASCADE

 

FOREIGN KEY (team_id) : team_id 컬럼을 외래 키로 설정

※ 외래 키는 다른 테이블의 특정 컬럼을 참조합니다. 

즉, 다른 테이블과 연결하기 위해 사용합니다.

이를 통해 데이터의 무결성을 유지할 수 있습니다.

 

REFERENCES test_table(team_id): 외래 키가 참조하는 테이블과 컬럼 지정

 

ON DELETE CASCADE: 참조된 테이블(team_info)의 team_id 값이 삭제될 때,

이를 참조하고 있는 현재 테이블(user_info)의 관련 행들도 함께 삭제

 

ON UPDATE CASCADE: 참조된 테이블(team_info)의 team_id 값이 업데이트(변경)될 때, 이를 참조하고 있는 현재 테이블(user_info)의 관련 행들도 함께 업데이트 

※ 위의 설정을 통해 데이터의 무결성을 유지하고 참조 무결성을 보장합니다.

 

CASCADE : 종속된 모든 객체에 적용

※ ON DELETE or ON UPDATE 등의 지정 행위 명령어와 함께 사용합니다.

 

(c) 그 외

DEFAULT : 기본 값 지정

NOT NULL : NULL 불허

UNIQUE : 중복된 값 불허

CHECK : 저장할 수 있는 값이나 조건 지정

 

(d) 기타

CONSTRAINT : 무결성 유지

CREATE TABLE table_name (

    column1 datatype,

    column2 datatype,

    CONSTRAINT constraint_name PRIMARY KEY (column1)

);

 

RESTRICT : 외래 키 참조하는 행 존재하는 경우, 해당 행 삭제 및 업데이트 불허

CREATE TABLE table_name (

    column1 datatype,

    column2 datatype,

    CONSTRAINT fk_name FOREIGN KEY (column1) REFERENCES other_table(column_name) ON DELETE RESTRICT ON UPDATE RESTRICT

);

 

SET NULL : 외래 키 참조하는 행이 삭제 및 업데이트 시, 해당 열을 NULL로 설정

CREATE TABLE table_name (

    column1 datatype,

    column2 datatype,

    CONSTRAINT fk_name FOREIGN KEY (column1) REFERENCES other_table(column_name) ON DELETE SET NULL ON UPDATE SET NULL

);

 

COLLATE : 문자열 정렬 순서 지정

CREATE TABLE table_name (

    column1 VARCHAR(255) COLLATE utf8_unicode_ci

) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

 

FULLTEXT : 특정 열에 대해 전체 텍스트 검색 지원하는 인덱스 생성

CREATE TABLE table_name (

    column1 TEXT,

    FULLTEXT (column1)

);

 

VIRTUAL GENERATED COLUMNS : 실시간 계산

CREATE TABLE table_name (

    column1 INT,

    column2 INT,

    generated_column INT AS (column1 + column2) VIRTUAL

);

 

3) 테이블 정보 조회

 

(a) 특정 데이터베이스 내의 전체 테이블 설정 확인

SHOW TABLE STATUS FROM database_name\G;

 

(b) 특정 테이블 설정 확인

SHOW TABLE STATUS LIKE 'table_name'\G;

 

(c) 특정 테이블 구조 확인

DESCRIBE test_table;

ex)

DESCRIBE table_name[1/2];

 

 

(d) 특정 테이블 정의 확인

SHOW CREATE TABLE table_name;

 

4) character_set

※ 별도 지정하지 않으면 데이터베이스의 문자 집합과 정렬 순서를 기본으로 사용합니다. 

 

(a) 특정 테이블 character_set 확인

SELECT TABLE_NAME, TABLE_COLLATION

FROM information_schema.TABLES

WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'table_name';

ex)

SELECT TABLE_NAME, TABLE_COLLATION

FROM information_schema.TABLES

WHERE TABLE_SCHEMA = 'SQL_test' AND TABLE_NAME = 'table_name[1/2]';

 

 

(b) 특정 테이블 각 열(Column)별 character_set 확인

SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME

FROM information_schema.COLUMNS

WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'table_name';

ex) 

SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME

FROM information_schema.COLUMNS

WHERE TABLE_SCHEMA = 'SQL_test' AND TABLE_NAME = 'table_name[1/2]';

 

 

(c) 특정 테이블 character_set 변경

ALTER TABLE table_name CONVERT TO CHARACTER SET new_character_set COLLATE new_collation;

 

(d) 특정 테이블의 특정 열 character_set 변경

ALTER TABLE table_name MODIFY column_name column_type CHARACTER SET new_character_set COLLATE new_collation;


5) 테이블 칼럼 조작

(a) 추가

ALTER TABLE table_name ADD COLUMN new_column datatype constraints;

ex) ALTER TABLE table_name1 ADD COLUMN add_test INT NOT NULL;

 

 

(b) 복수 추가

ALTER TABLE table_name

    ADD COLUMN first_column datatype constraints,

    ADD COLUMN second_column datatype constraints;

 

(c) 이름 변경

ALTER TABLE table_name CHANGE COLUMN old_name new_name datatype;

ex) ALTER TABLE table_name1 CHANGE COLUMN add_test test INT;

※ datatype 새롭게 지정할 수 있습니다.

 

(d) 데이터타입 변경

ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;

ex) ALTER TABLE table_name1 MODIFY COLUMN test VARCHAR(20);

 

(e) 기본값 변경 및 삭제

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_value;

ex) ALTER TABLE table_name1 ALTER COLUMN test SET DEFAULT 0;

 

ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;

ex) ALTER TABLE table_name1 ALTER COLUMN test DROP DEFAULT;

 

(f) 위치 변경

ALTER TABLE table_name CHANGE COLUMN old_name new_name new_datatype AFTER another_column;

※ 칼럼 이름 변경하지 않을 시 old_column_name new_column_name 동일하게 작성합니다.

 

ex) 

ALTER TABLE table_name1 CHANGE COLUMN test test INT AFTER team_id;

※ datatype 새롭게 지정할 수 있습니다.

 

ALTER TABLE table_name1 CHANGE COLUMN test test_drop VARCHAR(20) AFTER name;

 

(g) 삭제

ALTER TABLE table_name DROP COLUMN drop_column; 

ex) ALTER TABLE table_name1 DROP COLUMN test_drop; 

 

6) 키 조작

(a) 기본키 추가

ALTER TABLE table_name ADD PRIMARY KEY (column_name); 

 

(b) 외래키 추가

ALTER TABLE table_name ADD FOREIGN KEY (column_name)

    REFERENCES other_table(other_column);

 

7) 테이블 이름 변경

RENAME TABLE old_table_name TO new_table_name;

ex)

RENAME TABLE table_name1 TO team_info;

RENAME TABLE table_name2 TO user_info;

 

 

8) 테이블 초기화

TRUNCATE TABLE table_name;

ex) TRUNCATE TABLE team_info;

----------------------------------------------------------------------------------------------------------------------------------------------------------

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`SQL_test`.`user_info`, CONSTRAINT `user_info_ibfk_1` FOREIGN KEY (`team_id`) REFERENCES `SQL_test`.`team_info` (`team_id`))

----------------------------------------------------------------------------------------------------------------------------------------------------------

테이블이 외래 키 제약 조건에 의해 참조되고 있으면 오류가 발생합니다.

 

외래 키 제약 조건

1) SHOW VARIABLES LIKE 'foreign_key_checks';

 

2) 외래 키 제약 조건 목록 조회

SELECT TABLE_NAME,CONSTRAINT_NAME

FROM information_schema.TABLE_CONSTRAINTS

WHERE TABLE_SCHEMA = 'database_name'AND TABLE_NAME = 'table_name'

    AND CONSTRAINT_TYPE = 'FOREIGN KEY';

 

3) 각 외래 키 제약 조건의 세부 정보 조회

SELECT CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME

FROM information_schema.KEY_COLUMN_USAGE

WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'table_name'

    AND REFERENCED_TABLE_NAME IS NOT NULL;

 

Step 1. 외래 키 제약 조건 비활성화

SET FOREIGN_KEY_CHECKS = 0;

 

Step 2. 테이블 비우기

TRUNCATE TABLE team_info;

 

Step 3. 외래 키 제약 조건 활성화

SET FOREIGN_KEY_CHECKS = 1;

 

 

 

 

 

9) 테이블 삭제

DROP TABLE table_name;



'여러가지 > DBMS' 카테고리의 다른 글

[MariaDB] 프로시저  (0) 2024.05.27
[MariaDB] 트리거  (0) 2024.05.27
[MariaDB] information_schema  (0) 2024.05.27
[MariaDB] 스토리지 엔진  (0) 2024.05.27
[MariaDB] 데이터베이스  (0) 2024.05.27