目录

  • 1 第一单元  SQL基本命令
    • 1.1 学习系统环境搭建
    • 1.2 新建课程目录
    • 1.3 第一课时   SQL 简介
    • 1.4 第二课时  ​SQL 语法
    • 1.5 第三课时 MySQL 列的约束
    • 1.6 第四课时  SQL SELECT 语句
    • 1.7 第五课时  SQL WHERE 子句(1)
    • 1.8 第六课时  ​SQL WHERE 子句(2)
    • 1.9 第七课时  SQL AND & OR 运算符
    • 1.10 第八课时  ​SQL ORDER BY 关键字
    • 1.11 第九课时  SQL INSERT INTO 语句
    • 1.12 第十课时  SQL DELETE 语句
    • 1.13 第十一课时  SQL UPDATE 语句
  • 2 第二单元  SQL进阶
    • 2.1 第一课时  ​SQL SELECT TOP 子句
    • 2.2 第二课时  SQL LIKE 操作符
    • 2.3 第三课时 SQL 通配符
    • 2.4 第四课时 SQL IN 操作符
    • 2.5 第五课时 SQL BETWEEN 操作符
    • 2.6 第六课时 SQL 别名
    • 2.7 第七课时 SQL 连接(JOIN)
    • 2.8 第八课时 SQL INNER JOIN 关键字
    • 2.9 第九课时 SQL LEFT JOIN 关键字
    • 2.10 第十课时 SQL RIGHT JOIN 关键字
    • 2.11 第十一课时 ​SQL FULL OUTER JOIN 关键字
    • 2.12 第十二课时 SQL UNION 操作符
    • 2.13 第十三课时 SQL SELECT INTO 语句
    • 2.14 第十四课时 SQL INSERT INTO SELECT 语句
    • 2.15 第十五课时 SQL CREATE DATABASE 语句
    • 2.16 第十六课时 SQL CREATE TABLE 语句
    • 2.17 第十七课时 SQL 约束(Constraints)​
    • 2.18 第十八课时 SQL NOT NULL 约束
    • 2.19 第十九课时 ​SQL UNIQUE 约束
    • 2.20 第二十课时 SQL PRIMARY KEY 约束
    • 2.21 第二十一课时 SQL FOREIGN KEY 约束
    • 2.22 第二十二课时 SQL CHECK 约束
    • 2.23 第二十三课时 SQL DEFAULT 约束
    • 2.24 第二十四课时 SQL CREATE INDEX 语句
    • 2.25 第二十五课 SQL 撤销索引、撤销表以及撤销数据库
    • 2.26 第二十六课时 SQL ALTER TABLE 语句
    • 2.27 第二十七课时 SQL AUTO INCREMENT 字段
    • 2.28 第二十八课时 SQL 视图(Views)
    • 2.29 第二十九课时 SQL Date 函数
    • 2.30 第三十课时 SQL NULL 值
    • 2.31 第三十一课时 SQL NULL 函数
    • 2.32 第三十二课时 ​SQL 通用数据类型
    • 2.33 第三十三课时 SQL 用于各种数据库的数据类型
  • 3 第三单元  SQL函数
    • 3.1 第一课时 SQL 函数
    • 3.2 第二课时 SQL AVG() 函数
    • 3.3 第三课时 SQL COUNT() 函数
    • 3.4 第四课时 SQL FIRST() 函数
    • 3.5 第五课时 SQL LAST() 函数
    • 3.6 第六课时 SQL MAX() 函数
    • 3.7 第七课时 SQL MIN() Function
    • 3.8 第八课时 SQL SUM() 函数
    • 3.9 第九课时 SQL GROUP BY 语句
    • 3.10 第十课时 SQL HAVING 子句
    • 3.11 第十一课时 SQL EXISTS 运算符
    • 3.12 第十二课时 SQL UCASE() 函数
    • 3.13 第十三课时 SQL LCASE() 函数
    • 3.14 第十四课时 SQL MID() 函数
    • 3.15 第十五课时 SQL LEN() 函数
    • 3.16 第十六课时 SQL ROUND() 函数
    • 3.17 第十七课时 SQL NOW() 函数
    • 3.18 第十八课时 SQL FORMAT() 函数
  • 4 附录
    • 4.1 SQL 命令速查
    • 4.2 SQL 主机
    • 4.3 MySQL 导出数据
    • 4.4 MySQL 导入数据
    • 4.5 MySQL 函数速查
    • 4.6 MySQL 运算符速查
  • 5 学生论坛
    • 5.1 杨汶茜带我们学SQL
    • 5.2 冯凯教我们学技术
    • 5.3 闫心羽的普通话很标准
    • 5.4 我也来试试
  • 6 基于SQL的会计核算流程
    • 6.1 会计核算流程梳理
      • 6.1.1 传统会计核算流程分析
      • 6.1.2 基于SQL的会计核算流程分析
    • 6.2 基于SQL的会计核算案例
      • 6.2.1 案例企业经济业务资料
      • 6.2.2 SQL会计核算流程实现
  • 7 基于SQL的财务分析案例
    • 7.1 收集整理企业财报数据
    • 7.2 创建数据库及财报数据表
      • 7.2.1 创建财报数据库
      • 7.2.2 创建资产负债表
      • 7.2.3 创建利润表
      • 7.2.4 企业财务效率分析
    • 7.3 企业财务效率分析
      • 7.3.1 偿债能力分析
      • 7.3.2 营运能力分析
      • 7.3.3 盈利能力分析
      • 7.3.4 发展能力分析
      • 7.3.5 财务效率综合评价
    • 7.4 企业财务综合分析
      • 7.4.1 销售净利率
      • 7.4.2 总资产周转率
      • 7.4.3 总资产净利率
      • 7.4.4 权益乘数
      • 7.4.5 净资产收益率
      • 7.4.6 杜邦体系综合分析
  • 8 视图
    • 8.1 创建与使用视图
    • 8.2 更新视图
      • 8.2.1 在视图中插入数据
      • 8.2.2 利用视图更新数据
      • 8.2.3 利用视图删除数据
    • 8.3 删除视图
  • 9 数据库规范化
    • 9.1 数据库规范化的基本原理及方法
      • 9.1.1 数据库设计规范化级别
      • 9.1.2 规范化的步骤及其实现
      • 9.1.3 规范化的优点与应用考量
      • 9.1.4 关于反规范化
    • 9.2 数据库规范化应用案例
      • 9.2.1 存货管理库建表规范化
      • 9.2.2 计算发出存货单价
      • 9.2.3 查询存货本期出库完整信息
      • 9.2.4 规范化案例分析
第三课时 MySQL 列的约束

MySQL 表列的约束(Constraints)


MySQL 约束用于规定表中的数据规则。

如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

SQL CREATE TABLE + CONSTRAINT 语法

CREATE TABLE table_name

(

column_name1 data_type(sizeconstraint_name,

column_name2 data_type(sizeconstraint_name,

column_name3 data_type(sizeconstraint_name,

....

);

在 SQL 中,我们有如下约束:

NOT NULL - 指示某列不能存储 NULL 值。

UNIQUE - 保证某列的每行必须有唯一的值。

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

CHECK - 保证列中的值符合指定的条件。

DEFAULT - 规定没有给列赋值时的默认值。

在后面的课时,我们来详细讲解每一种约束。


列约束的演示  


MySQL NOT NULL 约束


在默认的情况下,表的列接受 NULL 值。


NOT NULL 约束强制列不接受 NULL 值。

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

下面的 SQL 强制 "ID" 列、 "LastName" 列以及 "FirstName" 列不接受 NULL 值:

实例

CREATE TABLE Persons

(

ID int NOT NULL,    

LastName varchar(255) NOT NULL,    

FirstName varchar(255) NOT NULL,    

Age int 

);

添加 NOT NULL 约束

在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示:

实例

ALTER TABLE Persons 

MODIFY Age int NOT NULL;


删除 NOT NULL 约束

在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束如下所示:

实例

ALTER TABLE PersonsMODIFY Age int NULL;



非空列约束演示


MySQL PRIMARY KEY 约束


PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。


CREATE TABLE 时的 

SQL PRIMARY KEY 约束

下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 PRIMARY KEY 约束:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)


如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT 

pk_PersonID 

PRIMARY KEY (P_Id,LastName)

)

注释:在上面的实例中,只有一个主键 PRIMARY KEY(pk_PersonID)。然而,pk_PersonID 的值是由两个列(P_Id 和 LastName)组成的。


ALTER TABLE 时的 SQL PRIMARY KEY 约束

当表已被创建时,如需在 "P_Id" 列创建 PRIMARY KEY 约束,请使用下面的 SQL:

ALTER TABLE Persons

ADD PRIMARY KEY (P_Id)

如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:

ALTER TABLE Persons

ADD CONSTRAINT pk_PersonID 

PRIMARY KEY (P_Id,LastName)

注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。


撤销 PRIMARY KEY 约束

如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Persons

DROP PRIMARY KEY


主键列约束演示


MySQL UNIQUE 约束


UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。


CREATE TABLE 时的 SQL UNIQUE 约束

下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 UNIQUE 约束:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

UNIQUE (P_Id)

)


如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

)



ALTER TABLE 时的 SQL UNIQUE 约束

当表已被创建时,如需在 "P_Id" 列创建 UNIQUE 约束,请使用下面的 SQL:

ALTER TABLE Persons

ADD UNIQUE (P_Id)

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

ALTER TABLE Persons

ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)



撤销 UNIQUE 约束

如需撤销 UNIQUE 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Persons

DROP INDEX uc_PersonID


唯一列约束演示

MySQL DEFAULT 约束


DEFAULT 约束用于向列中插入默认值

如果没有规定其他的值,那么会将默认值添加到所有的新记录。


CREATE TABLE 时的 SQL DEFAULT 约束

下面的 SQL 在 "Persons" 表创建时在 "City" 列上创建 DEFAULT 约束:

CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes'
)

通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

CREATE TABLE Orders
(
    O_Id int NOT NULL,
    OrderNo int NOT NULL,
    P_Id int,
    OrderDate date DEFAULT GETDATE()
)



ALTER TABLE 时的 SQL DEFAULT 约束

当表已被创建时,如需在 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:

ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

撤销 DEFAULT 约束

如需撤销 DEFAULT 约束,请使用下面的 SQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT

默认列约束演示


MySQL FOREIGN KEY 约束


一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)

让我们通过一个实例来解释外键。请看下面两个表:

"Persons" 表:

P_Id LastName  FirstName Addreww          City

1      Hansen        Ola            Timoteivn 10  Sandnes

2      Svendson    Tove          Borgvn 23      Sandnes

3      Pettersen     Kari           Storgt 20        Stavanger


 "Orders" 表:

O_ld          OrderNo         P_Id

1                77895             3

2               44678              3

3               22456              2

4               24562              1


请注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。

"Persons" 表中的 "P_Id" 列是 "Persons" 表中的 PRIMARY KEY。

"Orders" 表中的 "P_Id" 列是 "Orders" 表中的 FOREIGN KEY。

FOREIGN KEY 约束用于预防破坏表之间连接的行为。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。


CREATE TABLE 时的 SQL FOREIGN KEY 约束

下面的 SQL 在 "Orders" 表创建时在 "P_Id" 列上创建 FOREIGN KEY 约束:

CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,PRIMARY KEY (O_Id),

FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

)

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:

CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)

)


ALTER TABLE 时的 SQL FOREIGN KEY 约束

当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

ALTER TABLE Orders

ADD FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)

如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:

ALTER TABLE Orders

ADD CONSTRAINT fk_PerOrders

FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)



撤销 FOREIGN KEY 约束

如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:


ALTER TABLE Orders

DROP FOREIGN KEY fk_PerOrders


外键列约束演示


请同学们运用本课时所学的知识,分析之前创建的智能家电公司《普通日记账表》结构是否合理,如果再配套增设一个《会计科目表》,智能家电公司这两张表应该如何进行列约束才比较合理?