728x90
CREATE / INSERT 절
CREATE 절
CREATE TABLE [테이블 명] (
[컬럼 명 1] [데이터 타입] [제약 조건],
[컬럼 명 2] [데이터 타입] [제약 조건],
...
CONSTRAINT [제약 조건 명] [제약 조건 정의],
...
);
CTEATE TABLE 테이블명
- 테이블을 생성하는 명령어
- 선택적으로 각 열에 적용할 제약 조건 정의
- NOT NULL, UNIQUE, PRIMARY KEY 등 존재
- column
- 테이블에 포함될 열 이름 지정
- datatype
- 각 열의 데이터 유형 정의
- INT, VARCHAR, DATE 등 존재
- constraints(제약조건)
- 데이터 입력 시 지켜야 할 조건을 정의하며, 규칙을 위반하는 데이터를 허용하지 않는다.
CONSTRANIT [제약조건 명] CHECK (제약 조건)
- 명시적으로 제약 조건을 정의하는 방식
- 제약 조건은 테이블 정의의 일부로서 별도의 이름을 가지게 된다.
- 필요에 따라 나중에 제약 조건을 수정하거나 삭제할 수 있다.
CREATE TABLE students ( student_id INT PRIMARY KEY, -- 고유키 first_name VARCHAR(50) NOT NULL, -- NULL 값 허용 안함 last_name VARCHAR(50) NOT NULL, -- NULL 값 허용 안함 email VARCHAR(100) UNIQUE, -- 열에 중복되지 않는 값을 가지도록 하는 제약 date_of_birth DATE, -- 추가 제약 조건 : 학생의 생년월일이 현재 날짜 이전이어야한다. CONSTRAINT chk_date_of_birth CHECK (date_of_birth <= CURDATE()) );
[칼럼 명] [타입] CHECK (제약 조건)
- 열을 정의할 때 직접 제약 조건을 지정하는 방식
- 제약 조건은 열의 정의 부분에 포함되어 있으며, 별도의 이름이 존재하지 않는다.
- 제약 조건이 해당 열에 대해만 적용되고, 다른 열에는 적용되지 않을 때 유용
- 만약 조건이 충족되지 않으면, 해당 행에 대한 삽입 또는 업데이트를 거부
-- 나이가 양수인지 확인하는 조건
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT CHECK (age >= 0)
);
제약 조건(Constraint) 종류
데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙
- CREATE 문으로 테이블을 생성할 때나, ALTER 문으로 필드를 추가할 때 설정
- NOT NULL
- NULL을 허용하지 않는다.
-- 모든 열의 값이 NULL을 허용 하지 않는다. CREATE TABLE users ( id INT , name VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, phone VARCHAR(20) NOT NULL );
- UNIQUE
- 서로 다른 값을 가져야만 한다
- NULL 값은 허용
-- 이메일 주소는 고유해야한다. CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) UNIQUE, phone VARCHAR(20) ); -- 여러 열을 조합하여 고유성 지정 CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), UNIQUE (first_name, last_name) );
- PRIMARY KEY
- 테이블 내의 각 레코드를 고유하게 식별하는 데 사용 → 해당 필드는 기본 키다!
- NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.
-- id를 주키로 설정 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100), phone VARCHAR(20) );
- FOREIGN KEY
- 특정 테이블의 칼럼이 특정 테이블의 칼럼을 참조하게 한다.
- REFERENCES를 사용하여 외래 키가 참조하는 테이블과 열을 지정한다.
- 외래 키를 정의할 때 외래 키 열이 참조하는 열이 반드시 해당 열의 기본 키 또는 UNIQUE 해야 한다.
< 외래 키 생성 및 삭제 예시 >
Department 테이블과 Employee 테이블이 존재할 때,
Employee 테이블의 DepartmentID 열이 Department 테이블의 DepartmentID 열을 참조할 때 외래 키 사용- 테이블 생성 시 외래 키 정의
CREATE TABLE Departments ( DepartmentID INT PRIMARY KEY, DepartmentName NVARCHAR(50) NOT NULL ); CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL, DepartmentID INT, //FOREIGN KEY (외래키열) REFERENCES 참조테이블(참조열) FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) );
- 기존 테이블에 외래 키 추가
ALTER TABLE Employees ADD CONSTRAINT FK_Employees_Departments FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID);
- 외래 키 제약 조건 삭제
ALTER TABLE Employees DROP CONSTRAINT FK_Employees_Departments;
- 외래 키의 ON DELETE CASCADE 옵션
- 부모 테이블에서 행이 삭제될 때 관련된 자식 테이블의 행도 함께 자동으로 삭제
< 예시 >
주문 테이블은 사용자 테이블을 참조하는 외래 키가 존재
→ 해당 옵션 사용시 사용자가 삭제될 때 관련된 모든 주문도 함께 삭제CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, order_date DATE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );
- 외래 키의 ON DELETE SET NULL 옵션
- 부모 키가 삭제될 때 외래 키의 값을 NULL로 저장
< 예시 >
특정 사용자가 삭제되면, 이 사용자가 참조하는 모든 주문의 값이 NULL로 설정CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, order_date DATE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL );
- 외래 키의 ON UPDATE SET NULL 옵션
- 부모 테이블의 기본 키가 업데이트 될 때, 해당 외래 키를 참조하는 자식 테이블의 행들도 외래 키값이 자동으로 NULL로 설정
- 예시사용자 ID가 변경되면, 해당 사용자를 참조하는 모든 주문의 값은 자동으로 NULL로 설정
CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, order_date DATE, FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE SET NULL );
- DEFAULT
- 새로운 레코드가 삽입될 때 열에 자동으로 할당되는 기본값을 정의
-- DEFAULT를 사용하여 새로운 사용자가 추가될때 가입일이 자동으로 설저되게 하기 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100), registration_date DATE DEFAULT CURRENT_DATE ); -- DEFAULT를 사용하여 문자열에 대한 기본 값을 지정할 수 있다. CREATE TABLE example ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) DEFAULT 'Anonymous' );
- 새로운 레코드가 삽입될 때 열에 자동으로 할당되는 기본값을 정의
- AUTO_INCREMENT
- 1부터 시작하여 새로운 레코드가 추가될 때마다 1씩 증가된 값을 자동으로 저장한다.
- 해당 키워드 다음에 대입 연산자(=)를 사용하여 시작 값을 변경할 수 있다.
-- 새로운 레코드가 추가될때마다 id 값이 자동으로 증가 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ); -- id의 시작열을 100부터 시작하여 1씩 증가 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY = 100, name VARCHAR(50), email VARCHAR(100) );
INSERT 절
데이터베이스 테이블에 새로운 레코드를 삽입하는 데 사용된다.
@기본 구조
@기본 구조
INSERT INTO 테이블명 (열 1, 열 2, ...) VALUES (값 1, 값 2, ...);
- 각 열은 해당 열의 데이터 유형과 일치하는 값만 삽입 가능
- INSERT 문을 실행하기 전에 삽입하려는 테이블이 존재해야 한다.
< 예시 >
- users 테이블에 유저 명과 이메일에 각각 값을 가지고 새로운 레코드를 추가
INSERT INTO users (username, email) VALUES ('user123', 'user123@example.com');
728x90
'MYSQL' 카테고리의 다른 글
TCL명령어 : 트랜잭션이란? (1) | 2024.06.01 |
---|---|
MYSQL 명령어 총 정리 (0) | 2024.05.26 |
SUBQUERY (0) | 2024.05.07 |
조인 (0) | 2024.05.07 |
GROUP BY (0) | 2024.05.05 |