SQL含义
SQL是结构化查询语言(Structured Query Language) 的英文缩写,是一种用于管理关系型数据库,并与数据库
中的数据进行通讯的计算机语言。SQL 与RDBMS协同工作,来定义数据库的结构、存储数据、操纵数据、获取数
据、控制对数据的访问以及确保数据的完整性。
SQL语句
类型 | 作用 |
---|
数据定义语言(DDL) | 创建,删除,修改,定义数据库和表 |
数据查询语言(DQL) | 检索数据 |
数据操作语言(DML) | 增,删,改数据 |
数据控制语言(DCL) | 创建,删除,修改用户,管理用户操作范围(权限) |
数据类型
整数数据类型
数据类型 | 描述 | 存储 |
---|
bigint | 长整型,取值范围从-2^63 到2^63-1 | 8 bytes |
int | 整型,取值范围从-2^31 到2^31-1 | 4 bytes |
smallint | 短整型,取值范围从-2^15 到2^15-1 | 2 bytes |
tinyint | 微整型,取值范围从0到255 | 1 bytes |
浮点数据类型
数据类型 | 描述 | 存储 |
---|
decimal(m,d)和numeric | 带固定精度和小数位的数据数据类型 | |
float(m,d) | 多精度浮点型,占用的字节根据其小数的位数而定 | |
real(m,d) | 单精度浮点型 | 4 bytes |
货币数据类型
数据类型 | 存储 |
---|
smallmoney | 4 bytes |
money | 8 bytes |
Character字符串类型
数据类型 | 描述 | 存储(max) |
---|
char(n) | 固定长度的字符串 | 8000 bytes |
varchar(n) | 可变长度的字符串 | 8000 bytes |
varchar(max) | 可变长度的字符串 | 1073741824 bytes |
text | 可变长度的字符串 | 2GB |
char:定长字符串,不论存储字符串的长度是多少,保存时占用文件的大小永远是该类型指定的最大值
varchar:可变长字符串,存储数据时会按照数据的大小自动调整所占用的存储空间,但注意只能往小收
缩,不能超过该类型指定的最大长度。
Unicode字符串类型
数据类型 | 描述 | 存储(max) |
---|
nchar(n) | 固定长度的Unicode数据 | 4000 bytes |
nvarchar(n) | 可变长度的Unicode数据 | 4000 bytes |
nvarchar(max) | 可变长度的Unicode数据 | 36870912 bytes |
ntext | 可变长度的Unicode数据 | 2 GB |
varchar和nvarchar的区别:
一般来说,如果含有中文字符,用nchar/nvarchar,
如果纯英文和数字,用char/varchar
它们的区别概括成:
CHAR,NCHAR定长,速度快,占空间大,需处理
VARCHAR,NVARCHAR,TEXT不定长,空间小,速度慢,无需处理
NCHAR、NVARCHAR、NTEXT处理Unicode码
Binary类型数据类型
数据类型 | 描述 | 存储(max) |
---|
Bit | 0,1或NULL | |
Binary(n) | 固定长度的二进制数据 | 8000 bytes |
vartinany(n) | 可变长度的二进制数据 | 8000 bytes |
vartinary(max) | 可变长度的二进制数据 | 2 bytes |
image | 可变长度的二进制数据 | 2 GB |
bit:也称为逻辑数据类型,在java或C #中指Boolean的作用,负责存储0或1的值
日期和时间数据关型
数据类型 | 描述 | 存储 | 数据格式 |
---|
datetime | 从1753年1月1日到9999年12月31日,精度为333毫秒。 | 8 byes | yyyy -MM-dd hh:mm:ss. xxx |
datetme2 | 从1753年1月1日到9999年12月31日,精度为100纳秒。 | 6-8 bytes | yyy-MM-dd hh:mm: ss. nnnnnn |
smaldatetime | 从1900年1月1日到2079年6月6日,精变为1分钟。 | 4 byes | |
date | 仅存储日期。从0001年1月1日到9999年12月31 日。 | 3 bytes | yyyy-MM-dd |
time | 仅存储时间。精度为100纳秒。 | 3-5 bytes | hh: mm: ss. nnnnnnn |
datetmeoffset | 与daletme2相同,外加时区偏移。 | 8-10 bytes | |
timestamp | 存储唯一-的数字。每当创建或修改某行时。该数字会更新。timestamp 基于内部时钟。对timestamp应真实时间。每个表只能有一个tmestamp变量。 | | |
数据索引
索引的分类
SQL SERVER中有多种索引类型。
1. 按存储结构区分:“聚集索引(又称聚类索引,簇集索引)”, “分聚集索引(非聚类索引,非簇集索引)”。
2. 按数据唯一性区分:“唯一索引”,“非唯一索引”。
3. 按键列个数区分:“单列索引”,“多列索引”。
聚集索引
1.聚集索引是一种对磁盘上实际数据重新组织以按指定的一列或多列值排序
2.由于聚集索引是给数据排序,不可能有多种排法,所以一个表只能建立一个聚集索引。科学统计建立这样的素引需要至
少相当与该表1 20%的附加空间,用来存放该表的副本和索引中间页,但是他的性能几乎总是比其它索引要快。
非聚集索引
1.sqlserver默认情况下建立的索引是非聚集索引,他不重新组织表中的数据,而是对每一行存储索引列值并用一个指针指
向数据所在的页面。对查取数据的效率也是具有的提升空间,而不需要全表扫描。
3.一个表可以拥有多个非聚集索引,每个非聚集索引根据索引列的不同提供不同的排序顺序。
管理索引
创建索引
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210503230039843.png#pic_center)
UNIQUE : 用于指定为表或视图创建唯一索引,即不允许存在索引值相同的两行。
CLUSTERED: 用于指定创建的索引为聚集索引。
NONCLUSTERED : 用于指定创建的索引为非聚集索引。
index_name: 用于指定所创建的索引的名称。
table: 用于指定创建索引的表的名称。
view: 用于指定创建索引的视图的名称。
ASCIDESC : 用于指定具体某个索引列的升序或降序排序方向。
Column: 用于指定被索引的列。
PAD_ INDEX : 用于指定索引中间级中每个页(节点).上保持开放的空间。
FILLFACTOR = fillfactor : 用于指定在创建索引时,每个索引页的数据占索引页大小的百分比, fillfactor的值为1到100
IGNORE_ DUP. _KEY : 用于控制当往包含于一个唯一聚集索引中的列中插入重复数据时SQL Server所作的反应。
DROP_ EXISTING : 用于指定应删除并重新创建已命名的先前存在的聚集索引或者非聚集索引。
STATISTICS_ NORECOMPUTE : 用于指定过期的索引统计不会自动重新计算。
SORT_INTEMPDB: 用于指定创建索引时的中间排序结果将存储在tempdb数据库中。
ON filegroup : 用于指定存放索引的文件组。