[TOC]
# 表操作
## **創建表**
> 表的元素有:表名、表的字段
>
> 表字段的元素有:字段名、**數據類型**、字段長度、**約束**
```sql
CREATE TABLE table_name (
字段名稱 字段數據類型 [字段約束],
字段名稱 字段數據類型 [字段約束]
)
```
示例:
```sql
-- 創建表的語句
CREATE TABLE student_info (
code VARCHAR(50),
name VARCHAR(50)
)
```
## **SQL語言的注釋**
單行注釋:用`--`表示注釋部分的內容
多行注釋:`/* 注釋內容 */`
## **SQL Server 字段數據類型**
> 主要分為:數值、日期、字符串三種類型。
數值類型:在絕大多數的應用程序中,我們使用 INT 和 DECIMAL 類型就可以了。
* INT:整型
* DECIMAL:浮點類型
* 其他數值類型:SMALLINT、NUMBERIC
日期類型:一般使用 DATETIME (用日期和時間構成)、DATE(只是表示日期),其他不常用的還有 TIME,DATETIME2(是datetime數據類型的擴展,有著更廣的日期范圍)等等。
字符串類型:一般最常使用 VARCHAR(可變長度)、CHAR(定長)、TEXT(長文本類型,例如博客文章等數據),其他不常用的還有 ntext、nchar等。
> VARCHAR 和 CHAR 的區別:例如 VARCHAR 定義的長度為 200,在使用的時候是存儲了 4 個字符長度的字符串,那么在數據庫中只會占用 4 個字符的數據空間,CHAR 是定長,無論存儲多少數據,在數據空間中都會占用到定義的長度。
在數據中,我們一般不會去存儲類似照片、視頻這樣的二進制文件,而是把這些文件在服務器中的訪問地址用字符串類型的數據進行存儲。
> 在定義數據庫字段名稱時,由于數據庫不區分大小寫,所以,一般碰到了多個單詞,我們用`_`分隔
示例:
```sql
-- 創建表的語句
CREATE TABLE student_info (
code CHAR(2),
name VARCHAR(50),
age INT,
weight DECIMAL(10, 2),
birthday DATE,
in_school DATETIME,
description TEXT
)
```
## **表的約束**
在一個完整的表中,是需要對表中的字段進行相關約束的。
> 使用約束主要是為了保證數據表中數據的合法性以及相對完整性。
約束類型包括:
* 主鍵約束(PRIMARY KEY:PK):唯一的確定在數據表中的記錄,而且主鍵約束是不能為空的,我們一般使用沒有業務含義的字段去進行主鍵定義,在SQL Server中可以使用自增長類型的主鍵或者可以使用 UUID 。
* 非空約束(NOT NULL)
* 默認值(DEFAULT)
* 唯一約束(UNIQUE KEY:UK)
* 外鍵約束(FOREIGN KEY:FK)
語法:
```sql
CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段) REFERENCES 外鍵關聯表(關聯表的字段)
```
* 自動增長(IDENTITY(1,1)),IDENTITY 的開始值是 1,每條新記錄遞增 1。
綜合示例:
```sql
-- 創建表的語句
CREATE TABLE student_info1 (
id INT IDENTITY(1,1) PRIMARY KEY,
-- 建立非空和唯一性約束
code CHAR(2) NOT NULL UNIQUE,
name VARCHAR(50) NOT NULL DEFAULT 'zhangsan',
age INT NOT NULL,
weight DECIMAL(10, 2),
birthday DATE NOT NULL,
in_school DATETIME NOT NULL,
description TEXT
)
CREATE TABLE student_account1 (
id INT IDENTITY(1,1) PRIMARY KEY,
student_id INT,
account VARCHAR(20),
password VARCHAR(20),
CONSTRAINT FK_SI_SA_01 FOREIGN KEY (student_id) REFERENCES student_info1(id)
)
```
> 主鍵是用來定義一條記錄的唯一性的,在應用程序中,一般通過 ID 找到某條記錄,主鍵是不會用過更新的。
>
> 在建立了外鍵關系的兩個表中,一般是子表通過某個字段引用主表的**主鍵**數據,如果要去對外鍵數據進行處理,一般我們會先解除外鍵關系,然后對數據處理后再加上。
>
### **創建約束圖解**
1. Primary Key 約束
創建主鍵約束可以右鍵單擊表,選擇設計

右鍵需要創建主鍵的列,然后單擊小鑰匙

2. Foreign Key 約束
右鍵單擊需要設置外鍵的列(此時的表是作為從表在外鍵中出現),選擇關系

接下來點擊添加 --> 表和列規范

在主鍵表中選擇主表和主表的主鍵列

設置完后保存即可
3. Unique 約束
右鍵單擊要設置的列選擇索引 / 鍵

然后單擊添加按鈕

選擇需要設置的列,可以是一列也可以是多列的組合

關閉并保存設置
4. Default 約束
以學生信息表為例,在表設計器中,添加性別sex,為性別 sex 列填寫默認值男


**作業1**:自學使用XMind,使用XMind整理所學知識
**作業2**:新建一個數據庫 student;
在數據庫上分別新建數據表 s (學生基礎信息表)、c (課程基礎信息表)、 s_c (學生選課信息表)
s 表如下圖

c 表如下圖

s_c 表如下圖

建好后的數據庫結構圖:
