一:数据库基础知识

1.SQL简介
SQL是用于管理关系数据库管理系统,SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制
(1)SQL是什么?
结构化查询语言,可以访问和处理数据库
(2)SQL能做什么?
面向数据库执行查询、从数据库取回数据、在数据库中插入新的记录、更新数据库中的数据、从数据库中删除记录、创建数据库、建表、建视图、创建存储过程等
2.SQL语言分类
(1)DDL语句:数据定义语句,负责定义数据库对象的,包括创建、修改、删除数据库对象。
语句有:create、 alter、drop
(2)DML语句:数据操作语句,负责操作表中的数据的。包括新增、修改、删除数据
语句有:insert、update、 delete、truncate
(3)DQL语句:查询数据语句,语句有:select 。查询功能包括:条件查询、分组查询、多表连接查询、子查询
(4)DCL语句:数据控制语句,语句有:GRANT、REVOKE、COMMIT、ROLLBACK等语句,负责分配/收回用户的权限
3.SQL数据类型
SQL通用数据类型

CHARACTER(n)  字符/字符串。固定长度 n
VARCHAR(n)或CHARACTERVARYING(n)   字符/字符串、可变长度、最大长度 n
BOOLEAN  存储 TRUE 或  FALSE 值
INTEGER(p)  整数值(没有小数点)。精度 p
DATE     存储年、月、日的值
TIME     存储小时、分、秒的值。
XML      存储 XML 数据
ARRAY  元素的固定长度的有序集合
MULTISET  元素的可变长度的无序集合

4.SQL语法
(1)CREATE DATABASE 语句用于创建数据库

CREATE  DATABASE 数据库名;

(2)数据库表
CREATE TABLE 语句用于创建数据库中的表

CREATE  TABLE  表名;
(
column_name1  data_type(size),
column_name2  data_type(size),
column_name3  data_type(size),
....
);

data_type参数规定列的数据类型(例如varchar,integer,decimal
date等);size 参数规定表中列的最大长度
1>SQL约束(Constrains)
SQL 约束用于规定表中的数据规则
约束可以在创建表时规定(通过CREATE TABLE语句),或者在表创建之后规定(通过ALTER TABLE语句)
1.1>CREATE TABLE + CONSTRAINT语法
约束:

NOT NULL   指示某列不能存储 NULL 值
UNIQUE  保证某列的每行必须有唯一的值
PRIMARY KEY   NOT NULL和UNIQUE的结合,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录
FOREIGN KEY   保证一个表中的数据匹配另一个表中的值的参照完整性
CHECK    保证列中的值符合指定的条件
DEFAULT    规定没有给列赋值时的默认值

1.2>PRIMARY KEY 约束:唯一标识数据库表中的每条记录
1.3>FOREIGN KEY 约束
一个表中的FOREIGN KEY指向另一个表中的 UNIQUE KEY(唯一约束的键)
1.4>CREATE TABLE时的SQL FOREIGN KEY约束
1.5>ALTER TABLE 时的 SQL FOREIGN KEY 约束
1.6>撤销 FOREIGN KEY 约束
(3)索引
1>CREATE INDEX索引:用于在表中创建索引
语法:

CREATE  INDEX  index_name  ON  table_name  (column_name)

index_name:索引名称
table_name:索引的表
column_name:索引的列
2>CREATE UNIQUE INDEX:创建一个唯一的索引

CREATE  UNIQUE  INDEX  index_name  ON  table_name  (column_name)

index_name:索引名称
table_name:索引的表
column_name:索引的列
(4)INSERT INTO:用于向表中插入新记录
编写形式:

//第一种
INSERT  INTO  table_name
VALUES  (value1,value2,value3,...);
//第二种
INSERT  INTO  table_name(column1,column2,column3,...) 
VALUES  (value1,value2,value3,...);

(5)UPDATE:更新表中已存在的记录
(6)DELETE:用于删除表中的行
(7)SELECT:用于从数据库中选取数据,结果被存储在一个结果表中,称为结果集

//第一种
SELECT  column_name,column_name  FROM  table_name;
//第二种
SELECT  *  FROM  table_name;

(8)SELECT DISTINCT语句
DISTINCT 关键词用于返回唯一不同的值

SELECT  DISTINCT  column_name,column_name  FROM  table_name;

(9)WHERE:用于提取那些满足指定条件的记录
(10)AND & OR运算符
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
(11)LIKE 操作符
用于在WHERE子句中搜索列中的指定模式。
语法:

SELECT  column_name(s)
FROM  table_name
WHERE  column_name  LIKE  pattern;

(12)通配符
%:替代0个或多个字符
-:替代一个字符
(13)IN操作符
允许在 WHERE 子句中规定多个值
语法:

SELECT  column_name(s)
FROM  table_name
WHERE  column_name  IN  (value1,value2,...);

(14)BETWEEN操作符
选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
语法:

SELECT  column_name(s)
FROM  table_name
WHERE  column_name  BETWEEN  value1  AND  value2;

(15)ORDER BY关键字
用于对结果集按照一个列或者多个列进行排序。
默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用DESC(降序)关键字。此外还有ASC(升序)

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

(16)连接(JOIN)
join用于把来自两个或多个表的行结合起来

INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行

(17)UNION操作符
用于合并两个或多个SELECT语句的结果集
默认地,UNION操作符选取不同的值。如果允许重复的值,请使用UNION ALL。

SELECT  column_name(s)  FROM  table1
UNION
SELECT  column_name(s)  FROM  table2;

1>UNION ALL语法

SELECT  column_name(s)  FROM  table1
UNION  ALL
SELECT  column_name(s)  FROM  table2;

UNION结果集中的列名总是等于UNION中第一个 SELECT 语句中的列名
(18)SELECT INTO 语句

CREATE TABLE 新表
AS
SELECT * FROM 旧表 

二:视图、存储过程、函数、触发器、作业

1.视图
视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
(1)CREATE VIEW 语法:创建视图

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

(2)CREATE OR REPLACE VIEW 语法:更新视图

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

(3)DROP VIEW 语法:删除视图

DROP VIEW view_name

(4)视图分类
1>标准视图:使用最频繁的视图,不存储任何数据,不占用任何存储空间
2>索引视图:拥有唯一群集索引的视图被称为索引视图,它存储真实索引数据,占用一定的存储空间
3>分区视图:现在用分区表进行替代
2.存储过程
存储过程是事先编好的、存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。
(1)存储过程的类型
1>系统存储过程
系统存储过程是微软内置在SQL Server中的存储过程。在SQL Server中,系统存储过程位于master数据库中,以sp_前缀开头,并标记为System。
2>扩展存储过程
扩展存储过程是可以在SQL Server环境外执行的动态链接库来实现,以xp_前缀开头。
3>用户存储过程
用户存储过程用于用户数据库中的创建,通常用于与数据库的交互,用于完成特定数据库操作任务,可以接受和返回用户提供的参数,名称不能以 sp_ 开头
(2)存储过程的优点
1>减少网络流量
2>提高系统性能
3>安全性高
4>可重用型
5>可自动完成需要预先执行的任务
(3)创建存储过程

CREATE PROC[EDURE] <存储过程名称 -- 定义存储过程名称
[ @参数名称 参数类型]  -- 定义传值参数及类型
[=default][OUTPUT][,...n1] -- 定义参数的属性:默认值,返回值
AS
SQL 语句[,...n2]   --执行的操作

(4)查看存储过程

EXEC[UTE] {存储过程名称}    

(5)修改存储过程

ALTER PROC[EDURE] <存储过程名称> -- 定义修改存储过程名称
[ @参数名称 参数类型]  -- 定义传值参数及类型
[=default][OUTPUT][,...n1]  -- 定义参数的属性:默认值,返回值
AS
SQL 语句[,...n2]   -- 执行的操作

(6)删除存储过程

DROP PROC[EDUTE] <存储过程名称>  --删除存储过程名

(7)自定义函数
用户自定义函数是接受参数、执行操作并将操作结果以值的形式返回的子程序。返回值可以是单个标量值或结果集。
1>标量函数
标量型函数返回一个确定类型的标量值其返回值类型为除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP、table
外的其它数据类型。函数体语句定义在BEGIN-END语句内,其中包含了可以返回值的Transact-SQL 命令

create funetion 函数名(参数)
return 返回值数据类型
[with {Encryption | Schemabinding }]
[as]
begin
SQL语句(必须有return 变量或值)
End
Schemabinding :将函数绑定到它引用的对象上(注:函数一旦绑定,则不能删除、修改,除非删除绑定)

2>内联表值函数
内联表值型函数以表的形式返回一个返回值,即它返回的是一个表内联表值型函数没有由BEGIN-END 语句括起来的函数体。其返回的表由一个位于RETURN 子句中的SELECT 命令段从数据库中筛选出来。内联表值型函数功能相当于一个参数化的视图。

create function 函数名(参数)
returns table
[with{ Encryption | Schemabinding }]
as
return(一条SQL语句)

3>多语句表值函数
多声明表值型函数可以看作标量型和内联表值型函数的结合体。它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值的表中的数据是由函数体中的语句插入的

create function 函数名(参数)
return @dt table(列的定义)
[with{Encryption | Schemabinding}]
as
begin
SQL语句
end

(8).修改函数
使用ALTER FUNCTION语句可以修改用户自定义函数的定义,ALTER FUNCTION语句的语法及参数与CREATE FUNCTION的语法及参数类似
(9)删除自定义函数
使用DROP FUNCTION语句可以从当前数据库中删除一个或多个用户自定义函数。
3.游标
游标是一种处理数据的方法,具有对结果集进行逐行处理的能力。可以将游标看作一种特殊的指针,它与某个查询结果集相关联,可以指向结果集的任意位置,可以将数据放在数组、应用程序中或其他的地方,允许用户对指定位置的数据进行处理
(1)游标的使用步骤:(前4个步骤是必须的)
1>声明游标 DECLARE:将游标与 T-SQL 语句的结果集相关联,并定义游标的名称、类型和属性,如游标中的记录是否可以更新、删除
2>打开游标 OPEN:执行 T-SQL 语句以填充数据。
3>读取游标 FETCH:从游标的结果集中检索想要查看的行,进行逐步操作。
4>关闭游标 CLOSE:停止游标使用的查询,但并不删除游标的定义,可以使用 OPEN 再次打开。
5>释放游标 DEALLOCATE:删除资源并释放其占用的所有资源。
4.触发器
(1)作用
实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性
(2)特点
1>触发器不能被直接调用执行,它只能由事件触发而自动执行。
2>触发器是自动执行的,当用户对表中数据作了某些操作之后立即被触发。
3>触发器可通过数据库中的相关表实现级联更改,实现多个表之间数据的一致性和完整性。
4>触发器可以实现比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。
5>触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
(3)分类
1>DDL
主要包括 create alter drop
2>DML
主要包括 insert update delete
!!AFTER 触发器
AFTER触发器又称为后触发器,该类触发器是在触发操作(INSERT、UPDATE或 DELETE)后和处理完任何约束后激发。
此类触发器只能定义在表上,不能创建在视图上。可以为每个触发操作(INSERT,UPDATE或DELETE)创建多个AFTER触发器。
!!INSTEAD OF触发器
INSTEAD OF触发器又称为替代触发器,该类触发器代替触发动作进行激发,并在处理约束之前激发。
该类触发器既可定义在表上,也可定义在视图上。对于每个触发操作(UPDATE、DELETE 和 INSERT),每个表或视图只能定义一个 INSTEAD OF 触发器。
!!CLR 触发器
CLR 触发器可以是 AFTER 触发器或 INSTEAD OF 触发器。CLR 触发器还可以是 DDL 触发器。CLR 触发器将执行在托管代码中编写的方法,而不用执行 Transact-SQL 存储过程。
5.作业
(1)打开SqlServer数据库,点开SqlServer代理,在代理下找到作业,右击作业选择新建作业。

(2)点击步骤选项卡,在这里选择新建按钮,来创建作业的内容。
点击新建后,在弹出的窗口中,输入步骤名称、执行类型、数据库及命令脚本。如图所示:输入好后,点击确定按钮即可。

(3)点击计划选项卡,在这里选择新建按钮、创建计划

(4)启动我们的作业的服务,然后我们就可以看到下面的效果啦


茶色岛
62 声望1 粉丝