posts - 0, comments - 77, trackbacks - 0, articles - 356
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

sqlserver2005基本操作

Posted on 2008-02-24 16:38 semovy 阅读(1035) 评论(0)  编辑  收藏 所属分类: MS SQLServer方面

exec sp_renamedb 'Mytest','Mytest'--对数据库重命名
go
--修改数据库属性,设置为只读
exec sp_dboption 'Mytest','read only',false--true
go
--设置数据库为自动压缩
exec sp_dboption 'Mytest',autoshrink ,true--false
--收缩数据库的大小
DBCC shrinkdatabase ('Mytest',10)--将压缩数据库Mytest的大小,以使userdb中文件有10MB的可用空间
go
--分离数据库
exec sp_detach_db 'Mytest'
--附加数据库
exec sp_attach_db @dbname='Mytest',
                   @filename1='D:\Mytest\DB_data.mdf',
                   @filename2='D:\Mytest\DB_data.ldf';
--数据库的备份
go
exec sp_addumpdevice 'disk','mydiskdump','d:\Mytest\Mytest.dat'--创建磁盘设备逻辑名
backup database Mytest to mydiskdump
go
--数据库的恢复
restore database 'Mytest'from mydiskdump
go
exec sp_dropdevice 'mydiskdump'
--查看数据库
sp_helpdb,sp_helpfilegroup,sp_database;
use Mytest
go

if exists (select *from sysobjects where name='Student')
--if object_id('Student','u')is not null)
drop table Student
create table Student
(
   Student_no   int   identity(1000,1),--自动增长 indentity(seed,increment) seed是基数据,increment是增长的速率,系统自动为该列添加数据
   Student_name varchar(20)
)
--两种插入数据的方法
insert into Student values('wubo')
insert into Student select 'zhang' union select 'lin'
--添加主键约束
alter table Student add constraint s_pk primary key (Student_no)
--察看数据库mytest的信息
sp_helpdb mytest--或者sp_databases Mytest
select *from Student
--------------------------------------------------------------------
if exists (select *from sysobjects where name='Course')
drop table Course
create table Course
(
Course_no   int identity(1000,1),
Course_name varchar(20),

)
--设置服务器的identity关键字可以插入数据
set identity_insert course on
set identity_insert course off
insert into Course values( 'c','zhang')
insert into Course select 'java' union select 'c++'
select *From Course
--添加约束公式
alter table table_name add constraint constraint_name constraint_type(column_name)
**********
alter table Course add constraint C_pk primary key (Course_no)
--察看约束公式
exec sp_helpconstraint table_name
**********
exec sp_helpconstraint Course
--删除主键约束
alter table Course drop C_pk
--添加外键约束
alter table table_name add constraint constraint_name foreign key (column_name) references referenced_table(referenced_table's column_name)
--添加列并指定默认值为NULL,以前没有该列的数据都设置为NULL
alter table Course add Course_teacher varchar(20) default null
--删除列
alter table Course drop column Course_teacher
--重命名列
exec sp_rename 'Course.Course_teacher','Course_teacher', 'column'
--重命名表
exec sp_rename 'Course','NewCourse'
--复制表又复制数据,先创建表然后再复制数据,自增和NOT NULL可以复制,别的约束不能复制
select * into temp1 from Course
--只复制表结构
select *into temp from Course where 1>2
--删除表中元素,不能删除被引用的数据,用以确保引用完整性
delete from Course where Course_name='c++'
/****************************************************/
--这两种方法不能被外键引用,不可带条件删除
--删除表中所有元素,写日志
delete table Course
--删除表中所有数据,不写日志,不安全
truncate table Course
/***************************************************/
--模式匹配,%匹配任何字符串,_匹配任何一个字符,模式是大小写敏感的
select *from Course where Course_name like 'c%'--只要第一个为c的字母就可以匹配
select *from Course where Course_name like 'c_+'--这个字符串有三个字符,第二个字符可以使任意的
select *from Course where Course_no between 1000 and 1002
/***************************************************/
--外键操作
create table dept
(
   d_id int primary key,
   d_name varchar(20)
)
create table emp
(
   e_id int primary key,
   e_name varchar(20),
   e_no int foreign key references dept(d_id) on update cascade on delete cascade
)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。
--外健的建立是在主表建立外健的列是唯一属性的情况下才能建立
--on delete no action 无级连更新,删除时外键冲突报错并回滚delete
--on update no action 无级连更新,更新时外键冲突报错并回滚update
--on delete cascade 删除时可以级联删除
--on update cascade 更新时可以级联更新
--删除数据时,先删除主表的数据,然后删除从表的数据,主表是:被引用的表,从表是:引用的表
--插入数据时,先插入被引用的表,然后插入引用的表、
/***************************多表查询与聚合****************************/
create table company
(
c_id int primary key,
c_name varchar(20),
c_tel varchar(20)
)
create table dept
(
d_id int primary key,
d_name varchar(20),
d_tel varchar(20),
d_no int foreign key references company(c_id)
)
create table emp
(
e_id int primary key,
e_name varchar(20),
e_tel varchar(20),
e_no int foreign key references dept(d_id)
)
--插入数据
insert into company select 1000,'sun','110'
               union select 1001,'ibm','120'
               union select 1002,'mir','130'
               union select 1003,'top','140'
               union select 1004,'mos','150'
insert into dept select 1,'hr','1100',1000
            union select 2,'money','1200',1000
            union select 3,'kaifa','1300',1000
            union select 4,'zuzhi','1400',1000
insert into emp select 100,'wubo','1',1
          union select 101,'zhang','2',2
          union select 102,'lin','3',3
          union select 103,'linbo','4',4
select *from company
select *from dept
select *from emp
select * from emp left outer join dept on emp.e_no=dept.d_id left outer join company on dept.d_no=company.c_id
--左连接运算时,左边的在运算后全部存在,右边的不匹配的用NULL表示
select emp.e_id,emp.e_name from emp left outer join dept on emp.e_no=dept.d_id
--右连接运算时,右表的在运算后全部存在,左边的不匹配的用NULL表示
select * from dept right outer join emp on emp.e_no=dept.d_id
--全连接
select *from dept full join emp on emp.e_no=dept.d_id
--交叉连接(笛卡尔积)
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小
select e.employeeid, d.name as department from humanresources.employee e cross joinh umanresources.department d order by e.employeeid, d.name
--内连接:仅显示两的连接表中的匹配行的连接
select * from goods inner join provider on goods.provider_id=provider.provider_id
--联合查询:
联合查询 union all关键字.
(1)将两个或更多查询的结果合并为单个结果集,该结果集包含联合查询中的所有查询的全部行。UNION 运算不同于使用联接合并两个表中的列的运算。
(2) 下面列出了使用 UNION 合并两个查询结果集的基本规则:
        所有查询中的列数和列的顺序必须相同。
        数据类型必须兼容。
(3) all 参数:将全部行并入结果中。其中包括重复行。如果未指定该参数,则删除重复行
------------------------------------------------------------------
--自引用问题
create table employ
(
e_id int primary key,
e_name varchar(23),
e_tel varchar(23),
e_high int foreign key references employ(e_id)
)
insert into employ select 1,'wubo','13484623684',null
             union select 2,'zhang','13772436004',1
             union select 3,'lin','12345678945',1
             union select 4,'bolin','231456789',2
select *From employ
select *from employ e inner join employ m on e.e_id=m.e_high





sqlserver2005基础知识
2007-05-29 15:55

--创建数据库:
use master
--两种判断数据库是否存在的方法
if db_id('Mytest')is not null******(if exists(select *from sysdatabases where name='Mytest'))
drop database Mytest
go
--exec xp_cmdshell 'mkdir D:\Mytest'--调用DOS命令创建文件夹
--sql server2005种有三种类型文件
主数据文件.mdf,次要数据文件.ndf,日志文件.ldf
create database Mytest
on
(name=Mytest_dat,
filename='D:\Mytest\DB_data.mdf',
--CREATE DATABASE 失败。
--主文件必须至少是 3 MB 才能容纳模型数据库的副本,创建主数据文件
size=3mb,
--maxsize=??可以规定最大值当没有设置此项的时候,说明数据库是无限增长的
filegrowth=1mb 当文件大于设置的size时,文件增长的大小为1Mb
)
log on--创建日志文件           --Log文件的设置项和主文件的设置项一样的
(
name=Mytest_log,
filename='D:\Mytest\DB_data.ldf',
size=1mb,
--maxsize=??可以规定最大值
filegrowth=1mb


只有注册用户登录后才能发表评论。


网站导航: