我对sql2005的认识
在以前的学习过程中接触的sql知识点主要包括:
1:数据库的基本知识 2:数据库数据类型 3:sql基本逻辑控制语句 4:对数据表的基本操作包括增删改查。 5:创建索引和视图以及事务 6:存储过程 7:触发器
1:数据库的基本知识
包括数据库的创建和删除,数据表的创建和操作,添加约束,数据库的三大范式。数据库E-R图,添加登陆用户,和简单的授权。
对表的操作,包括增加字段,修改字段名字,修改字段类型,删除表。
2:数据类型:
(1)二进制数据类型
二进制数据包括 Binary、Varbinary 和 Image
(2)字符数据类型
字符数据的类型包括 Char,Varchar 和 Text
(3)Unicode 数据类型
Unicode 数据类型包括 Nchar,Nvarchar 和Ntext
(4)日期和时间数据类型
日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型
(5)数字数据类型
Int ,bigint,tinyint
(6)货币数据表示正的或者负的货币数量
Money 和 Smallmoney
(7)浮点型数据,主要是float类型
(8)逻辑数据类型,主要有bit
(9)新的xml数据类型
3:sql基本的逻辑控制语句
用的最多的就是以下三种:
If xxx
Begin
T-SQL
End
Else
Begin
T-SQL
END
GO
While(条件)
Begin
T-SQL
Break
End
4:对数据表的增删改查操作。
删除和修改都是在查询的基础上实现的,所以查询是学校练得最多的,主要有子查询,表链接查询,表连接又分为内连接(inner join on)左连接(left join on 以左表为准,包含所有左表字段),右连接(right join on 包含全部右表字段)全连接(full join on 包含两张表字段)
查找语法通常包含以下子句:select 子句,from 子句,where ,group by, having ,order by 等。
查询语句通常还有like关键字,进行模糊查询。Case 关键字进行条件判断返回多个结果之一。
插入主要语法格式:insert into tablename (column name) values(‘’,’’)
批量插入语法:insert into tablename (column name) select column name from xxxx
Select into 语句把数据插入一张新表中。
当修改时基于别的表数据进行修改时:Update tablename set xxxxx from tables name where xxxxx
对于删除,基本格式:delete from table where xxxxxx
5: 创建索引和视图以及事务
我对索引的理解就是,帮助更快查找数据库中数据的东西,相当于目录作用。
通常索引建立在需要频繁访问的字段,而且数据重复度小的数据。但使用索引会减低操作的速度,同时存储上也需要更多的空间,所以索引页不是越多越好。
索引用的最多的就是,聚集(cultered)索引和非聚集(noncultered)索引。
其中一个表只有一个聚集索引,聚集索引改变数据的物理排序顺序,使索引和数据物理排列顺序相同。
非聚集索引能有多个,最多249个,数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。
创建索引的语句:create [CLUSTERED|NONCLUSTERED]
Index index_name
ON table_name (column_name…)
对于视图,视图是一张虚表,使用视图可以保护数据,可以从几张物理表中把需要的数据抽出来,组成一张虚拟表,降低数据库的复杂度。
语句:create view view-name as T-SQL
事务是一个不可分割的执行单元,要嘛全部执行,要嘛全部回滚。通常用于强制的业务。比如汇款之类的。
开始事务:begin transaction,
回滚事务:rollback transaction
提交事务: commit transaction
6:存储过程
存储过程是一个语句块,里面可以包含输入输出参数,逻辑控制语句,sql语句等等。
存储过程是一组预编译的sql,编译一次后,以后调用不用再编译。所以存储过程相对更加高效。
基本语句
Create procedure xxx
参数
As
Sql语句
Go
调用存储过程:exec xxx 参数
修改存储过程:alter proc xxx
As
Sql语句
Go
删除存储过程: drop procedure xxx
7:触发器
触发器是特殊的存储过程,不能被调用,是会自动执行的,触发器分成三种:insert触发器,update 触发器,delete触发器。触发器在触发时,会建一张虚拟表,如inserted,updated表,对表的操作会首先记录在这些表里,如果操作合法就执行,否则不执行。
语句:
Create trigger trigger_name
ON table_name
FOR [DELETE, INSERT, UPDATE]
AS
T-SQL语句
GO
来公司第一天,老大又让我们看了些东西,所以做出如下补充:
新知识:1,用户自定义函数 2:游标的基本知识,还没用过 3;delete和truncate的区别。
1:用户自定义函数
自定义函数和存储过程很相识,都有参数,有逻辑语句,有sql语句,不同的是用户自定义函数不能进行表操作。
用户自定义函数包括:标量函数,内敛表值函数和多语句表函数
创建的语句为: create function xxxx(@参数名 参数数据类型)
Return 返回值的数据类型(内联表值函数返回值为table类型)
As
Begin
Sql语句
Return 返回的对象
End
Go
调用自定义函数: select xxxx(参数)
调用自定义函数: select 数据库名。dbo.函数名(传入参数)
内联表值函数:
和标量函数唯一不同是,内敛表只能返回table类型。
多语句表函数需要显示的定义表的结构,所以它的使用会比内联复杂,但他能容纳更多的语句,游标等等。
2:游标
游标的作用是循环遍历一个集合,按指定的标准选择数据。
游标的使用包括:1,声明游标 declare xxx curson for select * from …..
2,打开游标 open xxx
3,使用游标读取数据 fectch next from xxx into @别名
While @@fecth_status=0
4:关闭释放游标 close xxx deallocate xxx
3:delete和truncate的区别
Truncate 相当于不加条件的delete语句,但执行的速度更快,因为truncate不需要记录日志,而且delete是一行一行的删,而truncate是释放所有数据和数据页的关系,但如果有事务,一定要用delete。