SQL Server 환경에서 데이터베이스를 생성하는 방법. SQL - 정의, 언어에 필요한 것, 초보자를 위한 기본 기능

마지막 업데이트: 2017년 7월 9일

테이블을 생성하려면 CREATE TABLE 명령을 사용합니다. 이 명령에는 테이블 열과 해당 속성을 정의하는 다양한 연산자를 사용할 수 있습니다. 또한 테이블 전체의 속성을 결정하는 여러 연산자를 사용할 수 있습니다. 하나의 데이터베이스에는 최대 20억 개의 테이블이 포함될 수 있습니다.

테이블을 생성하는 일반적인 구문은 다음과 같습니다.

CREATE TABLE 테이블_이름 (컬럼_이름1 데이터_유형 컬럼_속성1, 컬럼_이름2 데이터_유형 컬럼_속성2, .................................. . ......... 컬럼_이름N 데이터_유형 컬럼_속성N, 테이블_속성)

CREATE TABLE 명령 뒤에는 생성되는 테이블의 이름이 옵니다. 테이블 이름은 데이터베이스에서 식별자 역할을 하므로 고유해야 합니다. 이름은 128자 이하여야 합니다. 이름은 영숫자 문자, $ 및 밑줄 문자로 구성될 수 있습니다. 또한 첫 번째 문자는 문자 또는 밑줄이어야 합니다.

개체 이름에는 공백이 포함될 수 없으며 Transact-SQL 키워드 중 하나를 나타낼 수 없습니다. 식별자에 여전히 공백 문자가 포함되어 있으면 따옴표로 묶어야 합니다. 키워드를 이름으로 사용해야 하는 경우 해당 단어는 대괄호 안에 표시됩니다.

올바른 식별자의 예:

사용자 태그$345 users_accounts "사용자 계정"

테이블 이름 뒤에는 모든 컬럼의 매개변수가 괄호 안에 표시되고 맨 끝에는 전체 테이블에 적용되는 속성이 표시됩니다. 열 속성과 테이블 속성은 선택적 구성 요소이므로 생략할 수 있습니다.

가장 간단한 형태의 CREATE TABLE 명령에는 최소한 테이블 이름과 열 이름 및 유형이 포함되어야 합니다.

테이블에는 1~1024개의 열이 포함될 수 있습니다. 각 열은 현재 테이블 내에서 고유한 이름을 가져야 하며 데이터 유형이 할당되어야 합니다.

예를 들어, 가장 간단한 Customers 테이블을 정의하면 다음과 같습니다.

CREATE TABLE 고객(ID INT, 연령 INT, 이름 NVARCHAR(20), 성 NVARCHAR(20), 이메일 VARCHAR(30), 전화번호 VARCHAR(20))

이 경우 Customers 테이블에는 Id, FirstName, LastName, Age, Email, Phone 등 6개 열이 정의되어 있습니다. 처음 두 열은 클라이언트 ID와 연령을 나타내며 INT 유형입니다. 즉, 숫자 값을 저장합니다. 다음 두 열은 클라이언트의 이름과 성을 나타내며 NVARCHAR(20) 유형입니다. 즉, 20자 이하의 UNICODE 문자열을 나타냅니다. 마지막 두 열 Email과 Phone은 고객의 이메일과 전화번호를 나타내며 VARCHAR(30/20) 유형입니다. 또한 문자열도 저장하지만 UNICODE 인코딩으로는 저장되지 않습니다.

SQL Management Studio에서 테이블 생성

서버에 간단한 테이블을 만들어 보겠습니다. 이렇게 하려면 SQL Server Management Studio를 열고 서버 이름을 마우스 오른쪽 버튼으로 클릭합니다. 나타나는 상황에 맞는 메뉴에서 새 쿼리를 선택합니다.

테이블은 현재 데이터베이스 내에 생성됩니다. 위에서 수행한 대로 서버 이름 아래에서 SQL 편집기 창을 실행하면 기본 데이터베이스가 설치되지 않습니다. 설치하려면 USE 명령과 데이터베이스 이름을 차례로 사용해야 합니다. 따라서 SQL 명령 편집기 필드에 다음 표현식을 입력합니다.

USE 사용자DB; CREATE TABLE 고객(ID INT, 연령 INT, 이름 NVARCHAR(20), 성 NVARCHAR(20), 이메일 VARCHAR(30), 전화번호 VARCHAR(20));

즉, 앞에서 설명한 Customers 테이블이 데이터베이스에 추가됩니다.

데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 새 쿼리를 선택하여 데이터베이스 아래에서 편집기를 열 수도 있습니다.

이 경우 편집기가 열린 데이터베이스는 현재 데이터베이스로 간주되며 USE 명령을 사용하여 추가로 설치할 필요가 없습니다.

테이블 제거

테이블을 삭제하려면 다음 구문을 사용하는 DROP TABLE 명령을 사용합니다.

DROP TABLE 테이블1 [, 테이블2, ...]

예를 들어 Customers 테이블을 삭제하면 다음과 같습니다.

드롭 테이블 고객

테이블 이름 바꾸기

테이블 이름을 바꾸려면 시스템 저장 프로시저 "sp_rename"을 사용하세요. 예를 들어 usersdb 데이터베이스에서 Users 테이블의 이름을 UserAccounts로 바꾸면 다음과 같습니다.

USE 사용자DB; EXEC sp_rename "사용자", "사용자 계정";

SQL 테이블을 생성하기 전에 데이터베이스 모델을 정의해야 합니다. 엔터티, 속성 및 관계를 정의하는 ER 다이어그램을 디자인합니다.

기본 개념

엔터티는 정보를 저장해야 하는 객체 또는 사실입니다. 예를 들어, 회사의 직원이나 회사에서 수행하는 프로젝트입니다. 속성은 엔터티를 설명하거나 한정하는 구성 요소입니다. 예를 들어 "직원" 엔터티의 속성은 급여이고 "프로젝트" 엔터티의 속성은 예상 비용입니다. 연결은 두 요소 간의 연결입니다. 양방향일 수 있습니다. 재귀적 연결, 즉 엔터티 자체와의 연결도 있습니다.

또한 데이터베이스의 무결성이 유지되는 키와 조건을 결정하는 것도 필요합니다. 무슨 뜻이에요? 즉, 데이터베이스를 정확하고 일관된 형태로 유지하는 데 도움이 되는 제한 사항입니다.

ER 다이어그램에서 테이블 형식 모델로 전환

테이블 형식 모델로의 전환 규칙:

  1. 모든 엔터티를 테이블로 변환합니다.
  2. 모든 속성을 열로 변환합니다. 즉, 각 엔터티 속성이 테이블 열 이름에 나타나야 합니다.
  3. 고유 식별자를 기본 키로 변환합니다.
  4. 모든 관계를 외래 키로 변환합니다.
  5. SQL 테이블을 생성합니다.

데이터베이스 만들기

먼저 MySQL 서버를 시작해야 합니다. 이를 시작하려면 시작 메뉴, 프로그램, MySQL 및 MySQL 서버로 이동하여 MySQL-Command-Line-Client를 선택하십시오.

데이터베이스를 생성하려면 데이터베이스 생성 명령을 사용합니다. 이 함수의 형식은 다음과 같습니다.

데이터베이스 생성 데이터베이스 이름.

데이터베이스 이름에 대한 제한 사항은 다음과 같습니다.

  • 길이는 최대 64자이며 문자, 숫자, "" 및 "" 기호를 포함할 수 있습니다.
  • 이름은 숫자로 시작할 수 있지만 문자를 포함해야 합니다.

일반 규칙을 기억해야 합니다. 모든 요청이나 명령은 구분 기호로 끝납니다. SQL에서는 세미콜론을 구분 기호로 사용하는 것이 일반적입니다.

서버는 작업에 필요한 데이터베이스를 표시해야 합니다. 이에 대한 USE 문이 있습니다. 이 연산자의 구문은 다음과 같습니다: USE n 데이터베이스 이름.

SQL 테이블 생성

따라서 모델이 설계되고, 데이터베이스가 생성되며, 서버는 해당 모델의 작동 방법을 정확하게 알려줍니다. 이제 SQL 테이블 생성을 시작할 수 있습니다. 데이터 정의어(DDL)가 있습니다. MS SQL 테이블을 생성하고 객체를 정의하고 해당 구조를 작업하는 데 사용됩니다. DDL에는 일련의 명령이 포함되어 있습니다.

SQL Server 테이블 생성

단 하나의 DDL 명령을 사용하면 해당 매개변수를 변경하여 다양한 데이터베이스 개체를 생성할 수 있습니다. 테이블 만들기 명령이 사용됩니다. tt 형식은 다음과 같습니다.

태들 만들기 테이블_이름,(컬럼_이름1 이름 _column2데이터 유형 [column_constraint],[table_constraints]).

이 명령의 구문은 더 자세히 설명되어야 합니다.

  • 테이블 이름은 최대 30자여야 하며 문자로 시작해야 합니다. 영문자, 문자 및 기호 "_", "$" 및 "#"만 허용됩니다. 키릴 문자 사용이 허용됩니다. 테이블 이름은 다른 개체 이름이나 열, 테이블, 인덱스 등과 같은 데이터베이스 서버 예약어와 동일해서는 안 된다는 점에 유의하는 것이 중요합니다.
  • 각 열에 대한 데이터 유형을 지정해야 합니다. 대부분의 사람들이 사용하는 표준 세트가 있습니다. 예를 들어 Char, Varchar, Number, Date, Null 유형 등이 있습니다.

  • Default 매개변수를 사용하면 기본값을 설정할 수 있습니다. 이렇게 하면 테이블에 null 값이 없는지 확인됩니다. 무슨 뜻이에요? 기본값은 기호, 표현식, 함수일 수 있습니다. 이 기본 데이터 유형은 열의 입력 데이터 유형과 일치해야 한다는 점을 기억하는 것이 중요합니다.
  • 각 열의 제약 조건은 테이블 수준에서 데이터에 대한 무결성 조건을 적용하는 데 사용됩니다. 다른 뉘앙스가 있습니다. 테이블에 종속된 다른 테이블이 있는 경우 테이블을 삭제하는 것이 금지됩니다.

데이터베이스 작업 방법

대규모 프로젝트에서는 각각 많은 테이블이 필요한 여러 데이터베이스를 생성해야 하는 경우가 많습니다. 물론 사용자가 모든 정보를 머릿속에 담아두는 것은 불가능합니다. 이를 위해 데이터베이스와 테이블의 구조를 볼 수 있습니다. 다음과 같은 몇 가지 명령이 있습니다.

  • SHOW DATABASES - 생성된 모든 SQL 데이터베이스를 화면에 표시합니다.
  • SHOW TABLES - USE 명령으로 선택된 현재 데이터베이스의 모든 테이블 목록을 표시합니다.
  • 설명하다 테이블_이름- 모든 테이블 열에 대한 설명을 표시합니다.
  • ALTER TABLE - 테이블 구조를 변경할 수 있습니다.

마지막 명령은 다음을 허용합니다.

  • 테이블에 열이나 제약 조건을 추가합니다.
  • 기존 열을 변경합니다.
  • 열을 삭제합니다.
  • 무결성 제약 조건을 제거합니다.

이 명령의 구문은 다음과 같습니다. ALTER TABLE 테이블_이름( | | | | [(활성화 | 비활성화) 상수 제약_이름 ] | }.

다른 명령도 있습니다:

  • RENAME - 테이블 이름을 바꿉니다.
  • TRUNCATE TABLE - 테이블에서 모든 행을 제거합니다. 이 기능은 테이블을 다시 채워야 할 때 필요할 수 있지만 이전 데이터를 저장할 필요는 없습니다.

데이터베이스 구조가 변경되어 테이블을 삭제해야 하는 상황도 있습니다. 이에 대한 DROP 명령이 있습니다. 물론 현재 테이블과 다른 경우 테이블을 삭제하려는 데이터베이스를 먼저 선택해야 합니다.

명령 구문은 매우 간단합니다. DROP TABLE 이름_테이블.

SQL Access에서는 위에 나열된 동일한 명령을 사용하여 테이블을 만들고 수정합니다.

CREATE TABLE을 사용하면 빈 테이블을 만든 다음 데이터로 채울 수 있습니다. 그러나 그것이 전부는 아닙니다. 다른 테이블에서 직접 테이블을 만들 수도 있습니다. 이와 같이? 즉, 테이블을 정의하고 다른 테이블의 데이터로 테이블을 채울 수 있습니다. 이에 대한 특별한 키워드 AS가 있습니다.

구문은 매우 간단합니다.

  • 테이블 만들기 이름_테이블[(열_정의)] AS 하위 쿼리;
  • 열_정의 -열 이름, 새로 생성된 테이블 열의 무결성 규칙 및 기본값
  • 하위 쿼리 - 새 테이블에 추가해야 하는 행을 반환합니다.

따라서 이러한 명령은 특정 열이 있는 테이블을 만들고 여기에 행을 삽입하며 쿼리에 반환됩니다.

임시 테이블

임시 테이블은 각 세션이 끝나거나 그 이전에 데이터가 지워지는 테이블입니다. 중간 값이나 결과를 기록하는 데 사용됩니다. 워크시트로 사용할 수 있습니다. 모든 세션에서 임시 항목을 정의할 수 있지만 해당 데이터는 현재 세션에서만 사용할 수 있습니다. 임시 SQL 테이블을 생성하는 것은 CREATE TABLE 명령을 사용하여 일반 테이블과 유사합니다. 테이블이 임시임을 시스템에 표시하려면 GLOBAL TEMPORARY 매개변수를 사용해야 합니다.

ON COMMIT 절은 해당 테이블의 데이터 수명을 설정하고 다음을 수행할 수 있습니다.

  • DELETE ROWS - 각 트랜잭션 완료 후 임시 테이블을 지웁니다(모든 세션 데이터 삭제). 이는 일반적으로 기본값입니다.
  • PRESERVE ROWS - 다음 트랜잭션에 사용할 수 있도록 데이터를 남겨둡니다. 또한 세션이 종료된 후에만 테이블을 지울 수 있습니다. 그러나 몇 가지 특징이 있습니다. 트랜잭션이 롤백(ROLLBACK)되면 테이블은 이전 트랜잭션이 끝날 때의 상태로 반환됩니다.

임시 테이블을 생성하는 구문은 다음과 같이 표현할 수 있습니다. CREATE TABLE 이름_테이블,(이름열_1데이터 유형 [column_constraint], 이름 _column2데이터 유형 [column_constraint], [table_constraints]).

지금까지 우리는 데이터 테이블을 쿼리하고 명령을 실행하여 해당 데이터를 검색했습니다. 이때 해당 테이블은 우리 이전의 누군가가 이미 생성했다고 가정했습니다. 이것은 실제로 소수의 사람들이 테이블을 만들어 다른 사람들이 사용하는 가장 현실적인 상황입니다. 우리의 목표는 먼저 정보를 보다 광범위하게 다룬 다음 보다 구체적인 문제로 넘어가는 것입니다.

이번 장에서는 테이블 생성, 수정, 삭제에 대해 설명합니다. 이 모든 것은 테이블 자체에 적용되며 테이블에 포함된 데이터에는 적용되지 않습니다. 이러한 작업을 직접 수행하든 수행하지 않든 개념적으로 이해하면 SQL 언어와 사용하는 테이블의 특성에 대한 이해가 높아집니다. 이번 장에서는 SQL 데이터 객체가 생성되는 DDL(Data Definition Language)이라는 SQL 영역을 소개합니다.

이 장에서는 또 다른 유형의 SQL 데이터 개체인 인덱스도 보여줍니다. 색인은 검색을 보다 효율적으로 만들고 때로는 값을 서로 다르게 만드는 데 사용됩니다. 일반적으로 사용자가 눈치채지 못하게 작동하지만 테이블에 값을 입력하려고 시도했지만 고유하지 않기 때문에 거부되면 다른 행이 해당 필드에 대해 동일한 값을 가지며 해당 필드에 고유 인덱스가 있음을 의미합니다. 또는 고유성을 지정하는 제약 조건입니다. 이상의 논의는 18장에서 계속된다.

테이블 생성 명령

테이블은 CREATE TABLE 명령으로 생성됩니다. 이 명령은 빈 테이블, 즉 행이 없는 테이블을 생성합니다. 값은 DML INSERT 명령을 사용하여 입력됩니다(15장 참조). CREATE TABLE 명령은 기본적으로 특정 순서로 지정된 열 이름 집합을 기술하여 테이블을 정의합니다. 또한 데이터 유형과 열 크기를 정의합니다. 모든 테이블에는 하나 이상의 열이 있어야 합니다.

CREATE TABLE 명령 구문: CREATE TABLE ( [()], [()] ...); 2장에서 설명한 것처럼 데이터 유형은 프로그램마다 크게 다릅니다. 표준과 호환되려면 최소한 ANSI 유형 표준을 모두 지원해야 합니다. 부록 B에 설명되어 있습니다.

공백은 SQL 명령의 일부를 구분하는 데 사용되므로 테이블 이름(또는 인덱스와 같은 다른 개체)의 일부가 될 수 없습니다. 밑줄(_)은 일반적으로 테이블 이름에서 단어를 구분하는 데 사용됩니다.

size 인수의 값은 데이터 유형에 따라 다릅니다. 지정하지 않으면 시스템이 자동으로 값을 할당합니다. 숫자 값의 경우 이것이 가장 좋은 방법입니다. 이 경우 이 유형의 모든 바닥이 동일한 크기를 갖게 되어 전반적인 호환성 문제에서 벗어날 수 있기 때문입니다(14장 참조). 또한 일부 숫자 집합에 크기 인수를 사용하는 것은 정확히 간단한 문제가 아닙니다. 많은 수를 저장해야 하는 경우 바닥이 이를 수용할 수 있을 만큼 충분히 큰지 확인해야 합니다.

크기를 주로 할당해야 하는 데이터 유형 중 하나는 CHAR입니다. size 인수는 필드가 보유할 수 있는 최대 문자 수를 지정하는 정수입니다. 실제로 필드의 문자 수는 0(필드가 NULL인 경우)부터 이 숫자까지 가능합니다. 기본적으로 크기 인수는 1입니다. 이는 필드에 문자 하나만 포함될 수 있음을 의미합니다. 물론 이것은 정확히 당신이 원하는 것이 아닙니다.

테이블은 해당 테이블을 생성한 사용자에게 속하며, 해당 사용자가 소유한 모든 테이블의 이름은 서로 달라야 하며, 해당 테이블 내의 모든 열의 이름도 달라야 합니다. 동일한 사용자가 소유한 별도의 테이블이라도 동일한 열 이름을 사용할 수 있습니다. 이에 대한 예는 Customers 테이블과 Sellers 테이블의 도시 열입니다. 테이블 소유자가 아닌 사용자는 테이블 소유자 이름 뒤에 점을 사용하여 이러한 테이블을 참조할 수 있습니다. 예를 들어, Smith가 만든 Employees 테이블은 다른 사용자가 언급할 때 Smith.Employees라고 불립니다(Smith는 권한 식별자(ID)임을 이해합니다. (ID)는 사용자가 보고함(확인된 ID는 귀하의 이름임) 이 출력은 2장에서 논의되었으며 22장에서 계속됩니다.

이 명령은 Salespeople 테이블을 생성합니다: CREATE TABLE Saleepeople (snum 정수, sname char (10), city char (10), comm declmal); 테이블의 열 순서는 나열된 순서에 따라 결정됩니다. 열은 줄 바꿈(가독성을 위해 수행됨)으로 구분되지 않고 쉼표로 구분되어야 합니다.

지수

인덱스는 테이블에 있는 열 또는 열 그룹의 순서가 지정된(알파벳 또는 숫자) 목록입니다. 테이블에는 많은 수의 행이 있을 수 있으며 행이 특정 순서로 되어 있지 않기 때문에 지정된 값을 검색하는 데 시간이 걸릴 수 있습니다. 인덱스 주소는 문제가 되는 동시에 모든 값을 서로 다른 하나 이상의 문자열 그룹으로 그룹화하는 방법을 제공합니다. 18장에서는 값을 고유하게 만드는 보다 직접적인 방법을 설명합니다. 그러나 이 방법은 이전 버전의 SQL에는 존재하지 않습니다. 고유성이 필요한 경우가 많으므로 이를 위해 인덱스가 사용되었습니다.

인덱스는 ANSI가 아닌 시장 자체가 탄생시킨 SQL 도구입니다. 따라서 ANSI 표준 자체는 현재 매우 유용하고 널리 사용되는 인덱스를 지원하지 않습니다.

필드에 인덱스를 생성하면 데이터베이스는 메모리 영역에서 해당 필드의 모든 값에 해당하는 순서를 기억합니다. Customer 테이블에 수천 개의 항목이 있고 숫자 = 2999인 고객을 찾고 싶다고 가정해 보겠습니다. 행은 순서가 지정되어 있지 않으므로 프로그램은 전체 테이블을 한 행씩 검토하면서 cnum 필드의 값이 2999와 같을 때마다 확인합니다. 그러나 cnum 필드에 인덱스가 있는 경우 프로그램은 인덱스에서 직접 숫자 2999에 도달하여 올바른 테이블 행을 찾는 방법에 대한 정보를 제공할 수 있습니다.

인덱스를 사용하면 쿼리 효율성이 크게 향상되지만 인덱스를 사용하면 DML 수정 작업(예: INSERT 및 DELETE)이 다소 느려지고 인덱스 자체가 많은 메모리를 차지합니다. 따라서 테이블을 생성할 때마다 테이블을 인덱싱할지 여부를 결정해야 합니다. 인덱스는 여러 필드로 구성될 수 있습니다. 동일한 인덱스에 대해 두 개 이상의 필드가 지정된 경우 두 번째 필드는 첫 번째 필드 내에 정렬되고 세 번째 필드는 두 번째 필드 내에 정렬됩니다. 테이블의 서로 다른 두 필드에 이름과 성이 있는 경우 다음 필드 내에서 이전 필드를 정렬하는 인덱스를 만들 수 있습니다. 이는 테이블의 열 배열 방식에 관계없이 수행될 수 있습니다.

인덱스를 생성하는 구문은 일반적으로 다음과 같습니다(ANSI 표준이 아님을 기억하세요): CREATE INDEX

( [,]...); 물론 테이블은 이미 생성되어 있어야 하며 열을 포함해야 합니다. 인덱스는 (모든 사용자가) 데이터베이스의 다른 용도로 사용할 수 없습니다. 일단 생성된 색인은 사용자에게 표시되지 않습니다. SQL 자체는 참조가 필요한 시점을 결정하고 자동으로 수행합니다. 예를 들어 Customers 테이블이 영업사원이 자신의 고객에 대한 쿼리에서 가장 자주 참조하는 테이블인 경우 Customers 테이블의 snum 필드에 이러한 인덱스를 만드는 것이 적절할 것입니다. 고객에 대한 INDEX 클라이언트 그룹 생성(snum); 이제 이 테이블과 관련된 판매자는 자신의 고객을 매우 빠르게 찾을 수 있을 것입니다.

인덱스의 고유성

다행스럽게도 이전 예의 인덱스는 인덱스의 목적 중 하나라는 관찰에도 불구하고 고유할 필요는 없습니다. 특정 판매자는 원하는 수의 고객을 가질 수 있습니다. 그러나 INDEX 키워드 앞에 UNIQUE 키워드를 사용하면 이런 일이 발생하지 않습니다. 기본 키인 cnum 필드는 고유 인덱스의 첫 번째 후보가 됩니다. CREATE UNIQUE INDEX Custid ON Customers(cnum); 참고: cnum 필드에 이미 동일한 값이 있는 경우 이 명령은 거부됩니다. 인덱스를 처리하는 가장 좋은 방법은 테이블이 생성된 직후, 값을 입력하기 전에 인덱스를 생성하는 것입니다. 또한 두 개 이상의 성별에 대한 고유 지수의 경우 이는 값의 조합이며 각 값은 고유하지 않을 수 있습니다.

이전 예는 cnum 필드가 Customers 테이블의 기본 키 역할을 하도록 만드는 간접적인 방법입니다. 데이터베이스는 기본 키와 기타 키에 대해 보다 직접적으로 작동합니다. 우리는 이 발견에 대해 18장과 18장에서 더 자세히 논의할 것입니다.

인덱스 삭제

인덱스의 주요 속성은 이름이 지정되어 삭제될 수 있다는 것입니다. 일반적으로 사용자는 인덱스의 존재를 인식하지 못합니다. SQL은 사용자가 인덱스를 사용할 수 있는지 여부를 자동으로 확인하고, 그렇다면 사용을 허용합니다. 그러나 인덱스를 삭제하려면 해당 인덱스를 알아야 합니다. 이 구문은 인덱스를 삭제하는 데 사용됩니다: DROP INDEX ; 인덱스를 제거해도 필드 내용에는 영향을 주지 않습니다.

테이블이 생성된 후 테이블 변경

ALTER TABLE 명령은 ANSI 표준의 일부가 아닙니다. 그러나 그 기능은 다소 제한되어 있지만 널리 접근 가능하고 상당히 의미 있는 형식입니다. 기존 테이블의 정의를 변경하는 데 사용됩니다. 일반적으로 테이블에 열을 추가합니다. 때로는 열을 제거하거나 크기를 조정할 수 있으며 일부 프로그램에서는 제약 조건을 추가하거나 제거할 수 있습니다(18장에서 설명). 테이블에 열을 추가하는 일반적인 구문은 다음과 같습니다. ALTER TABLE
추가하다 ; 테이블의 모든 행에 대해 NULL 값이 포함된 열이 추가됩니다. 새 열은 테이블의 마지막 열이 됩니다. 실제로 하나의 명령으로 여러 개의 새 열을 쉼표로 구분하여 한 번에 추가할 수 있습니다. 열을 삭제하거나 변경할 수 있습니다. 대부분의 경우 열 변경은 단순히 크기를 늘리거나 제약 조건을 추가/제거하는 것일 수 있습니다. 시스템은 모든 변경 사항이 기존 데이터와 충돌하지 않는지 확인해야 합니다. 예를 들어 이미 값이 있는 열에 제약 조건을 추가하려고 시도하는 경우 위반하면 제약 조건이 거부됩니다. 이것을 다시 확인하는 것이 가장 좋습니다. 최소한 시스템 설명서를 확인하여 이것이 원인인지 확인하십시오. ALTER TABLE 명령의 비표준 특성으로 인해 특수 사례에 대해 설명하는 시스템 문서 섹션을 계속 살펴봐야 합니다.

ALTER TABLE - 테이블을 재정의해야 하는 경우 아무런 효과가 없지만 가능하면 테이블에 너무 많이 의존하지 않도록 데이터베이스를 설계해야 합니다. 이미 사용 중인 테이블의 구조를 변경하는 것은 위험합니다! 다른 테이블에서 추출된 데이터가 포함된 보조 테이블(20장 참조)인 테이블이 오랫동안 올바르게 작동하지 않는 테이블과 중첩된 SQL(25장)을 사용하는 프로그램이 올바르게 실행되지 않거나 항상 정확하지 않은 테이블을 자세히 살펴보십시오. 또한 변경으로 인해 테이블에 액세스할 수 있는 권한이 있는 모든 사용자가 지워질 수 있습니다. 이러한 이유로 ALTER TABLE을 최후의 수단으로만 사용하도록 테이블을 설계해야 합니다.

시스템이 ALTER TABLE을 지원하지 않거나 이를 사용하지 않으려면 생성 시 필요한 변경 사항을 적용하여 새 테이블을 생성하고 SELECT * 쿼리와 함께 INSERT 명령을 사용하여 이전 테이블에서 데이터를 복사하면 됩니다. 그 안에 테이블. 이전 테이블(22장 참조)에 대한 액세스 권한이 부여된 사용자에게는 새 테이블에 대한 액세스 권한이 부여되어야 합니다.

테이블 삭제

테이블을 삭제하려면 테이블의 소유자(즉, 작성자)여야 합니다. 따라서 실수로 데이터를 삭제하는 것에 대해 걱정하지 마십시오. SQL은 데이터베이스에서 테이블을 삭제하기 전에 먼저 테이블을 정리하도록 요구합니다. 행이 포함된 테이블은 삭제할 수 없습니다. 테이블에서 행을 삭제하는 방법에 대한 자세한 내용은 15장을 참조하십시오. 물론 테이블이 비어 있다고 가정하고 테이블을 삭제하는 구문은 다음과 같습니다. DROP TABLE< table name >; 이 명령이 제공되면 테이블은 더 이상 인식되지 않으며 이 개체에 제공할 수 있는 명령이 없습니다. 이 테이블이 다른 테이블에 대한 외래 키에 의해 참조되지 않고(외래 키는 19장에서 설명됨) 뷰 정의(20장)에서 사용되지 않도록 해야 합니다.

이 명령은 실제로 ANSI 표준의 일부는 아니지만 일반적으로 지원되고 유용합니다. 다행히 ALTER TABLE보다 더 간단하고 일관성이 더 높습니다. ANSI에는 손상되거나 유효하지 않은 테이블을 감지하는 방법이 없습니다.

요약

이제 데이터 정의의 기본 사항에 능숙해졌습니다. 테이블을 생성, 수정, 삭제할 수 있습니다. 이러한 함수 중 첫 번째 함수만 공식 SQL 표준의 일부이지만 다른 함수, 특히 ALTER TABLE은 수시로 변경됩니다. DROP TABLE을 사용하면 쓸모없는 테이블을 제거할 수 있습니다. 빈 테이블만 삭제하므로 데이터는 삭제되지 않습니다.

이제 인덱스와 인덱스 생성 및 삭제 방법에 대해 알게 되었습니다. SQL은 사용하는 구현이 다양한 명령이 얼마나 빨리 실행되는지 결정하는 데 매우 효과적이기 때문에 이에 대한 많은 제어를 제공하지 않습니다. 인덱스는 SQL 명령의 효율성에 직접적인 영향을 미칠 수 있는 기능을 제공하는 도구 중 하나입니다. 여기서는 혼동해서는 안 되는 제약 조건과 구별하기 위해 인덱스에 대해 논의했습니다. 제약조건은 18장과 19장의 주제입니다.

SQL 작업

1. Customer 테이블을 표시하는 CREATE TABLE 문을 작성합니다.

2. 사용자가 주문 테이블에서 날짜별로 그룹화된 주문을 빠르게 검색할 수 있는 명령을 작성합니다.

3. Order 테이블이 이미 생성된 경우 onum 필드를 어떻게 강제로 고유하게 만들 수 있습니까(모든 현재 값이 고유하다고 가정)?

4. 각 판매자가 날짜별로 그룹화된 주문을 빠르게 찾을 수 있는 색인을 만듭니다.

5. 각 판매자에게 특정 등급을 가진 고객이 한 명뿐이라고 가정하고 해당 등급을 검색하는 명령을 입력합니다.

데이터베이스 작업은 테이블 및 테이블에 포함된 데이터 변경과 직접적인 관련이 있습니다. 하지만 시작하기 전에 테이블을 만들어야 합니다. 이 프로세스를 자동화하기 위해 특수 SQL 함수인 "CREATE TABLE"이 있습니다.

첫 번째!

MS SQL "CREATE TABLE" 명령을 사용하여 테이블을 생성하는 과정을 이해하기 전에 해당 기능을 사용하기 전에 알아야 할 사항에 대해 생각해 보는 것이 좋습니다.

우선, 테이블 이름을 정해야 합니다. 테이블 이름은 데이터베이스의 다른 이름과 비교하여 고유해야 하며 몇 가지 규칙을 따라야 합니다. 이름은 문자(a-z)로 시작하고 그 뒤에 문자, 숫자 또는 밑줄이 와야 하며 결과 구문은 예약어가 아니어야 합니다. 테이블 이름의 길이는 18자를 초과할 수 없습니다.

이름을 결정한 후에는 구조를 개발해야 합니다. 즉, 열의 이름을 정하고 열에 사용된 데이터 유형과 채워야 하는 필드를 생각해야 합니다. 여기에서는 데이터 값에 대한 가능한 제한 사항뿐만 아니라 외래 및 기본 키 필드를 즉시 정의할 가치가 있습니다.

테이블의 나머지 뉘앙스는 아주 쉽게 수정할 수 있으므로 테이블을 만드는 단계에서는 완전히 생각하지 못할 수도 있습니다.

통사론

테이블 구조를 개발한 후 테이블 생성을 진행할 수 있습니다. 이는 "CREATE TABLE"을 사용하여 매우 간단하게 수행할 수 있습니다. 여기에서 사용자는 이전에 생성된 테이블 이름과 열 목록을 지정해야 하며, 각각의 유형과 이름을 나타냅니다. 함수 구문은 다음과 같습니다.

CREATE TABLE 테이블 이름
((column_name 데이터 유형 …| table_constraint)
[,(column_name 데이터 유형 …| table_constraint)]…)

함수 생성에 사용되는 인수는 다음을 의미합니다.

  • table_name - 테이블 이름
  • column_name - 열 이름
  • datatype - 이 필드에 사용되는 데이터 유형
  • DEFAULT는 열에 사용되는 기본 표현식입니다.

두 개의 함수 인수를 더 사용할 수도 있습니다:

  • column_constraint - 열 매개변수
  • table_constraint - 테이블 매개변수

여기에서 사용자는 작업에 필요한 제한 사항이나 테이블 작성 조건을 지정할 수 있습니다.

테이블 생성 기능

함수가 포함된 쿼리를 작성할 때 필드 채우기 규칙을 설정해야 하는 경우가 있습니다. 이렇게 하려면 특정 조건 세트를 정의하는 특수 함수 속성을 추가해야 합니다.

셀에 빈 값이 포함될 수 있는지 확인하려면 열의 이름과 유형을 지정한 후 NULL(빈 값이 있을 수 있음) 또는 NOT NULL(필드를 채워야 함) 키워드 중 하나를 입력해야 합니다.

테이블을 생성할 때 대부분의 경우 두 개의 동일한 레코드가 발생하지 않도록 각 레코드를 통합해야 합니다. 이를 위해 줄 번호 매기기가 가장 자주 사용됩니다. 그리고 사용자가 테이블의 마지막 숫자를 알도록 요구하지 않으려면 "CREATE TABLE" 함수에서 해당 필드 뒤에 "기본 키"라는 키워드를 써서 기본 키 열을 표시하는 것으로 충분합니다. 대부분의 경우 테이블이 서로 조인되는 것은 기본 키에 의해 이루어집니다.

기본 키와의 연결을 보장하기 위해 외래 키 속성 "FOREIGN KEY"가 사용됩니다. 열에 대해 이 속성을 지정하면 이 필드에 동일한 테이블이나 다른 테이블의 기본 키 열에 있는 값 중 하나와 일치하는 값이 포함되도록 할 수 있습니다. 이러한 방식으로 데이터 일관성이 보장될 수 있습니다.

지정된 세트 또는 정의에 대한 검사를 제공하려면 CHECK 속성을 사용해야 합니다. 함수 인수 목록의 마지막에 작성되며 개인 매개변수로 논리식을 갖습니다. 이를 통해 예를 들어 "성별" 테이블 필드에 "M" 및 "F" 문자만 사용하여 가능한 값 목록을 제한할 수 있습니다.

제시된 것 외에도 이 기능에는 더 많은 구체적인 속성이 있지만 실제로는 훨씬 덜 자주 사용됩니다.

함수 작동 원리를 완전히 이해하려면 CREATE TABLE(SQL)이 어떻게 작동하는지 실제로 고려해 볼 가치가 있습니다. 아래 예에서는 그림에 표시된 테이블을 생성합니다.

테이블 맞춤 만들기
(ID CHAR(10) NOT NULL 기본 키,
Custom_name CHAR(20),
맞춤_주소 CHAR(30),
Custom_city CHAR(20),
맞춤_국가 CHAR(20),
ArcDate CHAR(20))

보시다시피, 셀에 값이 없을 수 있는 경우(NULL)에 대한 매개변수는 기본적으로 사용되므로 생략할 수 있습니다.



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: