日期:2014-05-16  浏览次数:20495 次

SqlServer数据库所有知识总汇
--if exists(select * from sys.databases where name='test')
-- drop database test
--go
--
--create database test
--on primary
--(
--name='test_dat',
--filename='D:\DB\test_dat.mdf',
--size=5MB,
--maxsize=20MB,
--filegrowth=1MB
--),
--(
--name='test_dat2',
--filename='D:\DB\test_dat2.ndf',
--size=5MB,
--maxsize=20MB,
--filegrowth=1MB
--)
--log on
--(
--name='test_log',
--filename='D:\DB\test_log.ldf',
--size=5MB,
--maxsize=20MB,
--filegrowth=1MB
--)
--go
--use test
--go
--
--create table school
--(
--id int primary key identity(1,1),
--sname varchar(20) not null
--)
--go
--insert into school values('农安十中')
--insert into school values('试验中学')
--go

select * from school
--create table classes 
--( 
--id int identity(1,1), 
--tname varchar(20) not null,
--sid int 
--) 
--create table users
--(
--id int primary key identity(1,1),
--uname varchar(20),
--upass varchar(20)
--)
select * from school
select * from classes
select * from users
--常见系统存储过程
exec sp_databases---显示服务器上所有的数据库
exec sp_helpdb zf----显示某一个或者所有的数据库的信息
exec sp_renamedb 'zf', 'zf2' ---修改数据库的名称
exec sp_tables ---显示所有的表
exec sp_columns users ---显示某一个表的所有列的信息
exec sp_help users ----显示某个表的所有信息
exec sp_helpconstraint users   ----查看某一个表的约束
exec sp_helpindex users ---查看某一个表的索引
exec sp_stored_procedures users  ---查看某一个表的存储过程
exec sp_helptext my_view_users ---查看未加密的存储过程,触发器或者试图的实际文本
exec sp_rename 'users.uname','username' ----给表或者表的字段重命名:sp_rename '表名[.字段名]','newname'
---doc存储过程
exec xp_cmdshell 'mkdir D:\aa',no_output
exec xp_cmdshell 'rd D:\aa' 
EXEC xp_cmdshell 'dir *.exe'
---启用xp_cmdshell
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO



---------------------------------------------------------------------------------------------------------------------------------------------------
--主键??
--1保证你每行数据都是唯一值的那个列,这个列不能为空,也不能重复出现相同的值,你可以理解成人的身份证号码,网卡的地址号码,以及公司的税务号码,他们都是唯一而且必须有的。
--2主键的值不可重复,也不可为空(NULL)。
--3主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。
--4作用:加快数据库的操作速度
--5一个表里可以设两个(或者多个)主键 但是SQL只允许一个主键
--外键?
--1外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
--   例如:班级表(Class as B) [cid ,cname] 学生表(Student as A) [sid ,name ,cid]  那么就是班级是主表,学生是子表。
--2外建也是一种约束的
--3 外键必须是另一个表的主键

--试图
--1视图是从一个特定的角度来查看数据库中的数据,
--2一个视图是由SELECT查询语句组成的虚拟表。视图包含一系列的列和行。但是,视图不存储真实数据。 只是在引用时动态生成
--3视图是由一张或多张表中的数据组成的
--4单个表的试图的可以执行操作而且直接影响到对应的表,多个表的试图不能进行操作,只可以查看
--5视图是存储在数据库中的查询的SQL 语句,属于定制数据的机制,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,将重要的数据列过滤掉;另一原因是可使复杂的查询易于理解和使用。
--优点:
--1视图集中即是使用户只关心它感兴趣的某些特定数据和他们所负责的特定任务
--2视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可
--3视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。因此,当有许多不同水平的用户共用同一数据库时,这显得极为重要。
--4视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据
--left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。 
--right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。 
--inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。 
--full join:外连接,返回两个表中的行:left join + right join 
--cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。 
create view my_view_users 
as 
select * from users

--存储过程
--是SQL语句和控制流语句的预编译集合。
--存储过程已经经过编译,只需执行它就可以。
--用户通过名字指定存储过程并给出参数
--存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
--存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。
--优点:
--通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
--存储过程可以简化运行提高效率
--存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。 
--存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。 
--示例:
--存储过程实现登录
--create proc user_login
[email=--@uname]--@uname[/email] varchar(20),
[email=--@upass]--@upass[/email] varchar(20),
[email=--@flag]--@flag[/email] varchar(20) output
--as
--begin
--if exists(select * from users where [email=uname=@uname]uname=@uname[/email])
--begin
-- if exists(select * from users where [email=uname=@uname]uname=@uname[/email] and [email=upass=@upass]upass=@upass[/email])
--  set @flag='登录成功'
-- else
-- set @flag=