IT 정보/MCSE

MCP자격증/MCSE/MCSE자격증/MCSE학원]테이블 생성(CREATE TABLE)

김윤석 2007. 12. 12. 18:34

테이블을 만들기전 테이블에 대한 숫자적인 제약을 살펴보도록 하겠는데, 큰 의미를 둘 필요는 없습니다.

o 하나의 데이터베이스 안에는 20억개의 테이블을 만들 수 있습니다.(어마어마 합니다)
o 각 테이블에는 1,024 개의 컬럼을 만들 수 있습니다.(조금 어마어마 합니다)
o 각 레코드(ROW를 가리킵니다)는 이미지나 텍스트가 이닌 경우 8,060 Byte의 최대 용량을 갖습니다.

※ 이미지와 텍스트는 데이터 페이지가 아닌 다른 공간에 저장이 됩니다. 이들이 저장된 공간의 위치만을 데이터 페이지에 기록하게 됩니다(16Byte 차지). 이미지와 텍스트가 가질 수 있는 최대 용량은 2GB 입니다. 만일 sp_tableoption 시스템 스토어드프로시져를 이용하면 이미지와 텍스트를 데이터 페이지에 저장 할 수 있습니다.

테이블을 생성하는 방법역시 EM(Enterprise Manager)를 사용하는 방법과 SQL문을 사용하는 방법 두가지가 있습니다.

1. EM을 이용한 테이블 생성

다음 [그림 1]과 같이 테이블 항목에서 마우스 오른쪽버튼을 눌러 [새 테이블(B)...]을 선택하시면 됩니다.


[그림 1]

다음의 [그림 2]는 EM에서 테이블을 만드는 과정의 화면입니다.


[그림 2]

2. CREATE TABLE문을 이용한 테이블 생성

EM에서 작성 할 때 사용되는 화면과 아이템들이 CREATE TABLE 문의 어느 부분에 해당되는지 생각을 해보시기 바랍니다.

[예제1]

다음의 예는 MyDB에 MyTable이라는 테이블을 만드는 것입니다.

USE MyDB
GO

CREATE TABLE MyTable (
UserID char(05) NOT NULL,
UserName varchar(20) NOT NULL,
Address varchar(100) NULL
)

o 테이블을 만들때는 테이블의 이름과 컬럼이름, 컬럼의 데이터 타입 그리고 각 칼럼들이 NULL값을 가질지의 여부를 지정하게 됩니다.
o 데이터 타입에 대한 정확한 정보는 Books Online을 참고하여 주시기 바랍니다.

3. NULL or NOT NULL

null 값은 값이 없다거나 값이 0임을 가리키는 것이 아니고 값이 무엇인지 모르겠다는 의미입니다. 그리므로 null 값을 가지고 다른 값과 비교 할 수 없으며 심지어 null 값 서로간에도 비교를 할 수 없습니다. 컬럼을 선언할 때 NOT NULL 이라고 하는 것은 이 컬럼에는 NULL 이 아닌 분명한 값이 들어와야 한다는 것을 지정하는 것입니다. NULL 이라고 선언하게 되면 특정 값이 들어오지 않으면 NULL로 지정하겠다는 것입니다.

다음은 Books Online에서 설명하고 있는 null에 관한 설명입니다.

o 쿼리에서 null 값을 검사하려면 WHERE 절에서 IS NULL이나 IS NOT NULL을 사용합니다.
oSQL 쿼리 분석기에서 쿼리 결과가 나타나면 결과 집합에서 null 값이 NULL로 표시됩니다.
o null 값은 INSERT 또는 UPDATE 문에서 NULL을 명시적으로 입력하거나, INSERT 문에서 해당 열을 제외시키거나, ALTER TABLE 문을 사용하여 기존 테이블에 새 열을 추가할 때 열에 입력됩니다.
o 테이블의 행을 다른 행과 구별하는 데 필요한 정보(예: 외래 키나 기본 키)에는 null 값을 사용할 수 없습니다.

4. 테이블 생성의 여러가지 예

CREATE TABLE에 대한 몇가지 예를 살펴봄으로써 추가적인 내용을 살펴보도록 하겠습니다.

[예제1]수식의 사용

CREATE TABLE MyTable
(
low int,
high int,
myavg AS (low + high)/2
)

o low와 high에 값이 입력되면 myavg에는 두값의 합을 2로 나눈 값이 저장됩니다.
o 다음의 쿼리 수행 결과에서 myavg는 15라는 값을 같게 됩니다.

INSERT INTO MyTable(low, high) VALUES(10, 20)
GO
SELECT * FROM MyTable

[예제2] 함수의 사용

CREATE TABLE MyLoginTable
(
date_in datetime,
user_id int,
myuser_name AS USER_NAME()
)

o USER_NAME 함수를 사용해서 새로운 레코드가 생길 때 myuser_name에는 세션을 연결한 사용자 정보가 입력되도록 한 예입니다.
o date_in 컬럼에 자동으로 현재의 날짜가 입력되게 하려면 위 쿼리문을 어떻게 고치면 될까요? 다음과 같이 GETDATE 함수를 이용하시면 됩니다.

CREATE TABLE MyLoginTable
(
date_in AS GETDATE(),
user_id int,
myuser_name AS USER_NAME()
)

[예제3] IDENTITY 사용

CREATE TABLE TestIdentity
(
user_id int IDENTITY (1,1),
user_name char(20)
)

GO

INSERT INTO TestIdentity(user_name) values('AAA')
INSERT INTO TestIdentity(user_name) values('BBB')
SELECT * FROM TestIdentity

o 새로운 레코드가 생기면 user_id에는 1부터 시작해서 1씩 증가한 값이 입력됩니다. SELECT 결과에서 'AAA'는 user_id가 1, 'BBB'는 user_id 가 2 로 기록됩니다.

[예제4] 임시 테이블

USE MyDB

GO

CREATE TABLE #MyTempTable
(
user_id int,
user_name char(20)
)

o #을 붙여 만든 테이블은 연결된 세션이 종료되면 자동으로 사라지며, 세션이 연결된 상태라 하더라도 다른 세션에서는 사용 할 수 없습니다.
o 만일 세션이 연결된 동안 다른 세션에서도 이 임시 테이블을 사용하게 하려면 # 대신 ##을 붙여 만들면 됩니다. #가 붙으면 로컬 임시테이블, ##가 붙으면 글로벌 임시테이블 이라고 합니다.

출처http://www.it-bank.or.kr/ms/main_1.htm