SQL Server
一.数据库安装
安装SQL Server2019
卸载SQL Server2019
二.数据库的创建
2.1 工具创建
2.2 T-SQL创建
master:系统数据库,它记录了SQL Server系统的所有系统级信息,还记录了所有其他数据库的存在,数据库文件的位置,SQL Server的初始化信息。
use master --选择要操作的数据库
go--批处理命令
--创建数据库
create database TestNewBase --数据库名称
on primary --主文件组
(
name='TestNewBase',--数据库主要数据文件的逻辑名
filename='J:\workspaces\01.SQL-study\TestNewBase.mdf',--主要数据文件的路径(绝对路径)
size=5MB,--数据库主要文件的初始大小
filegrowth=1MB--文件的增量
)
log on --创建日志文件
(
name='TestNewBase_log',--数据库日志文件的逻辑名
filename='J:\workspaces\01.SQL-study\TestNewBase_log.ldf',--日志文件的路径(绝对路径)
size=1MB,--数据库日志文件的初始大小
filegrowth=10%--日志文件的增量
)
go
删除数据库
--删除数据库
drop database TestNewBase
go
三.数据库基础知识
3.1 数据库组成
- 数据库文件
1)主要数据文件
存放数据和数据库的初始化信息。每个数据库有且只能一个主要数据文件。.mdf 扩展名。
2)次要数据文件
存放除了主要数据文件以外的所有数据的文件。次要数据文件并不是必须的,可以没有。
如果有的话,可以是一个,也可以有多个。.ndf 扩展名
3)事务日志文件
存放用于恢复数据库的所有日志信息。每个数据库至少要有一个日志文件,也可以有多个。默认.ldf 扩展名。
- 数据库对象
1.表
包含数据库中所有数据的对象,行和列组成 ,用于组织和存储数据。
2.字段
表中的列 一个表可以有多个列,自己的属性:数据类型(决定了该字段存储哪种类型的数据),大小(长度)
3.视图
表(虚拟表)一张或多张表中导出的表 用户查看数据的一种方式,结构和数据是建立在对表的查询基础之上的。
4.索引
为了给用户提供一种快速访问数据的途径,索引是依赖于表而建立,检索数据时,不用对整个表进行扫描,可以快速找到所需的数据。
5.存储过程
是一组为了完成特定功能的SQL语句的集合(可以有查询、插入、修改、删除),编译后, 存储在数据库中,以名称进行调用, 当调用执行时,这些操作就会被执行。
6.触发器
在数据库中,属于用户定义的SQL事务命令集合,针对于表来说,当对表执行增删改操作时,命令就会自动触发而去执行。
7.约束
对数据表的列,进行的一种限制。可以更好的规范表中的列。
8.缺省值
对表中的列可以指定一个默认值,当进行插入时,如果没有为 这个列插入值,那么就会自动以预先设置默认值进行自动补充。
3.2 数据类型分类
① 数值型
1)整型数据类型:bigint int smallint tinyint
2)浮点型:
float 近似数值 存在精度损失
real 近似数值 = float(24)
decimal 精确数值 不存在精度损失
decimal(18,2)
3)货币类型:money smallmoney
4)二进制数据类型 : bit binary varbinary(n) varbinary(max) image
② 字符型
前面带n,存储中文汉字还是英文或数字,长度都是1,存储大小2个字节,
不带n,英文或数字,就是1个长度,中文就是两个长度
char 固定长度 8000
varchar(n) 可变长度字符串 8000
nvarchar(n) 可变长度字符串 8000
varchar(max) 可变长度字符串
text 可变长度字符串 2GB
③ 日期型
datetime 精确度高,
datetime2 精度更高,100纳秒
smalldatetime 精度1分钟 时间范围小
date 存储日期
time 存储时间
④ 其他类型
uniqueidentifier guid 全球唯一标识符
四. 数据表创建
4.1 工具创建表
一个表中,需要一个列来唯一标识一条数据。
① 主键:唯一标识一条数据。
值 不能重复 不能为空
② 标识列
一个列设置成标识列,它就不能再手动插入,插入时,自动生成的。类型必须是不带小数的数值型 整型
标识列:标识种子 第一条记录标识列的值 100 增量 3
删除了数据,再插入,就会出现不连续 缺点
③ 创建外键
一般在两个表之间要建立关联时候,创建
一个列创建为外键,它在另一个表必须是主键
一个表里可以有多个外键,也可以没有,一个表只能有一个主键,也可以没主键,但一般都会设置一个主键。
UserInfos 外键表
DeptInfos 主键表
两个表一旦建立外键关系,外键表里的对应的外键列,它的值必须是它对应的主键表里的主键值,如果插入一个不存在 的值,是插入不进去的。
4.2 T-SQL创建表
use testDB
go
--创建表
create table ProductInfos
(
Id int identity(1001,1) primary key not null, --标识种子,增量
ProNo varchar(50) not null,--产品号 非空
ProName nvarchar(50) not null,--产品名 非空
TypeId int not null,--产品类别 非空
Price decimal(18,2) default (0.00) not null,--价格 默认值 非空
ProCount int default (0) null--数量 默认值
)
go
create table ProductType
(
TypeId int identity(1,1) primary key not null,--产品类别号 主键
TypeName nvarchar(20) not null--产品类别名
)
go
删除表
--删除表
drop table ProductInfos
go
4.3 T-SQL修改表
use testDB
go
--创建表之后,进行修改
--不删除原来的表,进行修改
--添加一列 ProRemark
alter table ProductInfos add ProRemark nvarchar(max) null
--删除一列 ProRemark
alter table ProductInfos drop column ProRemark
--修改一列
alter table ProductInfos alter column ProNo nvarchar(50) null
--修改列名 一般慎用
--exec sp_rename '表名.旧列名','新列名','column'
--exec sp_rename 'ProductInfos.ProCount','Count','column'
注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。
4.4 表创建约束
① 主键 Primary Key约束
唯一性、非空,不能修改
② 外键 Foreign Key约束
加强两个表的一列或多列数据之间的连接的。 先建立主表的主键,然后再定义从表中的外键。只有主表中的主键才能被从表用来作为外键使用。主表限制了从表更新和插入的操作。当删除主表中的某条数据,应该是先删除从表中相关的数据,再删除主表。
③ Unique约束
唯一性约束 确保表中的一列数据没有相同的值。与主键约束相似。主键只能有一个,但一个表中可以定义多个唯一约束。唯一键可以为NULL,但主键不可以
④ Check约束
通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围。
⑤ Default约束
默认值约束。用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果没有设置默认值,系统就会默认为NULL。
4.5 T-SQL创建约束
创建表时添加约束
use testDB
go
--创建表
create table ProductInfos
(
Id int identity(1001,1) primary key not null, --标识种子,增量
--唯一性 约束
ProNo varchar(50) unique not null,
ProName nvarchar(20) not null,
--外键 foreign key references 主表(列名)
TypeId int not null foreign key references ProductType(TypeId) ,
--检查 check(Price<10000)
Price decimal(18,2) check(Price<10000) default (0.00) not null,
-- 默认 default (0)
ProCount int default (0) null,
)
go
创建表完成后再创建约束
--在建表完成后,创建约束
create table ProductInfos
(
Id int identity(1001,1) not null, --标识种子,增量
ProNo varchar(50) not null,
ProName nvarchar(20) not null,
TypeId int not null ,
Price decimal(18,2) not null,
ProCount int null
)
go
--主键 Id
alter table ProductInfos add constraint PK_ProductInfos primary key(Id)
--外键 TypeId
alter table ProductInfos add constraint FK_ProductInfos foreign key (TypeId) references ProductType(TypeId)
--unique约束 ProNo
alter table ProductInfos add constraint IX_ProductInfos_ProNo unique(ProNo)
--unique ProNo+ProName
alter table ProductInfos add constraint IX_ProductInfos_ProNo unique(ProNo,ProName)
--check约束
alter table ProductInfos add constraint CK_ProductInfos_Price check(Price<10000)
--default约束
alter table ProductInfos add constraint DF_ProCount default (0) for ProCount