[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 约束
创建主键约束可以右键单击表,选择设计
![](https://box.kancloud.cn/f11f3599e04f9e4ae95fd178ff4d55ed_391x274.png)
右键需要创建主键的列,然后单击小钥匙
![](https://box.kancloud.cn/b56a7e55dcc704ba944beb693df27ebd_418x378.png)
2. Foreign Key 约束
右键单击需要设置外键的列(此时的表是作为从表在外键中出现),选择关系
![](https://box.kancloud.cn/7a63b056a1c92ca446996f85a769b37c_418x383.png)
接下来点击添加 --> 表和列规范
![](https://box.kancloud.cn/e075e5905e440f2ba076a74defe343e4_988x692.png)
在主键表中选择主表和主表的主键列
![](https://box.kancloud.cn/849654152df7dd6f94ab8acaa0e35c99_664x559.png)
设置完后保存即可
3. Unique 约束
右键单击要设置的列选择索引 / 键
![](https://box.kancloud.cn/b6fce6338552835d1ba02b29feacfc23_425x286.png)
然后单击添加按钮
![](https://box.kancloud.cn/acf52a97b39f509c263fb5bbf5e8294a_810x563.png)
选择需要设置的列,可以是一列也可以是多列的组合
![](https://box.kancloud.cn/0c664b817b09b3ba04e60b7c1d96a1ab_664x512.png)
关闭并保存设置
4. Default 约束
以学生信息表为例,在表设计器中,添加性别sex,为性别 sex 列填写默认值男
![](https://box.kancloud.cn/b9ddbee92156eb74b77b9e3ba0ba840b_426x280.png)
![](https://box.kancloud.cn/60a647f3d87accb30b70ab3b083c9236_335x128.png)
**作业1**:自学使用XMind,使用XMind整理所学知识
**作业2**:新建一个数据库 student;
在数据库上分别新建数据表 s (学生基础信息表)、c (课程基础信息表)、 s_c (学生选课信息表)
s 表如下图
![](https://box.kancloud.cn/ff1ae17a22ec0ddf165a024223e3615b_401x128.png)
c 表如下图
![](https://box.kancloud.cn/d14edbf48a32a93690b3447c8a8d90f6_400x75.png)
s_c 表如下图
![](https://box.kancloud.cn/a740e0ba50c38063ed02b7940fffc2e2_405x76.png)
建好后的数据库结构图:
![](https://box.kancloud.cn/6e71bd5a55406c1ab7aa49a8545d0841_173x173.png)