MariaDB / TABLE / 만들기, 삭제하기, 이름 변경하기
MariaDB에서 테이블은 CREATE TABLE로 만들고, RENAME TABLE 기존이름 TO 새이름으로 이름을 바꾸며, DROP TABLE로 삭제합니다. 이름 변경은 기존 행을 유지하지만 삭제는 테이블 구조와 데이터를 제거합니다. 아래 실습은 생성부터 확인·이름 변경·복원·삭제까지 같은 테이블을 순서대로 사용합니다.
실습 데이터베이스 선택과 테이블 생성
MariaDB 서버와 SQL을 실행할 클라이언트가 필요합니다. mariadb 명령줄 클라이언트나 SQL 편집기에서 각 블록을 위에서부터 실행하세요. 해당 계정에는 실습 데이터베이스 생성·접근 및 테이블 생성·조회·입력·이름 변경·삭제 권한이 필요합니다. 운영 데이터가 없는 별도의 실습 환경에서만 실행합니다.
CREATE DATABASE IF NOT EXISTS table_practice
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE table_practice;
SELECT DATABASE();
SELECT DATABASE()의 결과는 table_practice여야 합니다. 데이터베이스가 이미 있으면 IF NOT EXISTS는 기존 설정을 바꾸지 않습니다. 이 이름에 보존해야 할 자료가 있거나 products_demo·products_archive가 이미 있다면 새 실습 데이터베이스 이름으로 모든 예제를 맞춰 바꾸세요. 기존 테이블을 지워 이름 충돌을 해결하지 마세요.
CREATE TABLE products_demo (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
created_at DATETIME NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO products_demo (id, name) VALUES (1, '노트');
SELECT id, name FROM products_demo;
조회 결과는 id가 1이고 name이 노트인 한 행입니다. id는 중복·NULL을 허용하지 않는 기본 키이고, name은 최대 100문자인 필수 문자열입니다. created_at은 값을 생략했으므로 이 예제에서 NULL입니다. 이름만 만들고 열 정의를 생략하는 방식은 사용할 수 없으며, 일반적인 테이블에는 필요한 열과 자료형을 정의해야 합니다.
같은 CREATE TABLE을 다시 실행하면 이미 존재한다는 오류가 납니다. 데이터베이스를 선택하지 않았다면 table_practice.products_demo처럼 데이터베이스와 테이블을 함께 지정할 수도 있습니다. CREATE 권한과 구문은 MariaDB CREATE TABLE 문서를 참고하세요.
목록과 열 구조 확인하기
SHOW TABLES;
DESCRIBE products_demo;
SHOW CREATE TABLE products_demo;
SHOW TABLES에서 products_demo가 보이는지 확인합니다. DESCRIBE 결과에서는 id·name·created_at 세 열의 자료형과 NULL 허용 여부 등을 확인할 수 있습니다. DESC도 DESCRIBE와 같은 용도로 사용할 수 있습니다. DESCRIBE 문서에서 각 조회 방식의 관계를 확인할 수 있습니다.
SHOW CREATE TABLE은 테이블 선언을 SQL 형태로 보여 주므로 기본 키·문자셋·엔진 등의 설정을 확인할 때 유용합니다. 출력의 자료형 표기나 추가 옵션은 버전과 SQL 모드에 따라 조금 다를 수 있습니다. 이것만 저장하면 행 데이터까지 백업되는 것은 아닙니다. 세부 조건은 SHOW CREATE TABLE 문서를 참고하세요.
IF NOT EXISTS는 기존 구조를 바꾸지 않습니다
이미 있는 테이블을 그대로 두고 생성 오류만 피하려면 IF NOT EXISTS를 사용할 수 있습니다. 다음은 이 차이를 확인하기 위한 비교입니다. 새로 제시한 열 정의가 기존 구조에 적용되는지 DESCRIBE로 확인하세요.
CREATE TABLE IF NOT EXISTS products_demo (ignored_column INT);
SHOW WARNINGS;
DESCRIBE products_demo;
SHOW WARNINGS에는 테이블이 이미 있다는 안내가 나오고, 열은 여전히 id·name·created_at입니다. ignored_column으로 바뀌지 않습니다. IF NOT EXISTS를 썼다고 해서 원하는 구조인지 검증된 것은 아니므로 실제 구조를 별도로 확인해야 합니다.
구조를 변경하려면 ALTER TABLE 등 목적에 맞는 구문을 검토해야 합니다. CREATE OR REPLACE TABLE을 간단한 오류 회피 방법으로 사용하면 기존 테이블과 내용을 교체할 수 있으므로 이 실습에서는 사용하지 않습니다. 데이터를 보존해야 하는 작업에서는 생성·변경·교체를 구분하세요.
테이블 이름 변경과 원래 이름으로 복원
삭제하기 전에 이름 변경을 실습합니다. 새 이름 products_archive가 아직 없는지 확인하고 다음을 실행하세요. 같은 데이터베이스 안에서 이름만 바꾸므로 열 정의와 행 데이터는 유지됩니다.
RENAME TABLE products_demo TO products_archive;
SHOW TABLES;
SELECT id, name FROM products_archive;
테이블 목록에서 products_demo 대신 products_archive가 나타나고, SELECT 결과는 여전히 1·노트입니다. 이름을 바꾼 뒤에는 예전 이름을 쓰는 쿼리가 실패할 수 있으므로 애플리케이션 SQL·뷰 등 참조하는 곳도 함께 검토해야 합니다. 테이블에 직접 부여한 권한이 새 이름으로 자동 이전되는 것으로 가정하지 마세요.
삭제 실습 전에 원래 이름으로 되돌리려면 다음을 실행합니다. 그 사이 products_demo가 새로 생기지 않았다는 전제입니다.
RENAME TABLE products_archive TO products_demo;
SELECT id, name FROM products_demo;
되돌린 뒤에도 같은 행이 조회되어야 합니다. RENAME에는 기존 테이블의 ALTER·DROP과 새 이름의 CREATE·INSERT 권한이 필요할 수 있습니다. 다른 세션의 사용 때문에 잠금을 기다릴 수도 있으므로 운영 환경에서는 변경 시간을 계획해야 합니다. 자세한 범위는 RENAME TABLE 문서에 있습니다.
테이블 삭제와 복구 가능성 확인
마지막 단계는 실습용 products_demo만 삭제합니다. 현재 데이터베이스와 테이블 이름을 다시 확인하고, 보존해야 할 데이터가 있으면 실행 전에 백업합니다. DROP TABLE은 내용만 비우는 구문이 아니라 구조와 행을 함께 제거하는 구문입니다.
DROP TABLE products_demo;
SHOW TABLES LIKE 'products_demo';
마지막 조회 결과에 행이 없으면 해당 이름의 테이블이 목록에서 사라진 것입니다. 다시 실습하려면 앞의 CREATE TABLE과 INSERT부터 실행하면 됩니다. 이는 예제 한 행을 다시 만드는 것이며 삭제 전의 임의 데이터를 복구하는 방법은 아닙니다. 실제 복구에는 적절한 백업이나 복구 체계가 필요합니다.
없는 테이블을 삭제할 때만 오류를 피하려면 DROP TABLE IF EXISTS products_demo를 사용할 수 있습니다. IF EXISTS는 실수로 다른 테이블을 지우는 것을 막아 주지 않습니다. 외래 키로 참조되는 테이블은 바로 삭제되지 않을 수 있으며, 이를 해결하려고 무조건 외래 키 검사를 끄지 마세요. 조건은 DROP TABLE 문서를 확인하세요.
일반 테이블의 CREATE·RENAME·DROP 같은 데이터 정의 언어(DDL) 작업에는 암시적 커밋이 발생하므로, 트랜잭션을 시작하고 나중에 ROLLBACK하면 모두 원상 복구된다고 생각하면 안 됩니다. 암시적 커밋을 일으키는 SQL 목록에 해당 구문이 설명되어 있습니다. 실제 변경 전의 검증·백업을 트랜잭션만으로 대신하지 마세요.



