Home [SQL筆記] 建立資料表 Table
Post
Cancel

[SQL筆記] 建立資料表 Table

R

  • primary key主鍵
  • identity(1,1)自動增長,初始值1,增量1
  • references外來鍵、引用外鍵
  • default(getdate())defaut預設值為當前時間 getdate()
  • check檢查限制
  • sys.objects查詢table
  • unique不重複,唯一的約束、獨一無二
  • decimal(12,2)12:總長度12(整數+小數),2:小數2位
  • char固定長度。char(10)存’AB’,占10字元。一旦建立,就占10字元
  • varchar變動長度。varchar(10)存’AB’,占2字元。只要在範圍內,存多少占多少。
  • charvarchar前面加上n,儲存unicode字串,對中文友好。
  • varchar(100)儲存100個字母,50個中文字
  • nvarchar(100)儲存100個字母,100個中文字
  • if exists判斷xxx是否存在
  • drop刪除。 drop database dbname刪db、drop table tablename刪表

[SQL筆記] char, varchar, nchar, nvarchar

切換資料庫

1
use DBTEST

建立資料表基本語法

1
2
3
4
5
create table 表名
(
    欄位名1 數據類型
    欄位名2 數據類型
)

建表(部門、職級、員工)

部門

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--判斷資料表是否存在
if exists(select * from sys.objects where name='Department' and type='U')
 drop table Department --刪除資料表

--建表(部門、職位、員工)
create table Department
(
    --部門編號,primary key主鍵, identity(1,1)自動增長,初始值1,增量1
    DepartmentId int primary key identity(1,1), --主鍵
    -- 部門名稱
    DepartmentName nvarchar(50) not null, --不能為空
    -- 路門描述
    DepartmentRemark nvarchar(max)
)
  • primary key主鍵
  • identity(1,1)自動增長,初始值1,增量1
  • not null不能為空
  • sys.objects查詢資料表
    select * from sys.objects

數據類型

  • char定長,固定大小,字元資料類型。固定大小字串資料。
  • char(10)不管裡面儲存多少數據,都占10個字元。
    (中文字兩個字元)
  • varchar變長,可變大小字串資料。
  • varchar(10)只要在範圍內,儲存就個就占用幾個,最多占用10個字元。

char一創建就占據了固定的字元長度,varchar只要在範圍內,儲存幾個就占用幾個。

  • char,varchar,text 前面加n:儲存unicode字串,對中文友好
  • varchar(100):儲存100個字母,或是50個中文字
  • nvarchar(100):儲存100個字母,或是100個中文字
1
2
3
4
5
char(10) --儲存'ab',仍然占用10個字元
varchar(10) --儲存'ab',占用2個字元
-- char,varchar,text 前面加n:儲存unicode字串,對中文友好
-- varchar(100):儲存100個字母,或是50個中文字
-- nvarchar(100):儲存100個字母,或是100個中文字

職級

Table名為關鍵字要加上[]

如果資料表名稱剛好是關鍵字,就要加上[],比如:資料表名為Rank,那就要加上[]變成[Rank]

1
2
3
4
5
6
7
8
9
create table [Rank] 
(
    --職等編號, primary key主鍵,identity(1,1)自動增長,初始值1,增量1
    RankId int primary key identity(1,1),
    --職等名稱
    RankName nvarchar(50) not null,
    --職等描述
    RankRemark nvarchar(max)
)

員工

1
2
3
4
5
6
7
8
9
10
11
12
13
create table Employee
(
    EmployeeID int primary key identity(1,1), --員工編號
    DepartmentId int references Department(DepartmentId)not null, --部門(引用外鍵)
    RankId int references [Rank](RankId) not null,--職等
    EmployeeName nvarchar(50) not null, --姓名
    EmployeeSex nvarchar(1) default('男') check(EmployeeSex='男' or EmployeeSex-'女') not null, --性別
    EmployeeBirth smalldatetime not null, --生日
    EmployyeeSalary decimal(12,2) check(EmployteeSalary>=1000 and EmployteeSalary <=1000000) not null, --月薪
    EmployeePhone varchar(20) unique not null, --電話
    EmployeeAddress varchar(300), --地址
    EmployeeAddTime smalldatetime default(getdate())--加入時間
)
  • default('男')默認值:男
  • decimal(12,2) 總長度12(整數+小數=12),小數點2位
  • unique唯一的約束,獨一無二,不重複
  • default(getdate())默認取得當前時間
  • references外來鍵

若使用 char 或 varchar,建議您:

  • 當資料行資料項目的大小一致時,請使用 char
  • 當資料行資料項目的大小變化相當大時,請使用 varchar。
  • 當資料行資料項目的大小變化相當大,且字串長度可能超出 8,000 位元組時,請使用 varchar(max)

完整sql script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
--切換資料庫
use DBTEST

--判斷資料表是否存在
if exists(select * from sys.objects where name='Department' and type='U')
 drop table Department --刪除資料表

--建表(部門、職位、員工)
create table Department
(
    --部門編號,primary key主鍵, identity(1,1)自動增長,初始值1,增量1
    DepartmentId int primary key identity(1,1), --主鍵
    -- 部門名稱
    DepartmentName nvarchar(50) not null, --不能為空
    -- 路門描述
    DepartmentRemark nvarchar(max)
)
--職等
create table [Rank] 
(
    --職等編號, primary key主鍵,identity(1,1)自動增長,初始值1,增量1
    RankId int primary key identity(1,1),
    --職等名稱
    RankName nvarchar(50) not null,
    --職等描述
    RankRemark nvarchar(max)
)
--員工
create table Employee
(
    EmployeeID int primary key identity(1,1), --員工編號
    DepartmentId int references Department(DepartmentId)not null, --部門(引用外鍵)
    RankId int references [Rank](RankId) not null,--職等
    EmployeeName nvarchar(50) not null, --姓名
    EmployeeSex nvarchar(1) default('男') check(EmployeeSex='男' or EmployeeSex='女') not null, --性別
    EmployeeBirth smalldatetime not null, --生日
    EmployeeSalary decimal(12,2) check(EmployeeSalary>=1000 and EmployeeSalary <=1000000) not null, --月薪
    EmployeePhone varchar(20) unique not null, --電話
    EmployeeAddress varchar(300), --地址
    EmployeeAddTime smalldatetime default(getdate())--加入時間
)
This post is licensed under CC BY 4.0 by the author.