다이어그램
- 회원가입시 customers 페이지에 개인정보가 저장된다. (id가 고유하게 존재한다.)
- orders는 회원이 물건을 구매할 시 row가 생성되는 테이블이다. (id가 고유하게 존재한다.)
- orders의 개별 id는 고유하지만, 회원 정보가 있어야만 물건을 구매할 수 있으므로, orders의 customer_id는 customers의 id를 외래키로 참조한다.
- 하나의 회원이 여러개의 orders row를 가질 수 있으므로, 이는 일대 다 관계에 해당한다.
SQL문
// customers 테이블 생성
CREATE TABLE customers (
id INT AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
PRIMARY KEY(id),
CONSTRAINT email_constraint CHECK (email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
);
// orders 테이블 생성
CREATE TABLE orders (
id INT AUTO_INCREMENT,
order_date DATE,
amount DECIMAL(8, 2),
customer_id INT,
PRIMARY KEY(id),
FOREIGN KEY(customer_id) REFERENCES customers(id)
);
// orders 테이블의 date default값 설정
ALTER TABLE orders MODIFY COLUMN order_date DATE DEFAULT (current_date);
- 이메일 입력에 관한 제약사항을 추가했다.
- DATE가 빈값이 들어오게 되어, ALTER TABLE을 이용해 order_date에 DEFAULT값을 추가했는데 잘 안되더라.
- DEFAULT에 now()를 넣으려고 시도했는데 알고보니 DATE 데이터타입에는 datetime과 timestamp가 들어갈 수 없었다.
- current_date도 괄호가 없으면 오류가 났다.
컬럼 타입이 DATE 라면 current_date 를 사용해야 현재 날짜를 default 값으로 지정할 수 있다.
컬럼 타입이 DATETIME 이라면 current_time과 current_timestamp, now() 모두 사용 가능하다.
current_date와 current_time을 사용하려면 괄호로 감싸주어야 오류가 발생하지 않는다.
current_timestamp와 now()는 괄호로 감싸주지 않아도 된다.
레퍼런스
'했던것들 > MySQL' 카테고리의 다른 글
Error Code: 1175. safe update mode 해제 SQL문 (0) | 2023.07.31 |
---|---|
Error Code: 1093. You can't specify target table 'people' for update in FROM clause (0) | 2023.07.29 |
데이터베이스(SQL) 도입하기 (0) | 2023.02.02 |