5. 기본 명령문(4) -바닥부터 배우는 Mysql -
Constraints
INDEX
DROP
ALTER TABLE
AUTO INCREMENT
NULL
Constraints(제약조건):
컬럼에 데이터를 입력할 때 주어진 조건을 만족했을 때에만 입력되도록 제약을 두는 방법.
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
NOT NULL : NULL값이 올 수 없다.
CREATE TABLE PersonsNotNull
(
P_Id int NOT NULL,
FirstName varchar(255)
);
UNIQUE : 중복되는 값이 올 수 없다.
CREATE TABLE Persons
(
P_Id int NOT NULL,
City varchar(255),
UNIQUE (P_Id)
);
이미 만들어진 테이블에 제약 조건을 추가할 때:
ALTER TABLE Persons
ADD UNIQUE (P_Id);
제약 조건을 해제할 때:
ALTER TABLE Persons
DROP INDEX P_Id;
PRIMARY KEY : NULL값이 올 수도 없고 중복된 값도 안 된다. (NOT NULL과 UNIQUE를 합한 조건)
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
PRIMARY KEY (P_Id)
);
이미 만들어진 테이블에 PRIMARY KEY 추가하기:
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id);
PRIMARY KEY해제하기:
ALTER TABLE Persons
DROP PRIMARY KEY;
FOREIGN KEY : A, B 라는 테이블이 있다면 A 테이블 필드 값을 참조하여 B 테이블에서 사용할 때 B테이블의 필드를 외래 키라고 하고 A 테이블의 참조하는 필드를 참조 키라고 한다.
부모 테이블의 primary key 필드와 unique 필드만 참조 할 수 있다.
부모 테이블과 자식 테이블은 Engine이 InnoDB 여야만 한다.
두 테이블의 필드는 같은 데이터 형을 가지고 있어야 한다.
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
);
ON UPDATE NO ACTION : 기준 테이블의 데이터가 변경되어도 외래 키 테이블은 불변.(기본 값)
ON UPDATE CASCADE : 기준 테이블의 데이터가 변경되면 외래 키 테이블도 자동 변경.
참조하는 부모 테이블의 컬럼이 삭제되었을 때 외래 키가 어떻게 동작할 것인가에 대한 옵션.
ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION(기본 값) | SET DEFAULT
RESTRICT : 부모테이블의 컬럼이 삭제되어도 자식 테이블의 컬럼은 불변.
CASCADE : 부모테이블의 컬럼이 삭제되면 자식 테이블의 컬럼도 모두 삭제.
SET NULL : 부모테이블의 컬럼이 삭제되면 자식 테이블의 컬럼은 모두 NULL이 된다.
NO ACTION : 부모테이블의 컬럼이 삭제되어도 자식 테이블의 컬럼은 불변.
SET DEFAULT : 부모테이블의 컬럼이 삭제되면 자식 테이블의 컬럼은 지정된 값으로 대체.
CREATE TABLE subtable (
sub_id varchar(12) PRIMARY KEY NOT NULL,
id varchar(12) NOT NULL,
CONSTRAINT fk_id FOREIGN KEY ( id ) REFERENCES mytable ( id ) ON DELETE CASCADE
) type=InnoDB;
DEFAULT : 자동으로 입력되는 기본 값을 지정.(PK나 UNIQUE에는 사용하지 않는다.)
INDEX:
데이터를 빠르고 효과적으로 찾기 위해 사용된다.
CREATE INDEX index_name
ON table_name (column_name);
DROP:
index, table, database 등을 삭제하기 위해 사용된다.
DROP INDEX Syntax for MS SQL Server:
DROP INDEX table_name.index_name;
DROP INDEX Syntax for MySQL:
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE:
DROP TABLE table_name;
DROP DATABASE:
DROP DATABASE database_name;
TRUNCATE TABLE:
테이블의 구조는 그대로 둔 채 데이터만 지운다.
TRUNCATE TABLE table_name;
ALTER TABLE 문:
현재 테이블에서 컬럼의 추가, 수정, 삭제를 할 때 사용.
추가:
ALTER TABLE table_name
ADD column_name datatype;
삭제:
ALTER TABLE table_name
DROP COLUMN column_name;
수정:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
AUTO INCREMENT:
primary key가 지정된 컬럼에 매우 자주 쓰이며 새 레코드가 입력될 때마다 1부터 시작하여 1씩 자동 증가된다.(시작 번호는 바꿀 수 있다.)
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
PRIMARY KEY (ID)
)
NULL :
데이터가 없는 것을 말함.
IS NULL, IN NOT NULL연산자를 사용하여 조건을 따질 수 있다.
Table1
idx | Input | Value1 |
1 | NULL |
|
2 | '' |
|
3 | ' ' |
|
4 | apple | apple |
1: Value1값은 Null
2: Value1값은 빈 문자열
3: Value1값은 공백 문자열
4: Value1값은 'apple'
예 5-1
select * from Table1 WHERE Value1 IS NULL;
idx | Input | Value1 |
1 | NULL |
|
예 5-2
select * from Table1 WHERE Value1 IS NOT NULL;
idx | Input | Value1 |
2 | '' |
|
3 | ' ' |
|
4 | apple | apple |
'COMPUTER > Mysql' 카테고리의 다른 글
2. Mysql 함수(2) -바닥부터 배우는 Mysql - (0) | 2017.01.29 |
---|---|
1. Mysql 함수(1) -바닥부터 배우는 Mysql - (0) | 2017.01.27 |
4. Mysql: 기본 명령문(3) -바닥부터 배우는 Mysql - (0) | 2017.01.22 |
3. Mysql: 기본 명령문(2) -바닥부터 배우는 Mysql - (0) | 2017.01.21 |
2. Mysql: 기본 명령문(1) -바닥부터 배우는 Mysql - (0) | 2017.01.20 |