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 NULLUNIQUE를 합한 조건)

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 필드만 참조 할 수 있다.

부모 테이블과 자식 테이블은 EngineInnoDB 여야만 한다.

두 테이블의 필드는 같은 데이터 형을 가지고 있어야 한다.

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 : 자동으로 입력되는 기본 값을 지정.(PKUNIQUE에는 사용하지 않는다.)

 

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


Posted by star story :

Snippet :: Code View :: "+location.href+'
'+b+"

");top.consoleRef.document.close()}$(".snippet-container").each(function(b){$(this).find("a.snippet-text").click(function(){var d=$(this).parents(".snippet-wrap").find(".snippet-formatted");var c=$(this).parents(".snippet-wrap").find(".snippet-textonly");d.toggle();c.toggle();if(c.is(":visible")){$(this).html("html")}else{$(this).html("text")}return false});$(this).find("a.snippet-window").click(function(){var c=$(this).parents(".snippet-wrap").find(".snippet-textonly").html();a(c);$(this).blur();return false})});$(".snippet-toggle").each(function(b){$(this).click(function(){$(this).parents(".snippet-container").find(".snippet-wrap").toggle()})})});