· sql constraints (sql 제약 조건)
테이블을 생성할 때 테이블에 대해서 or 생성한 후 컬럼에 제약을 걸 수 있음
-형식 :
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);
-예시 :
CREATE TABLE table_name (
aa NUMBER NOT NULL,
bb NUMBER NOT NULL UNIQUE
PRIMARY KEY(cc, dd)
);
-- aa컬럼에 NOT NULL 제약, bb컬럼에 NOT NULL제약과 UNIQUE제약이 걸림,
한 개의 제약(PRIMARY)을 복수의 컬럼(cc, dd)에 설정하는 테이블 제약이 걸림
-다음은 제약 조건의 종류 (constraint에 쓸 수 있음) :
NOT NULL - NULL 값 입력 금지
UNIQUE(고유키) - 열의 모든 값이 서로 다른지 확인(=중복값 입력 금지 / NULL값은 중복입력 가능)
PRIMARY KEY(기본키) - NOT NULL + UNIQUE로, 테이블에서 대표되는 컬럼의 의미
FOREIGN KEY(외래키) - 참조하는 테이블에서 존재하는 값만 사용 가능
CHECK - 컬럼의 값이 특정 조건을 만족하는지 확인(주어진 조건에 해당하는 값만 입력 가능)
DEFAULT - 값이 지정되지 않은 경우 열의 기본값을 설정합니다.
CREATE INDEX - 데이터베이스에서 데이터를 매우 빠르게 생성하고 검색하는 데 사용
· sql NOT NULL
-create table에서 (create table = 테이블을 생성할때 / alter table = 생성된 테이블에서 뭔갈 바꿀 때)
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
--"Persons" 테이블이 생성될 때 "ID", "LastName" 및 "FirstName" 열이 NULL 값을 허용하지 않도록 합니다.
-alter table에서
ALTER TABLE Persons
MODIFY Age int NOT NULL;
--"Persons" 테이블이 이미 생성된 경우 "Age" 열에 대한 제약 조건 을 생성하려면 다음 SQL을 사용합니다.
· UNIQUE
열의 모든 값이 서로 다른지 확인(=중복값 입력 금지 / NULL값은 중복입력 가능)
UNIQUE 와 PRIMARY KEY 제약 조건 모두 고유성 보장함
PRIMARY KEY 는 자동으로 UNIQUE가 있다
각 테이블마다 UNIQUE는 여러개 일 수 있지만, PRIMARY KEY은 테이블에 하나만 가능하다
-create table에서
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
UNIQUE (ID)
);
--"Persons" 테이블이 생성될 때 "ID"열에 대한 제약 조건을 생성
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
--UNIQUE제약 조건의 이름을 지정하고 여러 열에 대한 제약 조건 을 정의
구문 : (CONSTRAINT 제약명 UNIQUE (컬럼1, 컬럼2))
-alter table에서
테이블이 이미 생성된 경우 "ID" 열에 대한 제약 조건 을 생성하려면 다음 SQL을 사용합니다.
ALTER TABLE Persons
ADD UNIQUE (ID);
UNIQUE 제약 조건의 이름을 지정하고 여러 열에 대한 제약 조건 을 정의 하려면 다음 SQL 구문을 사용합니다.
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
-UNIQUE 삭제
ALTER TABLE Persons
DROP INDEX UC_Person;
· PRIMARY KEY
PRIMARY KEY제약이 유일하게 테이블의 각 레코드를 식별합니다.
기본 키는 UNIQUE 값을 포함해야 하며 NULL 값을 포함할 수 없습니다.
(즉, NULL값이 있으면 안되고 해당 컬럼의 데이터는 중복되지 않고 유일해야 합니다. NOT NULL + UNIQUE의 속성가짐)
테이블에는 하나의 기본 키만 있을 수 있습니다.(한개의 테이블에 기본키 하나만 생성 가능)
-create table
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
--"Persons" 테이블이 생성될 때 "ID" 열에 PRIMARY KEY 생성합니다.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
--PRIMARY KEY제약 조건의 이름을 지정하고 여러 열에 PRIMARY KEY제약 조건 을 정의 하려면 다음 SQL 구문을 사용합니다. / PK_Person이라는 기본키 이름을 지정하고 ID, LastName열에 기본키 제약 조건 지정함
참고: 위의 예에서는 기본 키가 하나만 있습니다(PK_Person). 그러나 기본 키의 값은 두 개의 열(ID + Last Name)로 구성됩니다. (기본키는 한 테이블에 하나마 되지 않나 어떻게 열 2개에 들어가지 ?)
-alter table
테이블이 이미 생성된 경우 "ID" 열에 대한 PRIMARY KEY을 걸려면 다음 SQL을 사용합니다.
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
PRIMARY KEY이름을 지정하고 여러 열에 PRIMARY KEY를 정의하기
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
-PRIMARY KEY 제거
ALTER TABLE Persons
DROP PRIMARY KEY;
· FOREIGN KEY
참조하는 테이블에서 존재하는 값만 사용 가능, 만일에 참조하는 테이블에 해당하는 값이 없을시에는 INSERT시나 UPDATE시에 오류가 나게 됩니다.
외래 키가 있는 테이블을 자식 테이블이라고 하고 기본 키가 있는 테이블을 참조 또는 부모 테이블이라고 합니다.
외래키로 두 테이블이 부모테이블과 자식테이블로 관계를 맺고 있을시에, 자식테이블이 참조하는 데이터는 부모 테이블에서 삭제가 불가능합니다.
-create table
"Orders" 테이블이 생성될 때 "PersonID" 열에 FOREIGN KEY 생성
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
구문: FOREIGN KEY (컬럼1) REFERENCES 참조테이블명(참조 컬럼)
FOREIGN KEY이름을 지정하고 여러 열에 FOREIGN KEY를 정의하기
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
-alter table
"Orders" 테이블이 이미 생성된 경우
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
FOREIGN KEY이름을 지정하고 여러 열에 FOREIGN KEY를 정의하기
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
-FOREIGN KEY 제거
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
· CHECK
조건에 부합하는 데이터만 입력이 가능하도록 하는 제약조건(이 열에 대해 특정 값만 허용됩니다.)
조건에는 기본연산자나 비교연산자, IN, NOT IN 등등이 사용 가능합니다.
-create table
"Persons" 테이블이 생성될 때 "Age" 열에 대한 check 조건 생성(사람의 나이는 18 세 이상이어야한다는 조건)
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
CHECK제약 조건의 이름을 지정 여러 열에 CHECK제약 조건 을 정의 하려면 다음 SQL 구문을 사용합니다.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
-alter table
테이블이 이미 생성된 경우 "Age" 열에 대한 CHECK 생성하려면 다음 SQL을 사용합니다.
ALTER TABLE Persons
ADD CHECK (Age>=18);
CHECK의 이름을 지정 여러 열에 CHECK 정의 하려면 다음 SQL 구문을 사용합니다.
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
-delete CHECK
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
· DEFAULT
컬럼에 대한 기본값을 설정할 수 있게 해줍니다, 다른 값을 지정하지 않으면 기본값이 모든 새 레코드에 추가됩니다.
즉, 데이터 입력시 빠뜨리면 기본값으로 설정된 데이터를 사용한다는 것을 의미
만약 레코드를 입력할 때 해당 필드 값을 전달하지 않으면, 자동으로 설정된 기본값을 저장합니다.
-create table
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
--"Persons" 테이블이 생성될 때 "City" 열에 대한 DEFAULT 생성
-alter table
테이블이 이미 생성된 경우
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
--ALTER 칼럼명 SET DEFAULT 데이터;
-delete DEFAULT
ALTER TABLE Persons
ALTER City DROP DEFAULT;
· INDEX
댓글