본문 바로가기
데이터 베이스/mysql 문제

4 mysql 테이블 생성

by 인생여희 2017. 11. 9.
반응형

create table 테이블 생성

alter table 테이블과 열 변경

drop table 테이블 삭제

rename 테이블 이름 변경

새로운 테이블의 생성

#우편번호테이블

create table post(

post_no varchar(7) Not null, #우편번호

post_dong char(30) Not null, #동이름

post_address char(60) Not null, #주소

ddd char(4), #DDD 전화지역번호

primary key (post_no)

)engine = innoDB;


다음은 학사 데이터 베이스에서 post 테이블을 생성하는 create table 명령문의 예제를 보여주고 있다.

테이블의 이름은 post이며, 이 이름은 학사 데이터베이스내에 포함되어 있는 모든 테이블에 대하여 유일한 이름이어야 한다.

그리고 create table 명령어를 입력한 사용자가 자동적으로 테이블의 소유자가 된다.

테이블의 테이블 스키마는 열의 정의와 몇개의 키에 대한 무결성 규칙을 가지고 있다.

열의 정의는 열의 이름과 자료형을 가지고 있으며, not null 과 가능하다면 대체 키를 지정해도 된다.

열의 자료형을 지정하는 것은 필수적인 것이다.

자료형에 의해서 열에 어떤 값이 입력되는 가를 나타낼 수 있다.

다시 말하면 열의 자료형은 입력할 수 있는 값을 제한 하는 것이다.

각 열에는 not null 무결성 규칙이 지정되어야 한다.

null 값은 값이 알려지지 않다. 또는 값이 존재하지 않다로 비유할 수 있다.

이 수가 0인 경우와 또 공백인 경우와 혼동해서는 안된다.

그래서 반드시 하나의 값을 가져야 한다.

기본키키는 값이 항상 유일한 열 또는 열의 집합이다

따라서 기본키에는 null 값이 허용되지 않는다.

위에서는 post_no 열이 post 테이블의 기본 키이다.

기본키로 정의된 열은 not null로 정의 되어야 한다.

그리고 마지막 열에 있는 열의 정의와 primary key 단어 사이에는 구분을 위한 콤마를 사용한다.

과목명, 과목 코드, 과목인원, 과목 개설 일자를 기록하기 위한 diplomas 테이블을 생성하라. course, student, end_date 열을 사용하여 조합 기본 키를 생성한다.

"CREATE TABLE DIPLOMAS

(COURSE VARCHAR(20) NOT NULL,

STUDENT VARCHAR(10) NOT NULL,

COU_NUM INT(2),

END_DATE DATE NOT NULL,

PRIMARY KEY (COURSE, STUDENT, END_DATE));



insert into diplomas values('웹프로그래밍','공자',2,'2007/07/25');

insert into diplomas values('웹프로그래밍','맹자',3,'2007/07/25');"

3개의 열을 사용하여 기본 키를 정의함으로써 학생은 지정된 일자에 한 과목에 대하여 취득할 수 있다.

기본키를 정의할 때 규칙

각 테이블에는 오직 하나의 기본키만 정의 할 수 있다.

관계형 모델에서는 각 테이블에 하나의 기본키를 정의하도록 하고 있다.

그러나 sql에서는 이러한 것을 따르도록 하지 않기 때문에 기본키 없이 테이블을 생성 할 수 있다.

그러나 각 기본 테이블에 대하여 하나의 기본 키를 지정하는 것이 바람직하다.

이와 같은 이유는 기본 키로 테이블을 갱신할 때 유일성을 조사하기 위해서다

또 기본 키를 사용하지 않는 이유는 테이블에 동일한 데이터를 갖는 행을 저장할 수 있도록 하기 위해서이다.

이렇게 할 경우 문제점이 발생한다.

그 이유는 2개의 행을 서로 구분할 수 없으므로 select 명령문에서 동일한 조건을 만족하게 되며, update 명령문에서 2개의 행은 함께 갱신되기 때문에 문제가 발생한다.

이러한 상황에서는 데이터가 잘못될 가능성이 높다.

테이블에서 서로 다른 행은 동일한 값을 기본 키로 가질 수 없다.

-테이블 명세와 소유자

많은 sql 명령문에서 테이블 명세는 접근할 테이블을 구별하기 위해서 사용된다.

예를 들면 다음의 select 명령문에서 키워드 from 다음에는 접근하고자하는 테이블을 기술한다.

여기서 student는 테이블 명세이다.

select * from student

즉, 테이블을 구분짓는 유일한 이름이다.

mysql에서 테이블의 이름은 데이터베이스 내에서 유일하다.

그래서 다른 사람이 소유자인 테이블을 접근하고자 할 때도 아무런 문제가 발생하지 않는다.

테이블 명세는 바로 테이블 이름으로 구성되어 있다.

그러나 많은 sql 제품에서는 또 다른 규칙을 적용하는데, 즉 테이블 이름은 사용자에게만 유일하다는 것이다.

따라서 2명의 사용자는 서로 동일한 이름을 가지는 테이블을 생성할 수 있다.

이러한 제품에서는 테이블을 접근하기 위한 명령문을 입력한 사용자가 student 테이블의 소유자라고 가정하고 있다.

그래서 다른 사용자가 소유자인 테이블을 접근하려면 테이블 명세는 소유자의 이름을 포함할 수 있도록 확장해야 한다.

다음의 select 명령문에서는 jjy 라는 사용자가 소유인 student 테이블에 접근하는 질의어를 보여주고 있다.

select * from jjy.student

그래서 소유자의 이름없이 테이블을 지정하면 sql은 사용자가 자신이 소유자인 테이블을 접근한다고 가정한다.

- 테이블과 열의 이름

하나의 스키마는 2개의 테이블을 동일한 이름으로 가질 수 없다.

하나의 테이블에서 2개의 열이 동일한 이름을 가질 수 없다.

- 테이블 삭제

drop table 명령문은 테이블을 삭제하기 위해서 사용된다.

테이블이 삭제되면 sql은 모든 무결성 규칙에 따라 카탈로그 테이블로부터 테이블의 명세표, 인덱스, 데이터 값 그리고 테이블에 부여된 권한을 제거한다.

diplomas 테이블을 삭제하여라

drop table diplomas;

- 테이블의 구조 변경 (열의 추가)

update , insert, delete 명령문은 테이블의 내용을 변경하기 위해서 사용된다.

또한 sql은 테이블의 구조를 변경할 수 있는 기능을 제공한다.

이는 다음과 같은 alert table 명령문을 사용한다.

diplomas 테이블에 성별 sex char(2)로 열을 추가하라

alert table diplomas add sex char(2) ;

그러면 diplomas 테이블은 sex라는 열을 char(2) 데이터형의 크기로 추가되고 sql에서 열에 값을 채울 때 유일하게 가능한 값은 null 이다.

확인

select * from diplomas

-테이블 구조의 변경

어떤 제품에서는 alert table 명령문의 기능으로 열을 추가하는데 제약사항을 두지 않고 있다.

즉, 이 명령으로 다음과 같은 몇 개의 서로 다른 기능을 수행할 수 있다.

테이블에 새로운 열을 추가한다

기존에 존재하는 열을 삭제한다.

자료형의 길이를 변경한다.

기존에 존재하는 열의 자료형을 특별한 조건하에서 변경할 수 있다.

기본 키와 같은 새로운 무결성 규칙을 추가할 수 있다.

기존에 존재하는 무결성 규칙을 삭제할 수 있다.

diplomas 테이블의 sex 열의 길이를 2에서 4로 증가 시켜라

alert table diplomas modify sex char(4);

열에 있는 모든 값이 새로운 자료형의 규칙을 만족한다면 열은 새로운 자료형을 받아들인다.

diplomas 테이블에서 sex의 자료형을 char에서 int로 변경해라

alert table diplomas modify sex int;

테이블에서 기본키가 정의되어있지 않을 때 기본키를 추가할 수 있다.

alter table diplomas add primary key (student);

-테이블 이름 변경

테이블뿐만 아니라 뷰, 시퀀스 등의 mysql 객체의 이름을 바꿀 수 있다.

post 테이블을 test_post 테이블명으로 변경하라

alert table post rename test_post;

반응형

'데이터 베이스 > mysql 문제' 카테고리의 다른 글

6 select 절  (0) 2017.11.13
5 mysql 함수 & 문제  (0) 2017.11.10
3 mysql 데이터 타입 및 필수 기능  (0) 2017.11.09
2 학사관리 예제 설명  (0) 2017.11.08
1 mysql 데이터 생성 삽입  (0) 2017.11.08

댓글