코드 그라데이션
Day06-07. 제약 조건(1) - 기본 키 제약 조건 본문
제약 조건(Constraint)
- 데이터의 무결성을 지키기 위한 제한된 조건
- 특정 데이터를 입력할 때 무조건적으로 입력되는 것이 아닌, 어떠한 조건을 만족했을 때에 입력하도록 제약할 수 있음.
기본 키 제약 조건
- 중복 될 수 없으며
- NULL 값이 입력될 수 없다.
1) 우선 기본키로 생성한 것은 자동으로 클러스터형 인덱스가 생성된다.
2) 테이블에서는 기본키를 하나 이상의 열에 설정할 수 있다.
3) 기본키가 없이도 테이블의 구성이 가능하지만 실무적으로는 대부분의 테이블에는 기본 키를 설정해주어야 한다.
4) 기본 키를 생성하는 방법은 CREATE TABLE문에 PRIMARY KEY라는 예약어를 넣어주면 된다.
예시
CREATE TABLE usertbl
( userID CHAR(8) NOT NULL PRIMARY KEY, -- 이렇게
name VARCHAR(10) NOT NULL,
birthYear INT NOT NULL,
addr CHAR(2) NOT NULL,
mobile1 CHAR(3) NULL,
mobile2 CHAR(8) NULL,
height SMALLINT NULL,
mDate DATE NULL
);
- 모든 제약 조건은 이름을 가지게 되는데, CREATE TABLE 구문 안에서 기본 키를 지정하면 제약 조건의 이름은 MySQL이 알아서 지정해 준다.
- TABLE의 정보를 알고 싶다면 DESCRIBE <테이블명> 이렇게 적으면 된다.
필요하다면 PRIMARY KEY를 지정하면서 키의 이름까지 함께 직접 지어줄 수 있다.
DROP TABLE IF EXISTS usertbl;
CREATE TABLE usertbl
( userID CHAR(8) NOT NULL,
name VARCHAR(10) NOT NULL,
birthYear INT NOT NULL,
CONSTRAINT PRIMARY KEY PK_usertbl_userID (userID)
);
cf) FOREIGN KEY는 하나의 테이블에 여러 개가 생성될 수 있으므로 이름을 지정해서 관리하는 것이 편리하다.
테이블에 지정된 키를 보려면 SHOW KEYS FROM 테이블이름; 구문을 사용하면 된다.
제약 조건을 설정하는 또 다른 방법은 이미 만들어진 테이블을 수정하는 ALTER TABLE 구문을 사용하는 것이다.
DROP TABLE IF EXISTS usertbl;
CREATE TABLE usertbl
( userID CHAR(8) NOT NULL,
name VARCHAR(10) NOT NULL,
birthYear INT NOT NULL
);
ALTER TABLE usertbl
ADD CONSTRAINT PK_usertbl_userID
PRIMARY KEY (userID);
DESCRIBE usertbl;
CREATE TABLE 안에 PRIMARY KEY 문으로 설정한 것과,
나중에 ALTER TABLE로 PRIMARY KEY를 지정하는 것은 동일하다.
ALTER TABLE usertbl
-- usertbl을 변경하자.
ADD CONSTRAINT PK_usertbl_userID
-- 제약 조건을 추가하자. 추가할 제약조건의 이름은 PK_usertbl_userID
PRIMARY KEY (userID);
-- 추가할 제약 조건은 기본 키 제약 조건이다. 그리고 제약 조건을 설정할 열은 userID이다.
DESCRIBE usertbl;
** 필요에 따라서 두 개 또는 그 이상의 열을 하벼서 하나의 기본 키로 설정하는 경우도 종종 있다.
728x90
'Database > Mega-MySQL' 카테고리의 다른 글
Day07-3. 제약 조건 (3) - UNIQUE, CHECK 제약 조건, DEFAULT (0) | 2023.06.25 |
---|---|
Day07-2. 제약 조건 (2) - 외래 키 제약 조건 (0) | 2023.06.25 |
Day06. SELF JOIN, UNION(ALL), (NOT)IN (0) | 2023.06.22 |
Day05-3. OUTER JOIN, CROSS JOIN (0) | 2023.06.21 |
Day05-2. 피벗 JSON (0) | 2023.06.20 |
Comments