CREATE DATABASE [IF NOT EXISTS] course_rating;
DB생성
USE course_rating;
사용할 DB설정
CREATE TABLE student(
`컬럼명` 데이터타입 속성,
`컬럼명` 데이터타입 속성,
...,
`컬럼명` 데이터타입 속성,
primary key('컬럼명')
);
PK primary key
NN not null
AI auto increment
TINYINT SIGNED : -128 ~ 127
TINYINT UNSIGNED : 0 ~ 255
SMALLINT SIGNED : -32768 ~ 32767
SMALLINT UNSIGNED : 0 ~ 65535
MEDIUMINT SIGNED : -8388608 ~ 8388607
MEDIUMINT UNSIGNED : 0 ~ 16777215
INT SIGNED : -2147483648 ~ 2147483647
INT UNSIGNED : 0 ~ 4294967295
BIGINT SIGNED : -9223372036854775808 ~ 9223372036854775807
BIGINT UNSIGNED : 0 ~ 18446744073709551615
DECIMAL(M, D)형식으로 나타내고 m은 최대자리수 d는 소수점 최대자리수
-3.402823466E+38 ~ -1.175494351E-38,
날짜를 나타내는 데이터
날짜와 시간을 나타내는 데이터
날짜와 시간을 나타내는 데이터 DATETIME과 다른점은 타임존 정보도 함께저장
CHAR(n) 최대 n자의 문자열을 저장할 수 있다
0부터 최대 255까지의 숫자를 적을 수 있다
VARCHAR(n) 최대 n자의 문자열을 저장할 수 있다
0부터 최대 65,535(216 − 1)까지의 숫자를 적을 수 있다
CHAR와 VARCHAR의 차이점
CHAR(10)은 어떤 길이의 문자열이 저장되더라도 항상 그 값이 10만큼 용량을 차지하지만 VARCHAR(n)는 저장 용량이 설정된 최대 길이에 맞게 고정된 게 아니라 실제 저장된 값에 맞게 최적화 된다
최대 65535 자까지 저장할 수 있다.
INSERT INTO student(id, name, student_number, major, email, phone, admission_date)
VALUES(1, '손승완', 20150202, '컴퓨터공학과', 'sw0221@mail.com', '010-1234-4567', '2022-03-12');
모든 컬럼이 들어가는 로우를 삽일할때는 컬럼이름을 생략해도 된다
INSERT INTO student(name, student_number, major, admission_date)
VALUES('강슬기', 20140505, '경영학과', '2014-03-12');
특정 컬럼을 제외한 로우를 삽일할때는 컬럼이름을 명시해주어야 한다
UPDATE student
SET major = '정보통신공학과', name = '손수난'
WHERE id = 2;
DELETE FROM student WHERE ID = 3
컬럼의 이름수정
ALTER TABLE student
RENAME COLUMN student_number TO registraion_number;
컬럼삭제
ALTER TABLE student DROP COLUMN admission_date;
컬럼추가
ALTER TABLE student ADD status varchar(5) NOT NULL;
컬럼의 타입 또는 속성을 변경
ALTER TABLE student MODIFY major INT;
ALTER TABLE student MODIFY major NOT NULL DEFAULT 101;
ALTER TABLE student
ADD CONSTRAINT st_rule CHECK (email like '%@%' AND gender IN ('m', 'f'));
PRIMARY KEY와 UNIQUE속성의 차이
PK는 테이블에서 하나의 row를 식별하기위해 사용되는 컬럼이므로 null을 허용하지않음
unique는 각각의 컬럼들이 가질수 있는 속성으로 한테이블의 여러 개의 unique 속성들이 존재할 수 있다
한개의 제약조건
ALTER TABLE student
ADD CONSTRAINT st_rule CHECK (registration_number < 30000000);
여러개의 제약조건
ALTER TABLE student
ADD CONSTRAINT st_rule CHECK (email like '%@%' AND gender IN ('m', 'f'));
ALTER TABLE student DROP CONSTRAINT st_rule;
ALTER TABLE student
MODIFY id INT NOT NULL AUTO_INCREMENT FIRST;
ALTER TABLE student
MODIFY role CHAR(5) NULL ALTER name;
role컬럼을 name컬럼 뒤에 위치하도록 한다
컬럼의 이름과 컬럼의 데이터 타입 및 속성 동시에 수정하기
CHANGE [기존컬럼명][바뀐컬럼명] [데이터타입][속성]
ALTER TABLE student
CHANGE role position VARCHAR(2) NOT NULL;
ALTER TABLE student
RENAME COLUMN id TO registration_number,
MODIFY name VARCHAR(20) NOT NULL,
DROP COLUMN position,
ADD height DOUBLE NOT NULL,
ADD weight DOUBLE NOT NULL;
RENAME TABLE studen TO undergraduate;
CREATE TABLE copy_of_undergraduate AS SELECT * FROM undergraduate;
CREATE TABLE copy_of_undergraduate LIKE undergraduate;
INSERT INTO copy_of_undergraduate SELECT * FROM undergraduate;
DROP TABLE copy_of_undergraduate;
DELETE FROM student;
TRUNCATE student;