2018-6-23 DB개론 - 테이블생성
Mysql Create Table
insert into score values('jimmy', 60, '2018-6-5'), ('pobi',100,'2018-6-5');
- 2개의 데이터를 한꺼면에 볼 수 있다-
- char는 고정이기때문에 Char(8)에서는 글자가 1개인 경우에도 100칸을 차지를 한다.
- varchar(8)에서는 가변길이이다.
create table auction_user(
id char(16),
name varchar(32),
birth date,
last datetime,
money dec(8,2)
);
mysql> insert into auction_user (id, name) values ('a001', 'jaeyeon');
Query OK, 1 row affected (0.01 sec)
mysql> select * from auction_user;
+------+---------+-------+------+-------+
| id | name | birth | last | money |
+------+---------+-------+------+-------+
| a001 | jaeyeon | NULL | NULL | NULL |
| a001 | jaeyeon | NULL | NULL | NULL |
+------+---------+-------+------+-------+
2 rows in set (0.00 sec)
- name은 중복이 가능하지만, id는 중복을 하면 안된다. id는 반드시 고유한 값을 가져야한다.
- 고유한 값을 Primary Key라는 기본키로 조건을 해야한다.
drop table if exists auction_user;
create table auction_user(
id char(16),
name varchar(32),
birth date,
last datetime,
money dec(8,2),
primary key(id)
);
mysql> desc auction_user;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | char(16) | NO | PRI | NULL | |
| name | varchar(32) | YES | | NULL | |
| birth | date | YES | | NULL | |
| last | datetime | YES | | NULL | |
| money | decimal(8,2) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
- 위의 데이터 설계처럼 primary_key(id)로 id를 기본키로 지정을 한다.
mysql> insert into auction_user (id, name) values ('a001', 'jaeyeon');
Query OK, 1 row affected (0.01 sec)
mysql> insert into auction_user (id, name) values ('a001', 'jaeyeon');
ERROR 1062 (23000): Duplicate entry 'a001' for key 'PRIMARY'
- primary제약조건으로 인해서 중복된 id의 값은 삽입이 안된다.
mysql> select * from auction_user;
+------+---------+-------+------+-------+
| id | name | birth | last | money |
+------+---------+-------+------+-------+
| a001 | jaeyeon | NULL | NULL | NULL |
| a002 | NULL | NULL | NULL | NULL |
+------+---------+-------+------+-------+
- null이 안되는 부분에 not null의 제약조건을 걸어야한다.
mysql> desc auction_user;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | char(16) | NO | PRI | NULL | |
| name | varchar(32) | NO | | NULL | |
| birth | date | YES | | NULL | |
| last | datetime | YES | | NULL | |
| money | decimal(8,2) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
- id, name의 null부분이 no가 됬다.
default
- 값을 넣지 않았을때 기본적으로 들어가는 값이다.
mysql> insert into auction_user (id, name) values ('a001', 'jimmy');
Query OK, 1 row affected (0.01 sec)
mysql> select * from auction_user;
+------+-------+-------+------+---------+
| id | name | birth | last | money |
+------+-------+-------+------+---------+
| a001 | jimmy | NULL | NULL | 1000.00 |
+------+-------+-------+------+---------+
- money의 값을 넣지 않았음에도 불구하고 1000이 기본으로 들어와 있다.
Unique
- 기본키 외에 고유한 값을 가지는 컬럼에 unique를 사용한다.
drop table if exists auction_user;
create table auction_user(
id char(16) not null,
name varchar(32) not null unique,
birth date,
last datetime,
money dec(8,2) not null default 5.00,
primary key(id)
);
drop table if exists auction_user;
create table auction_user(
id char(16) not null,
name varchar(32) not null,
birth date,
last datetime,
money dec(8,2) not null default 5.00,
primary key(id),
unique(name)
);
- 위와 같이 2가지 방법으로 unique를 설정할 수 있다.
- 하지만 name을 unique로 사용을 하면 안좋다.
mysql> desc auction_user;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | char(16) | NO | PRI | NULL | |
| name | varchar(32) | NO | | NULL | |
| ssn1 | char(6) | YES | MUL | NULL | |
| ssn2 | char(7) | YES | | NULL | |
| last | datetime | YES | | NULL | |
| money | decimal(8,2) | NO | | 5.00 | |
+-------+--------------+------+-----+---------+-------+
- ssn1+ss2의 값이 unique로 된다.
primary key auto_increment를 사용을 하면 자동을 id값이 증가를 한다.
create table auction_user(
id int primary key auto_increment,
name varchar(32) not null,
ssn1 char(6),
ssn2 char(7),
last datetime,
money dec(8,2) not null default 5.00,
unique(ssn1, ssn2)
);
mysql> desc auction_user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | NULL | |
| ssn1 | char(6) | YES | MUL | NULL | |
| ssn2 | char(7) | YES | | NULL | |
| last | datetime | YES | | NULL | |
| money | decimal(8,2) | NO | | 5.00 | |
+-------+--------------+------+-----+---------+----------------+
Written on June 23, 2018