笔记型文章
封面图片来源:Image by liuzishan on Freepik
本文暂停更新,欢迎交流!
初识数据库
数据库系统
- 数据库系统是采用数据库技术的计算机系统。其中包括数据库(数据)、数据库管理系统、数据库管理员(人)以及各种软件硬件。
数据库结构
数据库的三级模式
- 内模式:是关于数据在数据库内部具体的物理存储结构与存储方式的描述。一个数据库只有一个内模式。
- 模式:数据库中全体数据的逻辑结构和特征的描述。模式也称逻辑模式或概念模式。一个数据库只有一个模式。
- 外模式:是用户(包括外部应用程序)能够看见的数据的逻辑存储模式。一个数据库可以有多重外模式。
数据库二级映射
- 外模式/模式映射:同一个模式可以有任意多个外模式。对于每一个外模式,数据库系统都有一个外模式/模式映射。当模式改变时,由数据库管理员对各个外模式/模式映射做相应的改变,可以使外模式保持不变。这样,依据数据外模式编写的应用程序就不用修改,保证了数据与程序的逻辑独立性。
- 模式/内模式映射:数据库中只有一个模式和一个内模式,所以模式/内模式映射是唯一的,它定义了数据库的全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构改变时,由数据库管理员对模式/内模式映射做相应改变,可以使模式保持不变,应用程序相应地也不做变动。这样,保证了数据与程序的物理独立性。
数据模型
- 数据模型是对现实世界数据特征的抽象,用于表示现实世界中的实体及实体之间的联系,使之能存放到计算机中并进行处理。
数据模型的组成要素
- 数据结构:数据要存放到计算机里,必须规划处合适的结构。同时,也要规划出数据与数据之间的联系。
- 数据操作:对数据进行的操作。增删改查。
- 数据的约束条件:有的数据需要符合一定的条件。只有复合条件的数据才可以存入计算机中。
关系模型
- 关系模型:以二维表来描述数据。关系模型中,每个表有多个字段列和记录行,每个字段列有固定的属性(数字、字符、日期等)。关系模型数据结构简单、清晰、具有很高的数据独立性,因此是目前主流的数据库数据模型。
关系模型的基本术语
- 关系:一个二维表(表格)就是一个关系。
- 元组:就是二维表中的一行,即表中的记录。
- 属性:就是二维表中的一列,用类型和值表示。
- 域 :每个属性取值的变化范围,如性别的域为{男,女}。
关系中的数据约束如下。
- 实体完整性约束:约束关系的主键中属性值不能为空值。
- 参照完整性约束:关系之间的基本约束。用户定义的完整性约束它反映了具体应用中数据的语义要求。
数据库的创建与管理
数据库对象
- SQL Server中,数据库常常有以下几种对象:
- 表:表是包含数据库中所有数据的数据库对象,由行和列组成,用于组织和存储数据。
- 字段:表中每列称为一个字段,字段具有自己的属性,如字段类型、字段大小等,其中字段类型是字段最重要的属性,它决定了字段能够存储哪种数据。SQL规范支持5种基本字段类型∶字符型、文本型、数值型、逻辑型和日期时间型。
- 索引:索引是一个单独的、物理的数据库结构。它是依赖于表建立的,在数据库中索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。
- 视图:视图是从一张或多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种方式。表中包括几个被定义的数据列与数据行,其结构和数据建立在对表的查询基础之上。
- 存储过程:存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集合(包含查询、插入、删除和更新等操作),经编译后以名称的形式存储在SQLServer服务器端的数据库中,由用户通过指定存储过程的名字来执行。当这个存储过程被调用执行时,这些操作也会同时执行。
数据库的组成
- SQL Server 数据库主要由文件和文件组组成。数据库中的所有数据和对象(如表、存储过程和触发器)都被存储在文件中。
文件
- 主要数据文件:存放数据和数据库的初始化信息。每个数据库有且只有一个主要数据文件,默认扩展名是.mdf。
- 次要数据文件:存放除主要数据文件以外的所有数据文件。有些数据库可能没有次要数据文件,也可能有多个次要数据文件,默认扩展名是.ndf。
- 事务日志文件:存放用于恢复数据库的所有日志信息。每个数据库至少有一个事务日志文件,也可以有多个事务日志文件,默认扩展名是.ldf。
文件组。
- 文件组是SQLServer2012数据文件的一种逻辑管理单位,它将数据库文件分成不同的文件组,方便于对文件的分配和管理。
- 主文件组:包含主要数据文件和任何没有明确指派给其他文件组的文件。系统表的所有页都分配在主文件组中。
- 用户定义文件组:主要是在 CREATE DATABASE 或 ALTER DATABASE 语句中,使用FILEGROUP关键字指定的文件组。
Sql Server系统数据库
SQL Server 命名规则
- 首字母:字母大小写以及其他语言字母、'_'、'@'、'#'
- 后续字母:字母、数字、“@”符号、美元符号“$”、数字符号“#”或下划线“_”。
创建数据库
-- 这个是注释
CREATE DATABASE mybase -- 创建数据库,名为“mybase”
ON (
NAME = mybase, --数据库名
FILENAME = 'D:\TSJY\mybase.mdf', -- 存储位置与数据库文件名
SIZE = 10, -- 数据库初始大小
MAXSIZE = 100, -- 最大值
FILEGROWTH = 5 -- 增量
)
LOG ON( -- 事务日志文件
NAME = 'mybaselog', -- 日志文件名
FIRLNAME = 'F:\TSJY\mybase.ldf', -- 文件路径、文件名
SIZE = 8MB, -- 大小
MAXSIZE = 50MB, -- 最大容量
FILEGROWTH = 8MB -- 文件增长大小
)
修改数据库
手动更改
- 选中数据库右键点击属性,查看数据库属性。
- 更改文件容量等:
- 更改所有者:
ALTER
ALTER DATABASE mybase -- 更改数据库
ADD FILE( --添加文件
NAME = 'mybasendf',
FILENAME = 'D:\TSJY\mybase.ndf', -- ndf 次要数据文件
SIZE = 10mb,
MAXSIZE=100mb,
FILEGROWTH = 2mb
)
数据库重命名
exec sp_renamedb 'mr','mrsoft'
- sp_renamedb是系统存储过程
删除数据库
图形化删除
- 右键,“删除”,确定(可能需要勾选“关闭现有连接”)
DROP
DROP DATABASE 数据库名
操作数据表
数据类型
基本数据类型
用户自定义数据类型
- 图形操作
- 命令
USE mybase
-- 使用数据库 mybase
EXEC sp_addtype postcode,'CHAR(10)','NOT NULL'
-- 自定义数据类型 名称:postcode 类型:CHAR(10) 不允许为空值
数据完整性
- 表列中除了具有数据类型和大小属性之外,还有其他属性。其他属性是保证数据库中数据完整性和表的引用完整性的重要部分。
- 数据完整性是指列中每个事件都有正确的数据值。数据值的数据类型必须正确,并且数据值必须位于正确的域中。
- 比如说,如果学生表中有字段学号,由于每个学生都会有自己唯一的学号,那么可以给这个属性设置“不能为空”与“唯一”。
空值 NULL
- NULL:允许空值
- NOT NULL:不允许空值
默认值 DEFAULT
- 如果在插入行时没有指定列的值,那么默认值将指定列中所使用的值。
- DEFAULT:使用
CREATE TABLE
创建表格时对相应的列使用DEFAULT
,将常量表达式设置为默认值。 - sp_binddefault:使用CREATE DEFAULT 语句创建默认对象,然后使用sp_bindefault系统存储过程将它绑定到列上,这是一个向前兼容的功能。
特定标识 IDENTIFY
- 数据表中如果某列被指派特定标识属性(IDENTITY),系统将自动为表中插入的新行生成连续递增的编号。因为标识值通常唯一,所以标识列常定义为主键。
- IDENTIFY要求非空,所以不能与NULL同时存在。
约束
- 约束是用来定义SQL Server自动强制数据库完整性的方式。使用约束优先于使用触发器、规则和默认值。SQL Server中有以下5种约束:
- 非空(NOTNULL):使用户必须在表的指定列中输入一个值。每个表中可以有多个非空约束。
- 检查(Check):用来指定一个布尔操作,限制输入到表中的值。
- 唯一性(Unique):使用户的应用程序必须向列中输入一个唯一的值,值不能重复,但可以为空。
- 主键(Primary key):建立一列或多列的组合以唯一标识表中的每一行。主键可以保证实体完整性,一个表只能有一个主键,同时主键中的列不能接受空值。
- 外键(Foreign key):外键是用于建立和加强两个表数据之间的链接的一列或多列。当一个表中作为主键的一列被添加到另一个表中时,链接就建立了,主要目的是控制存储在外键表中的数据。
创建数据表
图形化操作
- 右键,单击“新建表”
- 添加字段
- 按下Ctrl+S保存,设置表名,点击确定。
SQL语句
USE mybase
CREATE TABLE Teachers( -- 创建表格
ID INT NOT NULL, -- ID字段,INT类型,不能为空
Name VARCHAR(50), -- Name字段,VARCHAR(50),
Age INT,
)
修改数据表
图形化操作
- 右键选择表格,点击“设计”,之后更改表格。
- 保存时可能会提示修改失败,这时候需要进入设置取消保护。具体操作网上有。
SQL语句
ALTER TABLE table1 -- 更改table1
ADD Sex CHAR(2) -- 添加sex字段
ALTER TABLE table1 -- 更改table1
DROP COLUMN sex -- 删除sex字段
删除数据表
图形化操作
- 右键,“删除”
- “确定”
SQL语句
DROP TABLE table1
数据操作
数据添加
INSERT INTO Students(id,name) -- 表名与属性
VALUES (1,'刘') -- 对应属性的值
INSERT INTO Students -- 省略属性,表名所有字段都要填写
VALUES (1,'王',20) -- 填写所有字段
数据修改
UPDATE Students -- 修改表
SET age=age+2 --让表中所有学生的年龄信息+2
UPDATE Students
SET sex='女'
WHERE name='景'
-- 修改名字叫做“景”的学生的性别信息
数据删除
DELETE
FROM Students
WHERE name='景'
-- 删除名字叫做“景”的学生的记录
约束操作
空
- 创建非空约束。
- 可以在用CREATE TABLE创建表时,使用NOT NULL关键字指定非空约束
[CONSTRAINT <约束名>] NOT NULL
- 修改非空约束。
ALTER TABLE table_name
ALTER COLUMN column_name column_type NOT NULL
-- 如果允许非空,后面写NULL就可以了
主键约束
-
可以通过定义PRIMARY KEY约束来创建主键,用于强制表的实体完整性。
-
一个表只能有一个PRIMARY KEY约束,并且PRIMARY KEY约束中的列不能接受空值。
-
由于PRIMARY KEY约束可保证数据的唯一性,因此经常对标识列定义这种约束。
-
创建主键约束
-- 创建表时创建主键约束
CREATE TABLE t(
id INT CONSTRAINT PK_ID PRIMARY KEY,
-- 将id字段设置成主键
-- CONSTRAINT PK_ID PRIMARY KEY为创建一个主键约束
-- PK_ID为用户自定义的主键约束名称
主键约束名称必须是合法的标识符。
...
)
-- 修改表时创建主键约束
ALTER TABLE t
ADD CONSTRAINT PRM_id PRIMARY KEY(ID)
-- PRM_id为用户自定义的主键约束名称
-- 将id字段设置成主键
-
修改主键约束
- 不能修改,只能删除后再重新添加
-
删除主键约束
ALTER TABLE t
DROP CONSRTAINT PRM_id
-- PRM_id为用户自定义的主键约束名称
TIME2022年11月17日
唯一约束
-
唯一约束UNIQUE用于强制实施列集中值的唯一性。同一列中任何两行都不能有相同的值。
-
主键默认唯一性,但不允许NULL作为唯一值。
-
创建唯一约束
-- 创建表时创建唯一约束
CREATE TABLE t(
ID INT CONSTRAINT UQE_id UNIQUE
)
-- 在现有表中创建唯一约束
ALTER TABLE t
ADD CONSTRAINT Unique_ID UNIQUE(ID)
-
修改唯一约束
- 不能修改,只能删除后再重新添加
-
删除唯一约束
ALTER TABLE t
DROP CONSTRAINT Unique_ID
检查约束
-
CHECK,控制放入列中的值是否符合条件
-
创建检查约束
-- 创建表时添加
CREATE TABLE t(
ID INT,
Name CHAR(50),
Sex CHAR(2) CONSTRAINT CK_Sex Check(Sex IN ('男','女')),
Age INT
)
-- 为已有表中添加
ALTER TABLE t
ADD CONSTRAINT CK_Sex CHECK (Sex IN('男','女'))
- 删除同上
默认约束
-
DEFAULT:使用默认值
-
添加默认约束
-- 创建表时添加默认约束
CREATE TABLE t(
Sex CHAR(2) CONSTRAINT Default_Sex DEFAULT '女'
)
-- 为已有表中添加默认约束
ALTER TABLE t
ADD CONSTRAINT Default_Sex DEFAULT '男' FOR Sex
- 删除默认约束:同上
外键约束
- 设置外键
CREATE TABLE t(
ID INT,
Wage FLOAT,
CONSTRAINT FKEY_ID FOREIGN KEY(ID) REFERENCES Employee(ID)
)
ALTER TABLE t
ADD CONSTRAINT F_ID FOREIGN KEY(ID) REFERENCES Employee(ID)
关系的创建与维护
一对一关系
- 一对一关系是指表A中的一条记录确实在表B中有且只有一条相匹配的记录。在一对一关系中,大部分相关信息都在一个表中。
多对一关系
- 一对多关系是最常见的关系类型,是指表A中的行可以在表B中有许多匹配行,但是表B中的行只能在表A中有一个匹配行。如果在相关列中只有一列是主键或具有唯一约束,则创建的是一对多关系。
多对多关系
- 多对多关系是指关系中每个表的行在相关表中具有多个匹配行。在数据库中,多对多关系的建立是依靠第3个表即连接表实现的,连接表包含相关的两个表的主键列,然后从两个相关表的主键列分别创建与连接表中匹配列的关系。
SQL基础
T-SQL概述
T-SQL的组成
- 数据定义语言(Data Definition Language,DDL)∶用于在数据库系统中对数据库、表、视图、索引等数据库对象进行创建和管理。
- 数据控制语言(Data Control Language,DCL)∶用于实现对数据库中数据的完整性、安全性等的控制。
- 数据操纵语言(Data Manipulation Language,DML)∶用于插入、修改、删除和查询数据库中的数据。
T-SQL 语句结构
SELECT
INTO
FROM
WHERE
GOURP BY
HAVING
ORDER BY
常量类型
数字
- 定点数:1,2,-1,-100,123.4
- 浮点数:1.5e3
字符串常量
- 字符串常量括在单引号内并包含字母数字字符(a~z、A~Z和0~9)以及特殊字符,如感叹号(!)、at符(@)和数字号(#)。
- 如果单引号中的字符串包含一个嵌入的引号,可以使用两个单引号表示嵌入的单引号。
'123','helloSQL!','This is ''A''.'
日期和时间常量
'2022-11-28'
符号常量
- 除了用户提供的常量外,SQL包含几个特有的符号常量,这些常量代表不同的常用数据值。例如,
CURRENT_DATE
表示当前的日期,类似的如CURRENT TIME
、CURRENT_TIMESTAMP
等。这些符号常量也可以通过SQL Server的内嵌函数访问。
变量
局部变量
-
局部变量是用户可自定义的变量,它的作用范围仅在程序内部。局部变量的名称是用户自定义的,命名的局部变量名要符合SQLServer2012标识符命名规则,局部变量名必须以@开头。
-
声明局部变量
DECLARE @variable_name CHAR(10)
- 局部变量的赋值
DECLARE @a INT
SELECT @a=1
PRINT @a
DECLARE @myscore INT
SELECT @myscore=Score
FROM Students
WHERE SName='小明'
DECLARE @a CHAR(20),@b INT,@C INT
SELECT @a='123',@b=234,@c=345
PRINT @a
PRINT @b
PRINT @a
DECLARE @a CHAR(20)
SET @a = 'SuiYingCode'
PRINT @a
全局变量
-
全局变量是SQLServer系统内部事先定义好的变量,不用用户参与定义,对用户而言,其作用范围并不局限于某一程序,而是任何程序均可随时调用。全局变量通常用于存储一些SQLServer的配置设定值和效能统计数据。
-
@@CONNECTIONS
- 记录自最后一次服务器启动以来,所有针对这台服务器进行的连接数目,包括没有连接成功的尝试。使用
@@CONNECTIONS
可以让系统管理员很容易地得到今天所有试图连接本服务器的连接数目。
- 记录自最后一次服务器启动以来,所有针对这台服务器进行的连接数目,包括没有连接成功的尝试。使用
-
@@CUP BUSY
- 记录自上次启动以来尝试的连接数,无论连接成功还是失败,都以ms为单位的CPU工作时间。
-
@@CURSOR_ROWS
- 返回在本次服务器连接中,打开游标取出数据行的数目。
-
@@DBTS
- 返回当前数据库中timestamp数据类型的当前值。
-
@@ERROR
- 返回执行上一条Transact-SQL语句所返回的错误代码。
- 在SQLServer服务器执行完一条语句后,如果该语句执行成功,则将返回@@ERROR的值为0,如果该语句执行过程中发生错误,则将返回错误的信息,而@@ERROR将返回相应的错误编号,该标号将一直保持下去,直到下一条语句得到执行为止。
- 由于@@ERROR在每一条语句执行后被清除并且重置,应在语句验证后立即检查它,或将其保存到一个局部变量中以备事后查看。
-
@@FETCH_STATUS
- 返回上一次使用游标FETCH操作所返回的状态值,且返回值为整型。
- 例如,到了最后一行数据后,还要接着取下一行数据等,返回的值为-2,表示返回的值已经丢失。
返回值 | 描述 |
---|---|
0 | FETCH语句成功 |
-1 | FETCH语句失败或此行不在结果集中 |
-2 | 被提取的行不存在 |
- @@IDENTITY
- 返回最近一次插入的 identity 列的数值,返回值是numeric。
- @@IDLE
- 返回以ms为单位计算SQLServer服务器自最近一次启动以来处于停顿状态的时间。
- @@IO BUSY
- 返回以ms为单位计算的SQLServer服务器自最近一次启动以来花在输入和输出上的时间。
- @@LOCK_TIMEOUT.
- 返回当前对数据锁定的超时设置。
- @@PACK_RECEIVED
- 返回 SQL Server服务器自最近一次启动以来一共从网络上接收数据分组的数目。
- @@PACK SENT
- 返回 SQL Server服务器自最近一次启动以来一共向网络上发送数据分组的数目。
- @@PROCID
- 返回当前存储过程的ID标识。
- @@REMSERVER
- 返回在登录记录中记载远程SQL Server服务器的名字。
- @@ROWCOUNT
- 返回上一条 SQL 语句所影响到数据行的数目。对所有不影响数据库数据的 SQL 语句,这个全局变量返回的结果是0。在进行数据库编程时,经常要检测@@ROWCOUNT的返回值,以便明确所执行的操作是否达到了目标。
- @@SPID
- 返回当前服务器进程的ID标识。
- @@TOTAL_ERRORS
- 返回自SQL Server服务器启动以来,所遇到读写错误的总数。
- @@TOTAL_READ
- 返回自SQL Server服务器启动以来,读磁盘的次数。
- @@TOTAL WRITE
- 返回自SQL Server服务器启动以来,写磁盘的次数。
- @@TRANCOUNT
- 返回当前连接中,处于活动状态事务的数目。
- @@VERSION
- 返回当前 SQL Server服务器安装日期、版本,以及处理器的类型。
注释符
- 标准注释:
--
两个短横杠
USE MyDataBase; -- 这个是注释
- C语言风格的注释
/*
这里是注释
注释有多行
*/
运算符
算术运算符
+-*/%
:加减乘除 取余- 连接运算符“+”用于连接两个或两个以上的字符或二进制串、列名或者串和列的混合体,将一个串加入到另一个串的末尾。
赋值运算符
DECLARE @var char(20)
SET @var='a_string'
DECLARE @var char(20)
SELECT @var='a_string'
比较运算符
>
大于<
小于=
等于>=
大于等于<=>
小于等于!=
不等于<>
不等于!>
不大于!<
不小于
逻辑运算符
运算符 | 行为 |
---|---|
ALL | 如果一个比较集中全部都是TRUE,则值为TRUE |
AND | 如果两个布尔表达式均为TRUE,则值为TRUE |
ANY | 如果一个比较集中任何一个为TRUE,则值为TRUE |
SOME | 如果一个比较集中的某些为TRUE的话,则值为TRUE |
BETWEEN | 如果操作数是在某个范围内,则值为TRUE |
EXISTS | 如果子査询包含任何行,则值为TRUE |
IN | 如果操作数与一个表达式列表中的某个相等的话,则值为TRUE |
LIKE | 如果操作数匹配某个模式的话,则值为TRUE |
NOT | 对任何其他布尔运算符的值取反 |
OR | 如果任何一个布尔表达式是TRUE,则值为TRUE |
位运算符
- 位运算符的操作数可以是整数数据类型或二进制串数据类型(image数据类型除外)范畴的。
&
:按位AND^
:按位互斥OR|
:按位OR~
:按位NOT
通配符
- 匹配指定范围内或者属于方括号所指定的集合中的任意单个字符。可以在涉及模式匹配的字符串比较(例如,LIKE和PATINDEX)中使用这些通配符。
%
:匹配任意个(≥0)字符_
:匹配单个字符[]
:匹配其中的字符[abfg]
:匹配从a、b、f、g中的一个字符[a~h]
:匹配从a~h中的一个字符
[^ ]
:匹配不属于^
后面的字符
流程控制
BEGIN-END
- 交换两个数据的值
DECLARE @x INT,@y INT
SET @x=1
SET @y=2
BEGIN
DECLARE @t INT
SET @t=@x
SET @x=@y
SET @y=@t
END
PRINT @x
PRINT @y
- BEGIN-END语句用于将多个T-SQL语句组合为一个逻辑块。当流程控制语句必须执行一个包含两条或两条以上的T-SQL语句的语句块时,使用BEGIN-END语句。
- BEGIN-END必须成对使用
IF-ELSE
DECLARE @x INT
SET @x=1
IF @x>3
PRINT 'x is greater tha 3'
ELSE
PRINT 'x is not greater than 3'
- IF-ELSE用于选择语句。IF后面跟上判断的条件。ELSE语句可以省略。
- IF-ELSE可以嵌套使用
CASE
- 选择匹配的条件,返回THEN后面的语句。如果所有条件都不满足,返回ELSE后面的语句。
- ELSE可以省略。如果省略且上面WHEN的条件都不满足,默认返回NULL
CASE
WHEN 条件1 THEN 表达值1
WHEN 条件2 THEN 表达值2
WHEN 条件3 THEN 表达值3
...
ELSE 值4
END
SELECT Sno AS "学号",Score AS "成绩",
CASE
WHEN Score>=90 THEN '优秀'
WHEN Score<90 AND Score>=80 THEN '良好'
WHEN Score<80 AND Score>=60 THEN '合格'
ELSE '不及格'
END
AS '成绩等级'
FROM SC_info
WHILE
WHILE 条件表达式
BEGIN
循环语句
END
DECLARE @n INT , @sum INT
SET @n=1
SET @sum=0
WHILE @n<=10
BEGIN
SET @sum=@sum+@n
SET @n=@n+1
END
PRINT @sum
CONTINUE
:跳过其后面的语句,返回执行WHILE那一行BREAK
:跳出WHILE循环
PRINT '输出偶数'
DECLARE @n INT
SET @n=1
WHILE @n<=100
BEGIN
SET @n=@n+1
IF @n%2=1
CONTINUE
PRINT @n
END
RETURN
RETURN 返回值
- RETURN 语句用于从查询或过程中无条件退出。RETURN 语句可在任何时候用于从过程、批处理或语句块中退出。位于RETURN之后的语句不会被执行。 |返回值|含义| |---|---| |F|程序执行成功| |-1|找不到对象| |-2|数据类型错误| |T|死锁| |-4|违反权限原则| |-5|语法错误| |-6|用户造成的一般错误| |-7|资源错误,如磁盘空间不足| |-8|非致命的内部错误| |-9|已达到系统的极限| |一10 或-11|致命的内部不一致性错误| |-12|表或指针破坏| |-13|数据库破坏| |-14|硬件错误|
GOTO
GOTO 标识符
- GOTO命令用来改变程序执行的流程,使程序跳到标识符指定的程序行再继续往下执行。语法如下:
- 标识符需要在其名称后加上一个冒号":"。
GOTO label3
label1:
PRINT '俏也不争春,只把春来报。'
GOTO label4
label2:
PRINT '已是悬崖百丈冰,犹有花枝俏。'
GOTO label1
label3:
PRINT '风雨送春归,飞雪迎春到。'
GOTO label2
label4:
PRINT '待到山花烂漫时,她在丛中笑。'
WAITFOR
- WAITFOR 指定触发器、存储过程或事务执行的时间、时间间隔或事件;还可以用来暂时停止程序的执行,直到所设定的等待时间已过才继续往下执行。
WAITFOR DELAY '00:00:10'
PRINT '延迟10秒'
WAITFOR TIME '20:15:20'
PRINT '到20:14:20继续执行'
常用命令
DBCC
- DBCC(Database Base Consistency Checker,数据库一致性检查程序)命令用于验证数据库完整性、查找错误和分析系统使用情况等。
DBCC CHECKALLOC(database_name)
检查指定数据库的磁盘空间分配结构的一致性。
DBCC SHOWCONTIG;
显示指定表的数据和索引的碎片信息
CHECKPOINT
- CHECKPOINT命令用于检查当前工作的数据库中被更改过的数据页或日志页,并将这些数据从数据缓冲器中强制写入硬盘。
DECLARE
- DECLARE命令用于声明一个或多个局部变量、游标变量或表变量。
- 显示信息
RAISEERROR
- RAISERROR命令用于在SQLServer系统中返回错误信息时同时返回用户指定的信息。
READTEXT
- READTEXT命令用于读取 text、ntext 或 image 列中的值,从指定的位置开始读取指定的字符数。
BACKUP
- 计算机在操作过程中难免出现意外,为了保证用户数据的安全性,防止数据库中的数据意外丢失,应对数据库及时进行备份。BACRIP命令用于将数据库内容或其事务处理日志备份到存储介质上(硬盘或磁带等)。
BACKUP DATABASE mybase TO disk='backup.back'
RESTORE
- 如果数据库中的数据发生丢失或被破坏,操作员应该及时还原数据库,尽可能地减小损失。RESTORE 命令用来将数据库或其事务处理日志备份文件由存储介质还原到 SQL Server 系统中。
SELECT
- 进行强大的查询工作
- 给变量赋值
DECLARE @a INT
SELECT @a=3
SELECT @a*=2
PRINT @a
-- 6
SET
- 给局部变量赋值
- 用于执行SQL命令时SQL Server的处理选项设定
- 如果要对计算列或索引视图创建和操作索引,则必须将SET选项ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_PADDING和ANSI_WARNINGS设置为ON,并将选项NUMERIC_ROUNDABORT设置为OFF。
- 当从批处理或其他存储过程执行某个存储过程时,执行该存储过程时使用的选项值,就是当前包含该存储过程的数据库中设置的选项值。
SHUTDOWN
- 立即停止SQL Server的运行
- 使用NOWAIT参数时,SHUTDOWN命令立即终止所有的用户过程,并在对每一现行的事务发生一个回滚后退出SQLServer。
- 当没有用NOWAIT参数时,SHUTDOWN命令将按以下步骤执行。
- 终止任何用户登录SQLServer。
- 等待尚未完成的Transact-SQL命令或存储过程执行完毕。
- 在每个数据库中执行CHECKPOINT命令。
- 停止SQLServer的执行。
SHUTDOWN
SHUTDOWN WITH NOWAIT
WRITETEXT
- WRITETEXT 命令允许对数据类型为text、ntext或image的列进行交互式更新。
- WRITETEXT语句不能用在视图中的text、ntext和image列上。
USE
- 使用相应的数据库
USE database_name
SQL函数的使用
聚合函数
- 聚合函数对一组值进行计算并返回单一的值,通常聚合函数会与SELECT语句的GROUPBY子句一同使用,在与GROUPBY子句使用时,聚合函数会为每一个组产生一个单一值,而不会为整个表产生单一值。
-- 求和函数
SUM(ALL expression)
SUM(DISTINCT expression)
-- 平均值
AVG(DISTINCT expression)
AVG(ALL expression)
-- 最小值
MIN(expression)
-- 最大值
MAX(expression)
-- 统计函数
COUNT (expression)
-- DISTINCT
-- 删除重复元组,返回结果集
DISTINCT(set)
数学函数
ABS()
返回指定数字表达式的绝对值PI()
返回值为圆周率POWER(a,b)
将指定的表达式乘指定次方 a^bRAND(seed)
返回0~1之间的随机float数。seed为种子,可选。ROUND(number,length)
将数字表达式四舍五入为指定的长度或精度SIGN()
返回指定表达式的零(0)、正号(+1)或负号(-1)SQUARE()
返回指定表达式的平方SQRT()
返回指定表达式的平方根SIN()
返回指定的表达式中指定弧度的三角正弦值COS()
返回指定的表达式中指定弧度的三角余弦值COT()
返回指定的表达式中指定弧度的三角余切值TAN()
返回指定的表达式中指定弧度的三角正切值
字符串函数
ASCII()
返回字符表达式最左端字符的ASCII代码值CHARINDEX(s1,s2,i)
返回字符串s1在字符串s2的起始位置。i可选。如果i的值为正数,那么就从s2的第i个位置找。LEFT(s,i)
从左边开始,取得字符串s左边i个的字符RIGHT(s,i)
从右边开始,取得字符串右边指定个数的字符LEN(s)
返回指定字符串的字符(而不是字节)个数REPLACE(s,s1,s2)
将s中子串s1替换成s2REVERSE()
返回字符表达式的反转STR()
返回由数字数据转换来的字符数据STR(float_expression[,length[,decimal]])
- float_expression:带小数点的近似数字(float)数据类型的表达式
- length:总长度。它包括小数点、符号、数字以及空格。默认值为10。
- decimal:小数点后的位数。decimal必须小于或等于16。如果decimal大于使其保持为小数点后具有16位。
SUBSTRING(string_expression,index,length)
取字符串从index开始的length个字符
日期和时间函数
- GETDATE() 返回当前系统日期和时间
- DAY() 返回指定日期中的天的整数
- YEAR() 返回指定日期中的年份的整数
- MONTH() 返回指定日期中的月份的整数
- DATEADD() 在向指定日期加上一段时间的基础上,返回新的datetime值
SELECT DATEADD(MONTH,2,'2022-12-01') AS '添加两个月'
- DATEDIFF() 返回跨两个指定日期的日期和时间边界数
SELECT DATEDIFF(DAY,'2022-12-01','2022-12-04') AS '时间差'
转换函数
CAST(expression AS data_type)
将表达式数据转换成data_type类型的数据CONVERT
元数据函数
COL_LENGTH(table_name,column_name)
回列的定义长度(以字节为单位)COL_NAME(table_id,column_id)
返回数据库列的名称,该列具有相应的表标识号和列标识号DB_NAME(database_id)
返回数据库名OBJECT_ID(object_name)
返回数据库对象标识号
USE JWGL;
SELECT
DB_NAME() AS '数据库名',
COL_NAME(OBJECT_ID('SC_info'),1) AS '第一列列名',
COL_LENGTH('SC_info','Sno') AS 'Sno 数据长度'
2022年12月4日