MY-SQL

blog post

show create table ci_board_reply;

이렇게 하면 특정 테이블에 대한 생성정보가 나온다. 여기서 제약 조건을 볼수 있다.

CREATE TABLE `ci_board_reply` (
 `rno` int(10) NOT NULL AUTO_INCREMENT,
 `bno` bigint(20) DEFAULT '0',
 `board_subject` varchar(50) DEFAULT NULL,
 `board_subject_id` int(10) DEFAULT NULL,
 `replyer_user_id` varchar(200) NOT NULL,
 `replyer_user_name` varchar(20) NOT NULL,
 `replyer_user_nickname` varchar(20) NOT NULL,
 `subject` varchar(50) NOT NULL,
 `replytext` text,
 `reg_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
 `secret` varchar(20) NOT NULL,
 `icon` varchar(300) DEFAULT '/include/images/blog/avatar_1.png',
 `modify_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`rno`),
 KEY `fk_ci_board` (`bno`),
 CONSTRAINT `fk_ci_board` FOREIGN KEY (`bno`) REFERENCES `ci_board` (`board_id`)
) ENGINE=InnoDB AUTO_INCREMENT=234 DEFAULT CHARSET=utf8

 

에를 들어 macaronics.net  사이트의 제약조건의 전체를 확인하려면 다음과 같은 명령어를 입력하면 확일 할수 있다.

select * from information_schema.table_constraints;

 

=> 출력 결과

 

제약조건 확인하기

 테이블의 제약조건을 확인 해 주는 기능은 information_schema 데이터베이스에 있는 table_constraints이다.

따라서 mysql의 사용자는 각자 자신만의 데이터베이스를 사용중이므로, 

해당 기능을 사용하고 싶다면 information_schema.table_constraints 를 꼭 입력해야 한다.

 

 select * from information_schema.table_constraints;

 

제약조건 삭제하기

  ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건이름];

만약 위의 구문으로 Error code 1064: You have an error in your SQL syntax; 가 나왔다면, 

외래키 제약조건일 확률이 높다

 

 ALTER TABLE [테이블명] DROP FOREIGN KEY [제약조건이름];

 

ALTER TABLE `ci_board_reply` DROP CONSTRAINT fk_ci_board;

 

mysql> 

오류

SQL 질의:

ALTER TABLE `ci_board_reply` DROP CONSTRAINT fk_ci_board
MySQL 메시지: 문서
#1064 - 'SQL 구문에 오류가 있습니다.' 에러 같습니다. ('CONSTRAINT fk_ci_board' 명령어 라인 1)

 

 

문법에는 하자가 없고 오타도 없는데 이렇게 에러가 뜬다면, 이 제약조건은 분명 외래키 제약조건일 것이다.. 

외래키 제약조건은 DROP FOREIGN KEY 문을 사용하여 제거한다.

 

 

제약조건 추가하기

외래키 : 

 ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] FOREIGN KEY(컬럼명)

  REFERENCES [부모테이블명](PK컬럼명) [ON DELETE CASCADE / ON UPDATE CASCADE];

기본키 : 

  

ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] PRIMARY KEY(컬럼명);

 

NOT NULL 제약조건 추가

  

ALTER TABLE [테이블명] MODIFY [컬럼명] [데이터타입] CONSTRAINT [제약조건이름] NOT NULL;

 

 

제약조건 추가하기

 * 연계참조 무결성제약조건

 ON UPDATE CASCADE 

: 다른 테이블의 기존 행에 있는 외래 키에서 참조하는 키 값이 포함된 행에서 키 값을 업데이트하려고 하면 해당 외래 키를 구성하는 모든 값도 키에 지정된 새 값으로 업데이트되도록 지정

 ON DELETE CASCADE 

: 다른 테이블의 기존 행에 있는 외래 키에서 참조하는 키가 포함된 행을 삭제하려고 하면 해당 외래 키가 포함되어 있는 모든 행도 삭제되도록 지정

 

제약조건을 삭제후 필요한 사항으로 변경했으면 다시 원래데로 제약조건을 추가 하자.

 

ALTER TABLE `ci_board_reply`
  ADD CONSTRAINT `fk_ci_board` FOREIGN KEY (`bno`) REFERENCES `ci_board` (`board_id`);


 

 

제약조건 확인하기

  select * from information_schema.table_constraints;

 

제약조건 삭제하기

  ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건이름];

만약 위의 구문으로 Error code 1064: You have an error in your SQL syntax; 가 나왔다면, 

외래키 제약조건일 확률이 높다

  ALTER TABLE [테이블명] DROP FOREIGN KEY [제약조건이름];

 

제약조건 추가하기

외래키 :

  ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] FOREIGN KEY(컬럼명)

  REFERENCES [부모테이블명](PK컬럼명) [ON DELETE CASCADE / ON UPDATE CASCADE];

기본키 : 

  ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] PRIMARY KEY(컬럼명);

 

NOT NULL 제약조건 추가

  ALTER TABLE [테이블명] MODIFY [컬럼명] [데이터타입] CONSTRAINT [제약조건이름] NOT NULL;

 

 

about author

PHRASE

Level 60  라이트

문불가점( 文不可點 ). 문장이 이루어진 후에 한 점도 가필할 필요가 없다. -잡편

댓글 ( 1)

댓글 남기기

작성