1. 数据库脚本语言T-SQL:用于创建数据库对象的语句集合。
-
T-SQL :Transact-SQL 基于SQL(Structed Query Language 结构化查询语言),用于应用程序和数据库之间沟通的编程语言。是Sql Server 支持的脚本语言。
-
SQL语言:一种有特殊目的的编程语言,用于存取数据,查询,更新和管理关系数据库,高级的非过程化的编程语言; 作用:可以完成移植,提高数据的访问效率,完成对数据的相关处理。
-
SQL语言的分类:
(1)DQL:数据查询语言 Select 列 From 表名 Where 条件
(2)DML:数据操纵语言 Insert Into 表名(列,列。。。) Values(列值)
Update 表名 Set 列名 = 值 Where 条件
Delete from 表名 Where 条件
(3)DDL:数据定义语言 创建数据库及其对象(表,视图,索引等) Create/Alter/Drop
(4)DCL:数据控制语言 用于授予或者回收访问数据库的特权,对数据库进行监视等操作 grant 授权 commit 提交 rollback 回滚
2. 脚本创建数据库
-
点击“新建查询” ,就可以创建一个脚本的窗口
-
对于新建的脚本,选择数据库,可以直接手动在右方选择
或者通过执行语句来实现(选中代码,然后点击“执行”)
```CQL
use master ---选择要操作的数据库
go---批处理命令
```
- 当我们想要利用脚本创建一个新的数据库时,就要将数据库切换到上方的master
因为master是系统数据库,它记录了SQL Server 系统的所有系统级信息,还记录了所有其他数据库的存在,和数据库文件的位置,SQL Server 的初始化信息。
- 在脚本中用英文短横线实现注释,另外单词的大小写可以根据个人习惯,列与列之间用逗号隔开,最后一列后面就不需要逗号。选中要执行的代码,点击”执行“
use master ---选择要操作的数据库
go---批处理命令
-----创建数据库
create database NewBase ---数据库名称
on primary----主文件组(里面添加主要数据文件)
(
name = 'NewBase',---指定主要数据文件的逻辑名
filename = 'E:\数据库\NewBase.mdf',---主要数据文件路径(绝对路径),数据库名称加mdf
size = 5MB,----主要数据文件的初始大小
filegrowth = 1MB ---主要数据文件的增量
)
log on---创建日志文件
(
name = 'NewBase_log',---指定日志文件的逻辑名
filename = 'E:\数据库\NewBase_log.mdf',---日志文件路径,数据库名称加mdf
size = 1MB,----日志文件的初始大小
filegrowth = 10% ---日志文件的增量
)
go
以上代码就实现了创建了一个数据库NewBase,这样不只是通过“新建数据库”的可视化界面实现,还可以通过 T-SQL语言实现
---删除数据库
drop database NewBase
go
3. T-SQL 创建表
- 表信息准备:
表一是产品信息表:
标识列,int 编号 varchar(50) 名称 nvarchar(50) 产品类型 TypeId int
价格:decimal(18,2) 数量 int
表一是产口类型表:
编号 TypeId int 名称 nvarchar(20)
- 代码实现:
use NewBase
go
---DDL:数据定义语言
---创建产品信息表
create table Production
(
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) null, ---价格
ProCount int default (0) null ---数量 ,默认值0
)
go
---创建产品类型表
create table ProType
(
TypeId int identity(1,1) primary key not null, ---标识列(标识种子,增量),将标识列设为主键
TypeName nvarchar(20) not null---名称
)
go
当然也可以删除表:
---删除表
drop table Production
go
4. T-SQL 修改表
- 当想插入新的一个属性:
(1)直接在原来的创建表的脚本语言中添加,但再去执行,会报错,相当于在同一个数据库中创建了两个同名表;可以先删除表,然后再重新创建表,再执行创建表的脚本语言。但一般情况下不采用此方式。后果很严重,除非表里的数据不重要或者空表
(2)创建表之后修改,在不删除原来表的基础上。
---添加一列ProRemark
alter table Production
add ProRemark nvarchar(max) null
go
---删除一列ProRemark
alter table Production
drop column ProRemark
go
---修改一列
alter table Production alter column ProNo nvarchar(50) null ---修改了 nvarchar和可以为空
添加一列:alter table 表名 add 列名 数据类型 是否为空
删除一列:alter table 表名 drop column 列名
修改一列:alter table 表名 alter column 列名 数据类型 是否为空(一般不修改列名,一般修改数据类型 是否为空等)
5. T-SQL 创建约束
5中约束:主键, 外键, unique约束 check约束 default约束
-
在创建表的过程中创建约束zho
(1)主键 :直接在属性列的后面 加上 primary key
(2)外键:直接在属性列的后面 加上 foreign key references 主键表名(属性名)
在上个列子中:产品类型是产品信息表的外键,
TypeId int foreign key references ProType(TypeId) not null, ---产品类型
(3) unique约束: (唯一约束)直接在属性列的后面 加上 unique
(4) check约束 : 直接在属性列的后面 加上 check(表达式)
(5) default约束: 直接在属性列的后面 加上 default(默认值)
create table Production ( Id int identity(1001,1) primary key not null, ---标识列(标识种子,增量),将标识列设为主键,有助于提高检索速度 ProNo varchar(50) unique not null ,----编号 ProName nvarchar(50)not null,---名称 TypeId int foreign key references ProType(TypeId) not null, ---产品类型,外键 Price decimal(18,2) check(Price<1000) default (0.00)null, ---价格,默认值0.00 ProCount int default (0) null ---数量 ,默认值0 )
-
在创建表之后创建约束
(1) alter table 表名 add constraint 约束名 primary key(列名)
(2) alter table 表名 add constraint 约束名 foreign key( 列名) references 主键名( 列名)
(3) alter table 表名 add constraint 约束名 unique(列名,列名,列名)
(4) alter table 表名 add constraint 约束名 check(表达式)
(5) alter table 表名 add constraint 约束名 default(默认值) for 列名
---创建产品信息表
create table Production
(
Id int identity(1001,1) not null, ---标识列(标识种子,增量),将标识列设为主键,有助于提高检索速度
ProNo varchar(50) not null ,----编号
ProName nvarchar(50)not null,---名称
TypeId int not null, ---产品类型,外键
Price decimal(18,2) null, ---价格,默认值0.00
ProCount int null ---数量 ,默认值0
)
go
----在创建表之后创建约束,相当于对表进行修改
--1. 主键
alter table Production add constraint PK_Production primary key(Id)
--2. 外键
alter table Production add constraint FK_Production foreign key( TypeId) references ProType(TypeId)
--3. unique约束
alter table Production add constraint UK_Production unique(ProNo,ProName)--多个列唯一约束
--4. check约束
alter table Production add constraint CK_Production check(Price<1000)
--5. default约束
alter table Production add constraint DK_Production1 default(0.00) for Price
alter table Production add constraint DK_Production2 default(0) for ProCount
6. T-SQL 操作数据之插入数据
1. 单条数据插入
insert into 表名 (列名,列名,,,)values(对应的列值,,,)
--编号TypeId是标识列,在插入时是自动插入的
insert into ProType(TypeName)
values('食品类')
insert into ProType(TypeName)
values('工具类')
TypeId | TypeName | |
---|---|---|
1 | 1 | 食品类 |
2 | 2 | 工具类 |
2.多条插入
---批量插入操作
---方式1
insert into ProType(TypeName)
values('水产类1'),('水产类2'),('水产类3')
---方式2
insert into ProType(TypeName)
select '工具类1'union
select '工具类2'union
select '工具类3'
insert into ProType(TypeName)
select '工具类1'union
select '工具类2'union all---使用union all,表示允许下方的列中除了标识列,主键外的值可以相同
select '工具类2'
union是有去重的作用,union all是允许重复的
3. 克隆表数据
将一张表的数据复制到另一张表
--- 已经创建Tset 表中有属性列:Id(主键,标记列) Testage TestName
---方式1 当目标表已经在数据库中存在
insert into Test(TestName)---目标表
select TypeName from ProType---原表
---实现了将原表中的TypeName复制到目标表的TestName,最终是因为Testage 未赋值,是null ,而Id是标记列,从1开始依次递增
---方式2 当目标表在数据库中不存在
select TypeName into Test02
from ProType
---生成的新表Test02,只有属性列TypeName
7. T-SQL 操作数据之删除数据
1. 更新数据
---特别强调:永远不要去修改主键,主键是不允许修改的!!!!
update Test
set TestName = '鱼',Testage = 10
where Id = 1 ---如果不加where条件,就会修改整张表
---条件多个用and \ or连接
2. 删除数据
---1. 只是删除数据,表还在
-------不加where条件会删除整张表的数
-------删除了标识列的值后,后来再重新插入,标识列的值(标识种子按照增量自增)还是会接着删除前的值自增,而不是从初始值开始的
-------就是delete语句会造成标识列的值不连续
delete from Test where Id = 2
---若想删除数据,让标识列的值恢复到初始值
truncate table Test ----实现表数据清空,恢复到初始化,表面上看与delete from Test效果一样,但区别于标识列的值的不连续
---truncate效率较高,因为delete每删除一句,就会在日志中记录,truncate不在日志中记录,且是即时操作,不可以回滚rollback
---而delete update insert 事务中,可以恢复;慎用truncate ,一旦删除,不可恢复
---2. 连同表一起删除
drop table Test
8. T-SQL 操作数据之查询数据(单表查询)
1. 查询所有数据
---查询所有数据,*代表所有列
select*
from Test
2. 查询部分数据
---查询部分列数据
select Id, TestName
from Test
where Id =3
3. 列起别名
---列起别名(当表字段是英文,但要求列名是中文时)
select TestName as 测试名称,Id 编号,年龄 = TestAge
from Test
---所以,有三种方式,可以:
--1. 列名 as 别名
--2. 列名 别名
--3. 列名 = 别名
4.排序
---升序 asc 降序 desc
---对于主键,默认有排序的功能,从小到大
---当除了主键外的列,也可以实现排序:::
select TestName ,Id , TestAge
from Test
order by TestAge desc
order by 永远放在执行语句的最后面就行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!