SQL Server
2021 年 9 月 7 日
【SQL Server】第二章、T-SQL语句
【SQL Server】第二章、T-SQL语句
第二章、T-SQL语句
1、T-SQL 语句简介
Transact-SQL简称 T-SQL 语言是结构化查询语言的增强版本,与多种 ANSI SQL 标准兼容,而且在标准的基础上还进行了许多扩展。Transact-SQL代码是 SQL Server的核心,可以实现关系数据库中的查询、操作和添加功能。
在 SQL Server 中,所有与服务器的实例的通信,都是通过发送 T-SQL 语句到服务器来实现的。
对数据库的插叙和修改操作的语言叫做 SQL ,其含义是结构化查询语言(Structured Query Language)。SQL 有许多不同的类型,有三个主要的标准:
- ANSI (美国国家标准机构)SQL
- 对 ANSI SQL 修改后的1992年采纳的标准,成为 SQL
92或 SQL2 - 最近的 SQL
99标准,SQL99从 SQL2扩充而来的并增加了对象关系特征和许多其他新功能
Transact-SQL 语言是SQL的一种实现形式,它包含了标准的SQL语言部分。标准的SQL语句几乎完全可以在 Transact-SQL 语言中执行,因为包含了这些标准的SQL语言来编写程序和脚本,所以提高了他们的可移植性。Transact-SQL 语言在具有 SQL 的主要特点的同时,还增加了变量、运算符、函数、流程控制和注释等语言的元素,使得Transact-SQL更加强大。
T-SQL 语句主要分为四大类:
- 数据操作语句
- 数据定义语句
- 数据控制语句
- 附加的语言元素
T-SQL 语法约定
约定 | 用于 |
---|---|
大写 | Transact-SQL关键字 |
斜体 | 用户提供的Transact-SQL语法参数 |
粗体 | 数据库名、表名、列名、索引名、存储过程、实用工具、数据类型名以及必须按所显示的原样输入的文本 |
下划线 | 指示当语句中省略了带下划线的值的字句时,应用的默认值 |
|(竖线) | 分割括号或大括号中的语法项,只能使用其中一项 |
[](发括号) | 可选语法,不要输入方括号 |
{}(花括号) | 必选语法项,不要输入花括号 |
[,…n] | 指示前面的项可以重复n次,各项之间以逗号分隔 |
[…n] | 指示前面的项可以重复n次,每一项由空格分隔 |
; | Transact-SQL语句终止符,虽然在此版本的 SQL Server 中大部分语句不需要分号,但将来的版本中需要 |
语法块的名称。此约定用于对可在语句中的多个位置使用的过长语法段或语法单元进行分组和标记。可使用语法快的每个位置,由括在尖括号内的标签指示:<标签> |
除非另外指定,否则,所有数据库对象名的Transact-SQL引用将由四部分名称组成,格式如下:
Server_name.[database_name].[schema_name].object_name
|databse_name.[schma_name].object_name
|schema_name.object_name
|object_name
Server_name :指定连接的服务器名称或远程服务器名称
database_name :表示如果对象驻留在SQL Server的本地实例中,则指定SQL Server数据的名称。如果对象在链接服务器中,则database_name将指定OLE DB目录。
schema_name :表示如果在SQL Server数据库中,则指定包含对象的架构的名称。如果对象在链接服务器,则schema_name将指定OLE DB架构名称。
object_name :表示对象的名称。
引用某个特定对象时,不必总是指定服务器、数据库和架构供SQL Server数据库引擎表示该对象。但是,如果摘不到对象,就会返回错误消息。
除了使用时完全限定引用时的四个部分,在引用时若要省略中间节点,需要使用句点来指示这些位置。
引用对象名格式 | 说明 |
---|---|
Server.database.schema.object | 四个部分的名称 |
Server.database.object | 省略架构名称 |
Server.schema.object | 省略数据库名称 |
Server…object | 省略数据库和架构名称 |
Database.schema.object | 省略服务器名称 |
Database..object | 省略服务器和架构名称 |
Schema.object | 省略服务器和数据库名称 |
object | 省略服务器、数据库和架构名称 |
2、如何给标识符命名
如何给标识符起名
创建或引用数据库实例,如表、索引、约束等时,必须遵守SQL Server的命名规范,否则可能发生错误。
标识符分类
SQL Server的所有对象,包括服务器、数据库及数据对象,如表、视图、列、索引、触发器、存储过程、规则、默认值和约束等都可以有一个标识符,对绝大多数对象来说,标识符是必不可少的,但对对象来说,是否规定标识符是可选择的。
SQL Server一共定义了两种标识符,一个是==规则标识符==,另外一个是界==定标识符==。
规则标识符
其严格遵守标识符有关的规定,所以在Transact-SQL中凡是规则标识符都不必使用界定符,对于不符合标识符格式的标识符要使用界定符[]或者单引号”
界定标识符
界定标识符是那些使用了如[]和”等界定符号来进行位置限定的标识符,使用了界定标识符既可以遵守标识符命名规则,也可以不遵守标识符命名规则
标识符规则
- 所有的Unicode
2.0标准规定的字符,包括26英文字母 a-z 和 A-Z ,以及其他一些语言字符,如汉字。 - “==_==”、“==@==”或“==#==”
- 0,1,2,3,,5,6,7,8,9
标识符不允许是T-SQL的保留字
- ==T-SQL不区分大小写==,所以无论是保留字的大写还是小写都不允许使用
标识符内部不允许使用空格或特殊字符
某些以特殊字符开头的标识符在SQL Server中具有特定的含义。
- 如“==@==”开头的代表这是一个局部变量或是一个存储过程的参数
- 如“==#==”开头的代表这是一个临时表或存储过程
- 如“==##==”开头的代表这是一个全局的临时数据库对象
- 如“==@@==”开头的代表这是一个全局变量
无论是界定标识符,还是规则标识符只能容纳128个字符,对于本地的临时表最多还可以由116个字符。
对象命名规范
SQL Server数据库管理系统中的数据库对象名称由1-128个字符组成,不区分大小写。在一个数据库中创建了一个数据库对象后,数据库对象的前面应该有服务器名、数据库名、包含对象架构名和对象名四部分组成。
实例命名规范
==在SQL Server数据库管理系统中,默认实例的名字采用计算机名,实例的名字一般有计算名和实例名两部分组成。==
正确掌握数据库命名和引用方式是用好SQL Server数据库管理系统的前提,也便于用户理解SQL Server数据库管理系统中的其他部内容。
常量命名规范
常量也成为文字值或者标量值,时表示一个特定的数据值的符号;也可以理解为在程序运行中,其值不会发生变化的表示符号。
常量的格式取决于,其所表示的数据类型,一个常量通常有一种数据类型和长度,这二者取决于常量格式。
常量类型分类
- 数字常量
- 字符串常量
- 日期和时间常量
- 符号常量
数字常量
数字常量包括有符号和无符号的整数、定点数和浮点小数。
- Integer 整数常量,不能包含小数,只有整数
- Decimal 常量包含小数
- Float 和 real 常量,使用科学计数法表示。若要指一个数是整数还是负数,对数值常量应用“+”或“-”一元运算符。如果没有应用正负号,那么数值常量将表示整数
- Money 以前最可选的小数点和可选的货币富豪的数字字符串来表示。Money常量不使用引号括起来。$100 ¥360.23
字符常量
- 字符串常量 括在单引号内并包含字母和数字字符(a-z、A-Z、0-9)以及特殊字符,如!、@、#等等
- Unicode字符串 格式与普通字符串相似,但他前面有一个N标识符(N代表SQL
92标准中的区域语言)。N前缀必须是大写字母。如“English”,其字符串常量N“English”则是Unicode常量
日期和时间常量
日期和时间常量使用特定格式的字符日期值来表示,并且单引号括起来如’16/6/5’,‘6 December,2015’
符号常量
- 分隔符 在T-SQL分隔符有两层意思,除了引用字符串外,双引号还能用做分隔符,也就是所谓的界定符。分割标识符,是标识符的一种类型。通常将保留当作标识符并且用数据库对象的名称空值。
3、T-SQL中的注释
T-SQL中的注释有两种
- 多行注释 ==/**/==
- 单行注释 ==—==
4、标识符和变量
标识符
在T-SQL中,标识符用来识别数据库对象如数据库、表和索引。它们通过字符串表示出来,这些字符串的长度可以达到128个字符,还包含字母、数字或者字符: ==-== 、==@== 、 ==#== 、 ==$== 。 每个名称都必须以一个字母或都以一个 ==_== 、 ==@== 、 ==#== 开头。
- @开头表示一个变量
- #开头表示表名或者存储过程名,表示一个临时对象
这些规则不适用于分割标识符(也叫引用标识符),分割标识符可以将这些字符包含在内或者以其中的任意字符开头(而不是标识符自己)。
变量
变量可以保存查询结果,可以在查询语句中使用变量,也可以将变量中的值插入到数据表中,在T-SQL中变量的使用非常灵活方便,可以在任何T-SQL语句集合中声明使用,根据其生命周期,可以分为==局部变量==和==全局变量==。
全局变量
全局变量是SQL Server系统提供的内部使用的变量,其作用范围并不仅仅局限于某一程序而是任何程序均可随时调用。全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中全局变量来测试系统的设定值或者是TTransact-SQL命令执行后的状态值。在使用全局变量时应注意以下几点:
- 全局变量不是有用户程序定义的,它们是在服务器定义的
- 用只能用预选定义的全局变量,但不能修改全局变量
- 引用全局变量时,必须以标记符==@@==开头
- 局部变量的名称不能和全局变量的名称相同
SQL Server 2016 中常用的全局变量:
- ==@@CONNECTIONS SQL Server== 自上次启动以来尝试的连接数,无论连接欸是否成功
- ==@@LANGID== 返回当前使用的语言的本地标识符(ID)
- ==@@LANGUAGE== 返回当前所有的语言的名称
- ==@@LOCK_TIMEOUT== 返回当前会话的当前锁定超时时间设置(毫秒)
- ==@@MAX_CONNECTIONS== 返回SQL Server实例允许同时进行的最大用户连接数
- ==@@MAX_PRECISION== 按照服务器中的当前设置,返回decimal和number数据类型所用的精度级别。默认情况下,最大精度返回38。
- ==@@NESTLEVEL== 返回对本地服务器上执行的当前存储过程的嵌套级别(初始值为0)
- ==@@OPTIONS== 返回有关当前SET选项的信息
- ==@@PACK_RECEIVED== 返回SQL Server自上次启动后从网络读取的输入数据包的个数
- ==@@PACK_SENT== 返回SQL Server自上次启动后写入网络的输出数据包的个数
- ==@@PACKET_ERRORS== 返回自上次启动SQL Server后,在SQL Server连接上发生的网络数据包错误次数
- ==@@ROWCOUNT== 返回上次语句影响的数据行的行数
- ==@@PROCID== 返回Transact-SQL当前模块可以是存储过程、用户定义函数或存储器。不能CLR模块或进程内数据访问接口中指定@@PROCID。
查看当前SQL Server的版本和服务器名称
SELECT @@VERSION as 'SQL Server版本',@@SERVERNAME as '服务器名称'
局部变量
局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限于在程序内部。
局部变量在引用时要在其名称前加上标志“@”,而且需用DECLARE命令声明后才可以使用。
定义局部变量的形式如下:
DECLARE {@local-variable data-type}[...n]
- @local-variable 用于指定局部变量的名称,变量必须以符号“@”开头,且必须符合SQL Server的命名规范
- data-type 用于设置局部变量的数据类型及其大小。data-type可以是任何由系统提供的或用户定义的数据类型,但局部变量不能是text、ntext或image数据类型。如:
- DECLARE @MyInt int
- DECLARE @ame varchar(20),@Age int,@Phone varchar(20)
用DECLARE命令声明并创建局部变量后,会将其初始化为null,如果想要设置局部变量的值,必须用SELECT命令或者SET命令。如:
SET {@local-variable=expression} 或 SELECT {@local-variable=expression}[,...n]
DECLARE @Age INT
SET @Age=25
SELECT @Age AS '年龄'
GO
--以上代码声明了一个“Age”的整型变量,接着用SELECT 赋值为25,接着用SELECT将其输出
DECLARE @Name varchar(10)
SELECT @Name=(select 姓名 from 成绩表 where id=1)
SELECT @Name AS '姓名'
GO
5、运算符和表达式
运算符
运算符是一些符号,它用于执行算术运算、字符串链接、赋值以及字段、常量和变量之间进行比较。在 SQL Server 2016 中包含一下几类运算符:算数运算符、赋值运算符、比较运算符、逻辑运算符、连接运算符以及按位运算符。
表达式
表达式由操作符(运算符)与操作符(运算对象)所组成的式子,成为表达式。
算术运算符和表达式
有算术运算符与运算对象组成的表达式,而参与运算的对象可以是是任何数值数据类型。
算术运算符包括:
- (+)加法运算符
- (-)减法运算符
- (*)乘法运算符
- (/)除法运算符
- (%)取余运算符
加法运算符和减法运算符,也可以对datetime和smalldatetime类型的数据执行算术运算。

image-20210909095054607

image-20210909095937574
6、比较运算符

image-20210909100250659
比较运算符是用来比较两个表达式的大小,表达式可以是字符、数字和日期,其比较结果的是一个布尔值。
比较运算符测试两个表达式是否相同,除text、ntext或image数据类型的表达式外,比较运算符可以用于所有表达式。

image-20210909100139235

image-20210909100207788
7、逻辑运算符和表达式
逻辑运算符
把多个逻辑表达式连接起来测试,以获得其真实的情况。返回带有True、Falseh或Unknown值的Boolean数据类型。
- ==ALL== 如果一组的比较都为True那么就为True
- ==AND== 如果两个布尔值表达式都为True,那么就为True
- ==ANY== 如果一组的比较中任何一个为True,那么就为True
- ==BETWEEN== 如果操作数在某个范围内,那就为就为True
- ==EXISTS== 如果子查询包含一些行,那么就为True
- ==IN== 如果操作数等于表达式列表中的一个,那么就为True
- ==LIKE== 如果操作数与一种模式相匹配,那么就为True
- **==NO==**T 对任何其他布尔运算的值取反
- ==OR== 如果两个布尔值表达式中一个为True,那么就为True
- ==SOME== 如果在一组比较中,有些为True,那么就为True
表达式

image-20210909101702516

image-20210909102001164
8、连接运算符
加号(+)是字符串串联运算符,可以将两个或两个以上字符串合并成一个字符串。其他所有字符串操作都使用字符串函数进行处理。
默认情况下,对于varchar数据类型的数据,INSERT或赋值语句中,空的字符串被解释为空字符串。

image-20210909134233381
- char :固定长度,存储ANSI字符,不足的补英文半角空格
- nchar :固定长度,存储Unicode字符,不足的补英文半角空格
- varchar :可变长度,存储ANSI字符,根据数据长度自动变化
- nvarchar :可变长度,存储Unicode字符,根据数据长度自动变化
9、按位运算符
在两个表达式之间执行位操作,这两个表达式可以为整数数据类型中的任何数据类型。
运算符 | 含义 |
---|---|
& | 位于 |
| | 位或 |
^ | 位异或 |
~ | 返回数字的非 |
二进制,即只有0或者1两种取值

image-20210909153205801
10、运算符的优先级
优先级
级别 | 运算符 |
---|---|
1 | ~(位非) |
2 | *(乘)、/(除)、%(取模) |
3 | +(正/加)、-(负/减)、&(位与)、^(位异或)、|(位或) |
4 | =、>、<、>=、<>、!=、!>、!< |
5 | NOT |
6 | AND |
7 | ALL、ANY、BETWEEN、IN、LIKE、OR、SOME |
8 | =(赋值) |
当一个表达式中的两个运算符有相同的运算符优先级时,将按照它们在表达式中的位置其从左到右进行求值,还可以用括号改变优先级。
表达式
运算符和圆括号把变量、常量和函数等运算成分连接起来的有意义的式子,即使单个的常量、变量和函数也可以看成是一个表达式。
Transact-SQL表达式
根据连接表达式的运算符进行分类,可以将表达式分为==算术表达式==、==比较表达式==、==逻辑表达式==、==按位表达式==和==混合表达式==等;根据表达式的作用进行分类,可以将表达式分为字段名表达式、目标表达式和条件表达式。
11、目标表达式
字段名表达式
字段名表达式可以是单一的字段名或几个字段的组合,还可以是有字段、作用于字段的集合函数和常量的任意算术运算(+、-、*、/)组成的运算表达式。主要包括数值表达式、字符表达式、逻辑表达式和日期表达式。
目标表达式
目标表达式有四种构成方式
- *:表示选择相应基表和视图的所有字段
- <表名>:*:表示选择指定的基表和视图的所有字段
- 集函数():表示在相应的表中按集函数操作和运算
- [<表名>]字段名表达式[,<表名>.]<字段名表达式>…表示字段名表达式在多个指定的表中选择
条件表达式
常用的条件表达式有六种
- 比较大小,应用比较运算符构成表达式,主要的比较运算符有 =、>、>=、<、<=、!=、<>、!>、!<、NOt(对条件求非)
- 指定范围(NOT) BETWEEN AND运算符查找字段值在或者不在指定范围内的记录。BETWEEN后面指定范围的最小值,AND后面指定范围的最大值
- 集合(NOT)IN查询字段值属于或者不属于指定集合内的记录
字符匹配
(NOT)LIKE<匹配字符串>[ESCAPE]<换码字符>查找字段值满足<匹配字符串>中指定的匹配条件的记录。<匹配字符串>可以是一个完整的字符串,也可以包含通配符_和%,_代表任意单个字符,%代表任意长度的字符串
空值IS(NOT)NULL
查找字段值为空(不为空)的记录,NULL不能用来表示无形值、默认值、不可用值、以及去最低值或最高值。SQL规定,在含有运算符+、-*、/的算术表达式中,若有一个值是空值,则该算术表达式的值也是空值;任何一个含有NULL比较操作结果的取值都为FALSE
多重条件AND和OR
AND表达式用来查找字段值相同时满足AND相连接的查询条件的记录。OR表达式用来查询字段值满足OR连接的查询条件中任意一个的记录。AND运算符的优先级高于OR运算符。
通配符
查询时,有时无法指定一个清楚的查询条件,此时可以使用SQL通配符,通配符用来代替一个或多个字符,在使用通配符时,要与LIKE运算符一起使用。Transact-SQL常用的通配符如:
通配符 | 说明 | 例子 | 匹配值示例 |
---|---|---|---|
% | 匹配任意长度的字符,甚至包含0字符 | q%e匹配字符e前面有任意个q字符 | quite、quote |
- | 匹配任意单个字符 | _here匹配以here结尾的值 | there |
[字符集合] | 匹配字符集合中的任何一个字符 | [cq]匹配c或q | dictate |
[^] | 匹配不在括号中的任何字符 | [^abc]匹配任何不包含a、b、c的字符串 | find |
12、数据定义语句
Transact-SQL简称T-SQL语言是结构化查询语言有增强版本,与多种ANSI SQL标准兼容,而且在标准的基础上还进行了许多扩展。Transact-SQL代码是SQL Server的核心,可以实现关系数据中的查询、操作和添加功能。
数据定义语句DDL(Data Definition Language),用于描述数据库中要存储的现实世界实体的语言。
CREATE的应用
作为数据库操作语言中非常重要的一部分,用于创建数据库、数据表以及约束等。
创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理,创建数据库时需要指定数据库的名称、文件名称、数据文件大小、初始化大小、是否自动增长等内容。
CREATE DATABASE database_name
[ON [PRIMARY]]
NAME=logical_file_name
[,NEWNAME=new_logical_name]
[,FILENAME={'os_file_name'|'filestream_path'}]
[,SIZE=size[KB|MB|GB|TB]]
[,MAXSIZE={max_size[KB|MB|GB|TB]]|UNLIMITED}]
[,FILEGROUWTH=growth_increment[KB|MB|GB|TB|%]]
[,...n]
Database_name:数据库名称,不能与SQL Server中现有的数据库实例名称相冲突,最多可以包含128个字符。
ON:置顶显示定义用来存储数据中数据的磁盘文件。
PRIMARY:指定关联列表定义的主文件,在主文件组项中指定的一个文件将生成主文件,一个数据库只能有一个主文件。如果没有指定PRIMARY,那么CREATE DATABASE语句中列出的第一个文件将成为主文件。
NAME:指定文件的逻辑名称,引用文件时在SQL Server中使用的逻辑名称。
FILENAME:指定创建文件时由操作系统使用的路径和文件名,执行CREATE DATABASE语句前,指定路劲必须存在。
SIZE:指定数据库文件的初始化大小,如果没有主文件提供的size,数据库引擎将使用model数据库中的主文件大小。
MAXSIZE:指定文件最大容量,默认MB。max_size是整数值,入伏哦不指定max_size,则文件将不断增长直到磁盘被占满UNLIMITED表示文件一直增长到磁盘充满。
FILEGROWTH:指定文件的自动增长量,文件的FILEGROWTH设置不超过MAXSIZE设置。该值可以是MB、KB、GB、TB或百分比(%)为单位指定。默认值为MB,如果指定%则增长量大小为发生增长时文件大小的指定百分比。值为0则表示自动增长量,设为关闭。(==SIZE+FILEGROWTH<MAXSIZE==)
CREATE DATABASE test_db ON PRIMARY (
NAME ='test_db_datl',
FILENAME ='C:\cc\test_database1',
SIZE =10 MB,
MAXSIZE =100 MB,
FILEGROWTH =1 MB
)

image-20210910142423313

image-20210910142435509

image-20210910142506265
13、创建数据库表
CREATE TABLE
CREATE TABLE [database_name].[schema_name].]
table_name
{
column_name<data_type>
[NULL|NOT NULL] | [DEGAULT constant_expression]
[ROWGUIDCOL]
{PRIMARY KEY|UNIQUE} [CLUSTERED]
NONVLUSTERED
[ASC|DESC]
}[,...n]
Database_name:数据库名,不指定数据库名称时,则默认在当前数据库里创建。
Schema_name:新建表所属架构的名称,若此项为空,则默认为新表的创建者在当前架构。
Table_name:创建的数据表的名称
Column_name:数据表中的各个列的名称,列名必须唯一
Data_type:指定字段列的数据类型,可以是系统数据类型也可以是用户自定义的数据类型
NULL | NOT NULL:确定列中是否允许使用空值
DEFAULT:用于指定列的默认值
ROWGUIDCOL:指定新列是行GUID列。对于每个表,只能将其其中一个uniqueidentifier列指定为ROWGUIDCOL列
PRIMARY KEY:主键约束,通过唯一索引对给定的一列或多列强制实例完整性的约束。每个表只能创建一个PRIMARY KRY约束。PRIMARY KEY约束中定义的所有列都必须定为NOT NULL
UNIQUE:唯一性约束,该约束通过唯一索引为一个多个指定列提供实体完整性。一个表可以有多个UNIQUE约束。
CLUSTERED | NONCLUSTERED:指示为当PRIMARY KEY或UNIQUE约束创建聚集索引还是非聚集索引。==PRIMARY KEY约束默认为CLUSTERED ,UNIQUE约束默认为NONCLUSTERED==。在创建CREATE TABLE语句中,可只为一个约束指定CLUSTERED。如果在为UNIQUE约束指定CLUSTERED的又指定了PRIMARY KEY约束,则PRIMARY KEY默认为NONCLUSTERED。
[ASC | DESC]:指定加入到表约束中的一列或多列的排序顺序,ASC为升序排列,DESC为降序排列,默认ASC。
CREATE TABLE Table1
(
id INT PRIMARY KEY,
name VARBINARY(20) NOT NULL,
tuition MONEY NOT NULL,
course VARBINARY(30) NULL
)

image-20210910150103433
14、修改数据库或表
修改数据库
ALTER DATABASE database_name
{
ADD FILE <filespec> [,...n] [TO FILEGROUP{filegroup_name}]
|ADD LOG FILE <filespec> [,..n]
|REMOVE FILE logical_file_name
|MODIFY FILE <filespec>
|MODIFY NAME=new database_name
|ADD FILEGROUP filegroup_name
|REMOVE FILEGROUP filegroup_name
|MODIFY FILEGROUP filegroup_name
}
Databse_name:要修改的书库的名称
ADD FILE…TO FILEGROUP :添加新数据库文件到文件到指定的文件组中
ADD LOG FILE:添加日志文件
REMOVE FILE:从SQL Server的实例中删除逻辑文件说明并删除物理问价。除非文件为空,否则无法删除文件
MODIFY FILE:修改指定数据库文件,必须在中指定‘NAME,以标识要修改的文件。如果制定了SIZE,那么新大小必须要比文件当前大小还要大。
MODIFY NAME:使用指定的名称重命名数据库
ADD FILEGROUP:向数据库中添加文件组
REMOVE FILEGROUP:从数据库中删除
MODIFY FILEGROUP:通过将状态设置为READ_ONLY或READ_WRITE,将文件组设置为数据库的默认文件组或者更改文件组名称来修改文件组。
文件组
SQL文件组就是文件的逻辑集合,他的目的是为勒方便数据的管理和分配。文件组可以把指定文件组合在一起。在首次创建数据库,或者以后将更多文件添加到数据库时,可以创建文件组。但是,一个文件不能是多个文件组的成员。
有三种类型的文件组:
- 主文件组:这些文件组包含主数据文件以及任何其他没有放入其他文件组的文件。系统表的所有页都从主文件组分配。
- 用户自定义文件组:改文件组是CREATE DATABASE或ALTER DATABASE语句中的FILEGROUP关键字,或在SQL Server企业管理器内的“属性”对话框上指定的任何文件组
- 默认文件组:默认文件组包含在创建时没有指定文件组的所有表和索引的页。在每个数据库中,每次只能有一个文件组是默认文件组。如果没有指定默认文件,则默认文件组是主文件组。最多可以为每个数据库创建256个文件组。文件组只能包含数据文件。
注意:==事务日志不能是文件组的一部分==
特点
- 一个数据库至少一个文件组,当数据库创建成功后,将自动创建文件组(primary文件组)
- 文件组只能存放数据文件(mdf、ndf),ldf文件不能放入到文件组中
- 一旦文件加入到文件组,不能切换文件组
添加文件组

image-20210910153851815

image-20210910153902043
ALTER DATABASE test_db
ADD FILEGROUP THIRD

image-20210910153945022
向文件组添加文件
ALTER DATABASE test_db
ADD FILE (
NAME ='test_db3', --逻辑文件吗
FILENAME ='C:\cc\test_db3.mdf', --物理量文件名
SIZE =5 MB, --初始大小
MAXSIZE =100 MB, --最大大小
FILEGROWTH =5 MB --文件步长
)

image-20210910154610630

image-20210910154745349
向指定文件组添加文件

image-20210910154915992

image-20210910154947261
15、添加数据库文件组
在指定文件组创建表

image-20210916095934687

image-20210916100006957
不指定则默认放到主文件组中

image-20210916100036940

image-20210916100055388
create table test_db.dbo.new_table3(
id INT primarykey,
name varchar(10) null,
)on second;
更改数据库属性默认文件组,之后创建表不指定文件组则会指向默认文件组中

image-20210916100215954
添加文件组
alter database dataname
add filegroup filegroup_name
向文件组中添加文件

image-20210916095653350

image-20210916095724629

image-20210916095752725
ALTER DATABASE dataname
ADD FILE(
...
)
如
ALTER DATABASE test_db
ADD FILE
(
NAME=testdata3,
FILENAME='C:\cc\c.mdf',
SIZE=5MB,
MAXSIZE=100MB,
FILEGROWTH=5MB
)TO FILEGROUP SECOND;
16、数据库添日志文件和行数据文件
数据库添加日志文件

image-20210916100433982

image-20210916100541311

image-20210916100904812
移除

image-20210916101646139
数据库添加行数据文件

image-20210916101231717
移除
==指定逻辑文件名,因为逻辑文件名不可以重复==

image-20210916101455303
17、修改数据库文件
修改数据库行文件

image-20210916101808441

image-20210916102238204

image-20210916102225412

image-20210916102328525
修改数据库日志文件

image-20210916102542901
18、删除表、数据库以及修改
ALTER:修改字段属性
ADD:表示向表中添加新的字段列,后面可以跟多个字段的定义信息,多个字段之间使用逗号隔开
DROP:删除表中的字段,可以同时删除多个字段,多个字段之间使用逗号隔开
DROP删除指定表
DROP TABLE 表名
注意,删除表的同时,表的定义和表中的数据、索引和视图也会被删除,因此在删除表之前,最好对表中的数据进行备份。如果要删除的表,是其他的参照表,此表无法删除。

image-20210916142305982
DROP删除指定数据库
DROP DATABASE 数据库名

image-20210916142334507
修改表
可以通过ALTER语句把已定义好的表,进行重新修改

image-20210916142521809

image-20210916142632635

image-20210916143033962

image-20210916143145588
删除列

image-20210916144704699
19、重命名表、数据库
重命名表

image-20210916144728217

image-20210916144927499
重命名列

image-20210916145055985
复制整张表
select * into new_table from old_table

image-20210916145350088

image-20210916150904594
20、数据操作语句
数据操作语句DML
Data Manipulation Language其中包括数据库插入语句、数据更改语句、数据插入语句、数据更改语句。
数据插入语句-INSERT
向已经创建好的数据表中插入记录。可以一次性插入一条或多条记录。
INSERT INTO table_name(column_list) VALUES(value_list)
table_name :指定要插入记录的表名
column_list :指定要插入数据的那些列
value_list :指定每个列对应插入的数据
注意:插入时,字段和数据值的数量必须相同,value_list中的这些值可以是DEFAULT、NULL或者表达式。DEFAULT表示插入该列在定义时的默认值:NULL表示插入控制;表达式将插入表达式计算后的结果。

image-20210916152147569
数据更改-UPDATE
对现有表数据进行更改

image-20210916153514439

image-20210916153647734
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者: 52Hz 发表日期:2021 年 9 月 7 日