数据库的创建与管理
1认知SQL Server数据库结构
系统数据库:名称、特点。
(1) master数据库:
master数据库是记录了SQL Server系统的所有系统信息的数据库。这包括实例范围的元数据、端点、链接服务器和系统配置设置。master数据库还记录了其他数据库是否存在以及这些数据库文件的位置。(记录所有系统级的信息)
(2)model数据库:
Model数据库是所有用户数据库和tempdb数据库的模板数据库。当创建数据库时,系统将model数据库的内容复制到新建的数据库中作为新建数据库的基础,因此,新建的数据库都与model数据库的内容基本相同。(模板数据库)
(3)msdb数据库:
系统使用msdb数据库来存储警报信息以及计划信息,并备份和恢复相关信息。(记录了有关SQL Server Agent代理服务的信息)
(4)resource数据库:
Resource数据库是只读数据库,它包括了SQL S erver中的所有系统对象。(这是一个只读数据库,包含了所有SQL Server中所有系统对象)
(5)tempdb数据库:
Tempdb数据库是连接到SQL Server实例的所有用户都可用的全局资源,它保存所有临时表和临时存储过程。另外,它还用来满足所有其他的临时的存储要求。每次启动SQL Server时,都要重新创建tempdb。(临时数据库,用于保存中间的数据)
数据库文件
数据库至少包括两个文件,即主数据文件和事务日志文件
数据文件(类型)
主数据文件扩展名为.mdf,数据库只能有一个主数据文件。数据库还可以包括零个或对个次数据文件,扩展名为.ndf
日志文件(类型)
数据库可以有一个或多个事务日志文件,扩展名为*.ldf.
数据库对象
(1)表(2)关系图(3)视图(4)可编程性(存储过程、函数、数据库触发器、规则、默认值)(5)安全性
数据库操作
删除数据库:
sql Drop database database_name
打开数据库
sql use database
创建表
创建sxda表,性别默认值为“男”
Create table xsda(
学号 char(10) not null primary key,
性别 char(2) not null default(‘男’),
出生日期 smalldatime not null
)
表结构的修改
在xscj表中增加一个新列—学分。
Alter table xscj Add 学分 tinyint null
在xscj表中删除名为“学分”的列。
ALTER TABLE xscj DROP COLUMN 学分
将xsda表中“姓名”列的长度由原来的8改为10
ALTER TABLE xsda ALTER COLUMN 姓名 CHAR (10)
将xsda表中名为“出生日期”列的数据类型由原来的smalldatatime改为datatime
ALTER TABLE xsda ALTER COLUMN 出生日期 datatime
表的删除
DROP TABLE table_name
表数据管理
增加数据
INSERT INTO table_name (列1, 列2)
VALUES
(值1, 值2)
删除数据
DELETE
FROM
表名称
WHERE
列名称 = 值
修改数据
UPDATE 表名称
SET 列名称 = 新值
WHERE
列名称 = 某值
数据查询
Select语句
SELECT 列名称 FROM 表名称
空值的判断
在where字句中使用is null或is not null语句
查询xsda表中没有备注的学生的情况。
Select *
From xsda
Where 备注 is null
Select到变量、到表结果保存到表:into 由xsda表创建“信息系学生表”,学号、姓名、系名、总学分
SELECT
学号,姓名,系名,总学分 INTO 信息系学生表
FROM
xsda
WHERE
系名 = ‘信息’
(2)创建一个名为xm的局部变量,并在select语句中使用该局部变量查找xsda中所有管理系的学生的姓名、总学分
DECLARE @xm CHAR (10)
SET @xm = ’管理’ SELECT
姓名,总学分
FROM
xsda
WHERE
系名 =@xm
各个子句关键词、作用
修改查询结果中的列标题:as
SELECT
课程编号 AS course_num
FROM
kcxx
计算列值
SELECT
学号,课程编号,期末成绩 = 成绩 * 0.8
FROM
xscj
消除结果集中的重复行:distinct
SELECT DISTINCT
系名
FROM
xsda
限制结果集中返回行数 top n
查询xscj表中所有学生的学号、课程编号和成绩,只返回结果集中的前10行
SELECT
top 10 学号,课程编号,成绩
FROM
xscj
逻辑表达式作为查询条件and/or
模式匹配 like
%:代表0个或多个任意字符
_:代表单个任意字符
[]:指定范围,[123….]中任意的单个字符
一个汉字代表两个字符
查询xsda表中姓“李”的学生的情况
SELECT
*
FROM
xsda
WHERE
姓名 LIKE '李%'
查询xsda中姓’“李”或姓“王”并且名字为单字的学生信息
SELECT
*
FROM
xsda
WHERE
姓名 LIKE '[ 王李 ] _ _'
比较范围:between and
查询xsda表中在1988年出生的学生的姓名和总学分
SELECT
姓名,总学分
FROM
xsda
WHERE
出生日期 BETWEEN '1998 - 01 - 01' and '1988 - 12 - 31'
In关键字
查询kcxx表中第2~4学期开设的课程的情况。
SELECT
*
FROM
kcxx
WHERE
开课学期 IN (2, 3, 4,)
(8)排序:order by
Asc:升序 desc :降序
将xsda表中所有信息系学生按年龄从小到大顺序排出
SELECT
*
FROM
xsda
WHERE
系名 = ‘信息’
ORDER BY
出生日期 DESC
分类汇总
聚合函数:名称、作用
(1) sum:返回表达式中所有值得和
(2) min:求最小值
(3) avg:返回表达式中所有值得平均值
(4) count:用于统计组中满足条件的行数和总行数
(5) max:求最大值
(6) group by:简单分组
(7) having:分组后筛选
(8) compute count():会产生一行新的总人数行
连接查询、子查询
对各种连接查询结果行数的预计:最多、最少
(1) 内连接
(2) 外链接(左外链接、右外链接、完全外链接)
(3) 交叉链接
(4) 自连接
子查询:in
Eg:查找选修了108号课程的学生的学号,姓名,性别,系别
SELECT
学号,姓名,性别,系别
FROM
xsda
WHERE
学号 IN (
SELECT
学号
FROM
xscj
WHERE
课程编号 = ‘108’
)
Eg:查找高于所有女学生的总学分的学生的情况
SELECT
*
FROM
xsda
WHERE
总学分 > ALL (
SELECT
总学分
FROM
xsda
WHERE
性别 = ‘女’
)
视图、索引
视图的概念,特点。
视图概念:视图是一个独立的数据库对象,是一个虚拟表
特点:(1)数据库中只存放视图的定义,而不存储视图对应的数据,数据的物理存放位置仍在表中。
(2) 视图中的数据来自于基表,是在视图被引用时动态生成的。
(3) 视图一旦定义好,就可以像一个基表一样进行查询、删除或修改等工作。
(4) 数据保密
(5) 简化查询操作
(6) 保证数据的逻辑独立性
索引的概念,优点,缺点。
索引概念:索引是加快检索标表中数据的方法,是一个单独的、物理的数据库结构
优点:(1)快速存取数据(2)保证数据记录的唯一性(3)实现表与表之间的参照完整性(4)减少排序和分组的时间
缺点:增加系统开销,浪费时间、空间
视图的创建、查询。
创建:create view
Eg:创建xs_view,内容包括所有非“汉”的学生
CREATE VIEW xs_view AS SELECT
*
FROM
xsda
WHERE
民族 <> '汉'
查询:
SELECT
*
FROM
xs_view
WHERE
平均成绩 >= 70
如何保密的?
对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。
如何简化查询的?
为复杂的查询建立一个视图,用户不必输入复杂的查询语句,只需针对此视图做简单的查询即可。
1聚集索引
特点,时空开销
特点:创建聚集索引后,表中数据行的物理存储顺序和索引顺序完全相同,因此每个表只能有一个聚集索引
会产生时间开销
2非聚集索引
特点,时空开销
特点:非聚集索引不改变表中数据行的物理存储顺序,数据与索引分开存储。
会产生空间开销
数据完整性
三类完整性概念、特点。
(1)域完整性概念:域完整性又称为行列整性,指定列输入的有效性,即保证指定列的数据具有正确的数据类型,格式和有效的数据范围。
特点:实现域完整性可通过定义相应的check约束、default约束、默认值对象、规则对象等方法来实现,另外通过为表的定义数据类型和not null,也可以实现域完整性
(2)实体完整性:实体完整性又称为行完整性,是用于保证表中每一个特定实体的记录都是唯一的。
特点:通过索引,unique约束、primary key约束或identity属性可以实现数据的实体完整性。
(3)参照完整性:参照完整性可以保证表中的数据与表中的数据的一致性。
特点:参照完整性可以通过定义外键与主键之间或外键与唯一之间的对应关系来实现,参照完整性确保同一键值在所有表中一致。
定义、添加、删除完整性约束。
域完整性:又叫列完整性。
唯一约束unique。默认约束default。非空约束is not null等。
2实体完整性:又叫行完整性。
主键约束primary key。
唯一约束。
3参照完整性
外键约束foreign key。
函数
1系统内置函数
常用的。函数名称、作用、结果、计算。
(1) 数学函数
作用:数学函数用于对数字表达式进行数学运算并返回运算结果
Abs函数:返回给定数字表达式的绝对值
Round函数:返回数字表达式并四舍五入为指定的长度或精度
Rand函数:返回0~1的随机float值
(2)字符串函数
作用:字符串函数用于对字符串进行操作,并返回一个字符串或数字值。
Ascll函数:返回字符表达式最左端字符的ascll码值
Char函数:将ascll码转换为字符。
Left函数:返回从字符串左边开始指定个数的字符
Right函数:返回字符串从右边开始指定个数的字符
Substring函数:返回expression中指定的部分函数
Replace函数:用第三个字符串表达式替换第一个字符串表达式中包含的所有第二个字符串表达式,并返回替换后的表达式
Str函数:将数字数据转换为字符数据
Len函数:返回给定字符串表达式string_expression的字符个数,不计算尾部空格
(3)日期和时间函数
Getdate函数:返回当前系统日期和时间
Day函数:返回指定日期的天数
Month函数:返回指定日期的月份
Year函数:返回指定日期的年份
(5) 聚合函数
作用:聚合函数用于计算表中的数据,返回单个计算结果。
Max、min,sum,avg,count
(6)系统函数
作用:系统函数用于对SQL Server中的值,对象和设置进行操作并返回有关信息
Case函数:
Cast函数:转换数据类型
Convert函数:将expression表达式的类型转换为data_type所指定的类型
2用户定义函数的创建及使用
创建、调用。
标量函数、表函数。(填空)
(1) 标量函数:标量函数返回一个确定类型的标量值,函数体语句定义在begin…end语句内。可在select语句中调用用户定义标量函数,也可以利用execute语句调用用户定义标量函数。
创建:create function average(@num char(10))
RETURNS INT AS
BEGIN
DECLARE @avg INT SELECT
@avg = avg(成绩)
FROM
xscj
WHERE
学号 =@num RETURN @aver
END
调用:
DECLARE @num1 CHAR (6)
DECLARE @aver1 INT SELECT
@num = ’200801’ SELECT
@aver1 = dbo.average (@num1) SELECT
@aver1 AS ‘学号为200801的学生的平均成绩’
(2) 内嵌表值函数返回可更新表,没有由begin…end语句括起来的函数体。内嵌表值函数可用于实现参数化的视图,内嵌表值函数只能通过select语句调用
定义:
CREATE FUNCTION fn_view1 (@para VARCHAR(10)) RETURNS TABLE AS RETURN (
SELECT
学号,姓名,系名
FROM
xs.dbo.xsda
WHERE
系名 =@para
)
调用:
SELECT
*
FROM
fn_view1 (‘信息’)
游标
1游标的创建及使用
游标概念。
游标是可以每次处理结果集中的一行或一部分行的结果集扩展。
游标可以定位在结果集的特定行。从结果集的当前位置检索一行或多行。支持对结果集中当前位置的行进行数据修改。为由其他用户对显示在结果集中数据库数据所做的更改提供不同级别的可见性支持。提供脚本、存储过程和触发器中使用的访问结果集中的数据的T-SQL语句。
使用步骤、各步骤动词。注意事项。
(1) 声明游标:sql declare cursor
(2) 打开游标:open。声明游标后,要使用游标从中提取数据,就必须打开游标
(3) 数据处理:读取数据(fetch)、修改数据(update)、删除数据(delete)。
(4) 关闭游标:close。游标关闭后,其定义仍在,需要时可用open语句打开它再使用
(5) 释放游标:deallocate。释放游标之后不可以用open语句重新打开,必须使用declare语句重建游标
相关全局变量。
@@CURSOR_ROWS:打开游标后,可以通过全局变量@@CURSOR_ROWS来获取游标中的记录行数。
存储过程
1存储过程
概念、优点、特点。
概念:存储过程就是在SQL Server数据库中存放的查询,是存储在服务器中的一组预编译过的T_SQL语句,而不是在客户机上的前端代码中存放的查询。
优点:(1)存储过程在服务器端运行,执行速度快(2)简化数据库管理(3)提供安全机制,增强数据库安全性(4)减少网络流量
缺点:(1)增加了数据库服务器的负担(2)难以移植(3)业务逻辑大的时候,封装性不够,难调试难以维护
创建及使用。
(填空)
存储过程又分为系统存储过程(sp_)、扩展存储过程(xp_)、用户自定义存储过程。
系统存储过程主要存储在master数据库中并以sp_为前缀,在任何数据库中都可以调用,在调用时不必子啊存储过程前加上数据库名。
扩展存储过程提供从SQL Server到外部程序的接口,仪表进行各种维护工作,并以xp_为前缀。
用户自定义存储过程由用户自己根据需要创建,是用来完成某项特定任务的存储过程。
注意事项:(1)存储过程只能定义在当前数据库中(2)存储过程的名称必须遵循标识符的命名规则(3)不要创建任何使用sp_,xp_作为前缀的存储过程
创建:create procedure ***
执行:execute
删除:drop
触发器
1触发器
概念,作用。
概念:触发器作为一个对象存储在数据库中,是一类特殊的存储过程,触发器是定义在特定的表或视图上的。触发器又分为:DML触发器和DDL触发器
作用:触发器可以保证数据的有效性和完整性
创建及使用(激活)。
(填空)
触发器与表(视图)是紧密相关的。在创建触发器时,需要指定触发器的名称、包含触发器的表、引发触发器的条件以及触发器启动后要执行的语句等。触发器只能在当前的数据库中创建。不能在视图上定义alter触发器。Create trigger ***
激活:begin ……….end
数据导入与导出
源及目标的常用类型、目标是否事先存在?
1数据导入
2数据导出
数据库安全性控制
三级安全机制:由外到内。
登录名(登录账号)与用户账号的区别。
1登录账号:创建与使用
2数据库用户:创建与使用
3对象权限:授予与撤销
相关动词
数据库操作:
1脱机/联机
2分离/附加
相关存储过程
3备份/还原
相关动词
9个
动词
create、数据库、表、对象等的创建
alter、数据库、表、对象等的修改
drop、数据库、表、对象等的删除
select、查询
insert、数据插入
update、数据的修改
delete、数据的删除
grant、revoke。
易混词、同义词
题型:(1)选择(2)填空(存储、函数…….)(3)判断(4)select 53(5)问答 55
文件
主数据库mdf
次数据库ndf
事务日志ldf
对象
数据库关系图
表
视图
同义词
可编程性(存储过程、函数、数据库触发器、规则、默认值)
Service Broker
存储和安全性
系统数据库
master 数据库是记录了SQL Server系统的所有系统级信息的数据库。
model 数据库是所有用户数据库和tempdb数据库的模板数据库。
msdb 数据库来存储警报信息以及计划信息、备份和恢复相关信息。
resource 数据库是只读数据库,它包含了SQL Server 2008中的所有系统对象。 tempdb数据库是连接到 SQL Server 实例的所有用户都可用的全局资源,它保存所有临时表和临时存储过程。另外,它还用来满足所有其他临时存储要求,例如存储 SQL Server生成的工作表。
tempdb 每次启动 SQL Server 时,都要重新创建 tempdb,系统启动时,该数据库总是空的。在断开连接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。
事物之间的联系
(一对一)联系
(一对多)联系
(多对多)联系
反映了(实体集)之间的联系
支持数据库中数据的逻辑独立性和物理独立性的机制是(三级模式、二极映射)
数据库的三级模式结构
外模式有(任意多个)
模式和内模式只有(1个)
三级体系结构
用户数据逻辑结构、数据的物理存储结构和整体逻辑结构。三级模式之间的两层映象保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性
数据库系统
是采用了数据库技术的计算机系统,由数据库、数据库管理系统、应用系统和数据库管理员组成
常见的结构数据模型
层次模型、网状模型、关系模型
SQl语言
关系数据库语言, 非过程化语言
SQL语言具有的功能
数据定义、数据操纵、数据控制、数据查询
关系模型
用二维表结构表示实体型,外键实现实体之间联系的模型
存储过程是一组予编译的SQL语句
优点:
1.允许模块化程序设计
2.允许更快执行
3.减少网络流量
4.更好的安全机制
触发器
优点:
以事件方式来处理. 当数据发生变化的时候, 自动作处理。
缺点:
当数据库之间 导出导入的时候, 可能会引起不必要的触发逻辑。
索引:分为聚集索引和非聚集索引;唯一索引;
优点:大大提高了数据库的检索速度;
缺点:增加了系统开销;
聚集索引:CLUSTERED
一个表只能建立一个聚集索引;
聚集索引适用于大量非重复值的列/经常被连续访问的列/经常使用连接或 GROUP BY 子句查询访问的列。
聚集索引不适用于:频繁更改的列
非聚集索引:NONCLUSTERED
一个表能建立多个非聚集索引
唯一索引:
不允许表中任何两行具有相同索引值。
主键索引是唯一索引的特定类型 在为表定义主键时将自动创建主键索引。
Create index表名/索引名:创建索引;
Alter index:修改索引;
EXEC:查看索引信息
Drop index 表名/索引名:删除索引
数据完整性:域完整性(又称为列完整性);实体完整性(行的完整性);参照完整性;
触发器的类型:DML触发器,DDL触发器
DLL
数据库模式定义语言,用于描述数据库中要存储的现实世界实体的语言
关键字 唯一标识实体的属性集
go
批处理结束的标志。
ORDER BY
DESC:降序
ASC:升序
Primary key: 主键
Unique:唯一值
Default:默认值
Distinct:用于消除取值重复行
Like:模糊查询
In:在什么什么里面
TOP n子句:在查询结果中输出前n条记录
TOP n PERCENT 子句:在查询结果中输出前n%条记录
create index indexname
CLUSTERED: 建立聚集索引。
NONCLUSTERED: 建立非聚集索引。
DB 数据库
DBS 数据库系统
DBMS 数据库管理系统
CREATE DATABASE 建立数据库
CREATE TABLE 建立表
DROP TABLE 删除表
DROP INDEX 撤消索引
CREATE VIEW 建立视图