DDL - CREATE DATABASE、CREATE TABLE

 

雖然通常利用SSMS來新建一個資料庫與資料表比較方便,

但還是要了解一下如何使用指令碼來新增一個基本資料表。

 

一、新增資料庫與資料表

CREATE DATABASE mydatabase;
GO

USE mydatabase;
GO

CREATE TABLE TABLE_NAME (
  id_a   int          NULL,
  name_a nvarchar(50) NULL
)

GO

 

二、新增資料表

以下三種基本新增資料表的結果都一樣,

只是第一種省略了預設的結構描述dbo與所歸屬的檔案群組PRIMARY,

而第三種不特別指定欄位為NULL或是NOT NULL則預設為NULL。

CREATE TABLE TABLE_NAME 
  ( 
     id_a   INT NULL, 
     name_a NVARCHAR(50) NULL 
  ) 

go

 

CREATE TABLE [dbo].[TABLE_NAME2] 
  ( 
     [id_a]   [INT] NULL, 
     [name_a] [NVARCHAR](50) NULL 
  ) 
ON [PRIMARY] 

go

 

CREATE TABLE TABLE_NAME3 
  ( 
     id_a   INT, 
     name_a NVARCHAR(50) 
  ) 

go

 

三、設定主鍵

單一欄位設定主鍵

CREATE TABLE TABLE_NAME 
  ( 
     id_a   INT PRIMARY KEY, 
     name_a NVARCHAR(50) NULL 
  ) 

go

 

弱實體設定主鍵的方式

CREATE TABLE TABLE_NAME 
  ( 
     id_a      INT, 
     name_a    NVARCHAR(50), 
     address_a NVARCHAR(50) NULL, 
     PRIMARY KEY (id_a, name_a) 
  ) 

go

弱實體設定主鍵錯誤的方式

CREATE TABLE TABLE_NAME 
  ( 
     id_a      INT PRIMARY KEY, 
     name_a    NVARCHAR(50) PRIMARY KEY, 
     address_a NVARCHAR(50) NULL 
  ) 

go

 

四、設定外來鍵

先行準備父資料表

CREATE TABLE [dbo].[CUSTOMER2] 
  ( 
     [customer_id] [TINYINT] NOT NULL, 
     [address]     [NVARCHAR](50) NULL, 
     [cell]        [NCHAR](10) NULL, 
     PRIMARY KEY (customer_id) 
  ) 

go

再於子資料表設定外來鍵,並設定關連性

CREATE TABLE [dbo].[ORDER2] 
  ( 
     [order_id]    [SMALLINT] NOT NULL, 
     [customer_id] [TINYINT] REFERENCES CUSTOMER2(customer_id)
     ON UPDATE CASCADE 
     ON DELETE CASCADE, 
     [outitem]     [DATETIME2](7) NOT NULL, 
     PRIMARY KEY ([order_id]) 
  ) 

go

可於物件總管裡查看ORDER2索引鍵的FK是否已經成功設定

 

五、IDENTITY自動累加

語法為:IDENTITY [ (seed , increment) ]  

seed為起始值、increment是每次新增累加值,預設值為(1,1)

CREATE TABLE TABLE_1 
  ( 
     id  INT IDENTITY(10, 2) NOT NULL PRIMARY KEY, 
     name VARCHAR(50) NULL
  );

INSERT INTO TABLE_1 (name) VALUES ('Bob');
SELECT * FROM TABLE_1;
INSERT INTO TABLE_1 (name) VALUES ('Tom');
SELECT * FROM TABLE_1;
INSERT INTO TABLE_1 (name) VALUES ('Bill');
SELECT * FROM TABLE_1;
GO

觀察其結果可知,起始值從10開始,每次新增自動加2,

而且insert每一筆記錄時並不用特別指定id。