데이터베이스 생성
-- 이미 같은 이름을 가진 DB가 있으면 에러를 발생시키지 않고 쿼리를 실행함
CREATE database IF NOT EXISTS course_rating;
사용할 데이터베이스를 DBMS 에게 알리기
USE course_rating;
테이블 만들기
CREATE TABLE `course_rating`.`student` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NULL,
`student_number` INT NULL,
`major` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`phone` VARCHAR(15) NULL,
`admission_date` DATE NULL,
PRIMARY KEY (`id`));
);
속성
컬럼 관련 쿼리 다루기
ALTER TABLE student ADD gender CHAR(1) NULL;
ALTER TABLE student RENAME COLUMN student_number TO registration_number;
ALTER TABLE student DROP COLUMN addmission_date;
UPDATE student SET major = 10 WHERE major = '컴퓨터공학과';
UPDATE student SET major = 12 WHERE major = '멀티미디어학과';
UPDATE student SET major = 7 WHERE major = '법학과';
ALTER TABLE student MODIFY major INT;
ALTER TABLE student MODIFY name VARCHAR(35) NOT NULL;
ALTER TABLE student MODIFY registration_number INT NOT NULL;
ALTER TABLE student MODIFY major INT NOT NULL;
# INSERT INTO student (email, phone, gender)
# VALUES ('abc@naver.com', '010-1234-5678', 'm');
ALTER TABLE student MODIFY major INT NOT NULL DEFAULT 101;
INSERT INTO student (name, registration_number) VALUES ('구지섭', 20112405);
ALTER TABLE student MODIFY registration_number INT NOT NULL UNIQUE;
#INSERT INTO student (name, registration_number) VALUES ('최태웅', 20112405);
ALTER TABLE student ADD CONSTRAINT st_rule CHECK (registration_number < 30000000);
ALTER TABLE student DROP CONSTRAINT st_rule;
ALTER TABLE student
ADD CONSTRAINT st_rule
CHECK (email LIKE '%@%' AND gender IN ('m', 'f'));
테이블 복사본 만드는 방법, 테이블 컬럼 구조만 복사하는 법
CREATE TABLE shoes_for_experiment AS SELECT * FROM shoes;
DROP TABLE shoes_for_experiment;
# 테이블 구조만 복사
CREATE TABLE order_needed_shoes LIKE shoes;
INSERT INTO freshman SELECT * FROM undergraduate WHERE grade = 1; #1학년 테이블
INSERT INTO sophomore SELECT * FROM undergraduate WHERE grade = 2; #2학년 테이블
INSERT INTO junior SELECT * FROM undergraduate WHERE grade = 3; #3학년 테이블
INSERT INTO senior SELECT * FROM undergraduate WHERE grade = 4; #4학년 테이블
CREATE TABLE beta_review_20s LIKE beta_review;
# 20대가 남긴 리뷰만 넣어주기
INSERT INTO beta_review_20s SELECT * FROM beta_review WHERE age between 20 and 29;
# 테스트 코드
SELECT * FROM beta_review_20s;
Foreign Key 설정하기
# ON DETELE / ON UPDATE - RESTRICT, CASCADE, SET NULL
# 적절한 정책 고르기
ALTER TABLE `course_rating`.`review`
ADD CONSTRAINT `fk_review_table`
FOREIGN KEY (`course_id`)
REFERENCES `course_rating`.`course` (`id`)
ON DELETE RESTRICT
ON UPDATE RESTRICT;
ALTER TABLE review
DROP FOREIGN KEY fk_review_table;
ALTER TABLE review
ADD CONSTRAINT fk_review_table
FOREIGN KEY (course_id)
REFERENCES course(id)
ON DELETE CASCADE
ON UPDATE RESTRICT;
ALTER TABLE review
ADD CONSTRAINT fk_review_table
FOREIGN KEY (course_id)
REFERENCES course(id)
ON DELETE SET NULL
ON UPDATE RESTRICT;
스키마(Schema) : 데이터베이스에 관한 모든 설계사항
실무에서 여러분이 첫 번째로 해야할 일
1. 존재하는 데이터베이스 파악
show databases
2. 한 데이터베이스 안에 테이블(뷰도 포함)들 파악
show full tables in copang_main
3. 한 테이블의 컬럼 구조 파악
describe item
4. Foreign Key(외래키) 파악
select i.table_schema, i.table_name, i.constraint_type, i.constraint_name, k.referenced_table_name, k.referenced_column_name from inforamaion_schema.table_constraint i left join information_schema.KEY_COLUMN_USAGE k ON i.constraint_name = k.constraint_name where i.constraint_type = 'FOREIGN KEY';
Reference