SQLServer数据库操作总结(sql语法的使用)(二)

2014-11-24 11:13:17 · 作者: · 浏览: 8
果表已存在
alter table student
add constraint pk_student
primary key (sno)

2.4.3 创建唯一性约束

操作:在student表中,创建“sphone”字段惟一性约束,并且将约束命名为uq_sphone

alter   table   student 
     add   constraint   uq_sphone
     unique  (sphone)

2.4.4 创建外键约束

create  table  sc
( sno     char ( 6 )  not  null   references   student ( sno ),
  cno     char ( 3 ),  
  grade   tinyint
  primary  key (sno,cno), 
  foreign  key  ( cno )   references  course ( cno )
)

2.4.5 创建检查约束

操作1:在student表中,设置名为ck_student的检查约束,该约束限制“性别”为man或woman

alter   table  student 
     add   constraint   ck_student
     check  (sex=man or sex=woman)
操作2:在学生与课程表sc中,添加名ck_sc j的检查约束,该约束限制“成绩”在0到100之间
 alter   table   sc
add  constraint  ck_sc
check   (grade>=0 and grade<=100)

2.4.6 设置默认约束

操作1:新建表时添加

create table student
(
name char(6) not null,
age int(10) null,
sex char(5) default 'man'
)
操作2:修改已有的表
alter   table   student 
     add   constraint   df_student
     default  'man'  for  sex

2.4.7 创建约束小结

create   table   student 
       (sno  char (6)  not  null ,  
        sname   char (8)  not  null ,
        ssex     bit ,  电话     char(11)  )
alter   table   xsqk
        add   constraint   pk_xsqk_xh  primary  key   (学号),
              constraint   df_xsqk_xb   default  1  for  性别,
              constraint   ck_xsqk_xb  check   (性别=1 or 性别=0 ),
              constraint   uq_xsqk_dh  unique  (电话)
create   table   student 
( sno     char (6)    primary  key (学号) check  (学号  like  '[0-9] [0-9] [0-9] [0-9] [0-9] [0-9]'),
  sname   char (8)    not  null ,
  ssex    bit         default 1     check (ssex=0 or ssex=1) ,
  sphone  char(11)    unique (sphone) 
)

2.4.8 删除约束

alter  table student drop  constraint   pk_xsqk_xh
alter  table student drop  constraint   uq_xsqk_dh
alter  table student drop  constraint   ck_xsqk _xb
alter  table student drop  constraint   ck_xsqk _xh
alter  table student drop  constraint   df_xsqk_xb 

2.5 修改基本表

2.5.1 增加列

语法: alter table 表名 add <列定义>[<列约束>][ ,……n ]
关于“标识列”: 每个表中都可以有一个标识列,其作用是由系统自动生成能标识表中每一行数据的惟一序列值。(其实可以理解为行号)
“标识列”定义格式: identity [ (seed, increment) ] 说明:seed为初始值,increment为增长的步长。意思就是你从几开始增长,每次增长几。省略时,初始值为1,步长为1.
操作:在student表中,增加三列
alter   table  student
add   address  char(10)   constraint  df_xsqk_jg   default ‘shanghai’ ,
      email  varchar(30),  
      number  int  identity
go

2.5.2 修改列


语法: alter table 表名 alter column 列名 新类型[(长度[,小数位数])]
操作1:将sc表的grade列的数据类型修改为numeric(4,1)
alter table sc 
alter column grade numeric(4,1)

操作2:将sc表的grade列的数据类型修改为int
alter table sc
alter column grade int

注意:

1.不能修改text、image、ntext、gimestamp类型的列;
2.不能修改类型是varchar、nvarchar、varbinary的列的数据类型,但可增加其长度。
3.不能修改是主键、外键列的类型,但可增加其长度;
4.不能修改包含索引、有默认值、检查约束和惟一性约束列的类型,但可增加其长度。
5.不能修改用列表达式定义或被引用在列表达式中的列。
6.不能修改复制列。

2.5.3 修改表中的数据

语法:

update 表名
set {列名 = 表达式 | null | default } [ , … n ] )
[ where 逻辑表达式 ]

操作:将sc表中的课程号为101的成绩不及格的学生的成绩都加上10分

update sc
set grade = grade + 10
where ( cno = '101' and grade < 60)

2.6 删除基本表

2.6.1 删除列

注意:若列上有约束,所以应先删除该约束后,再删除该列。
语法: alter table 表名 drop column 列名
操作:
--先删除表中的约束
Alter   table   student    drop   constraint   df_xsqk_jg
--再删除表中的列
Alter   table   student    drop   column     address,email,number  

2.6.2 删除行


语法: delete [from]表名
[ where 逻辑表达式 ]
操作:删除student表中姓名为zhangsan的数据记录
delete from student where name = 'zhangsan'

2.6.3 重命名数据表


语法: exec sp_rename '表名','新表名'
操作:将student表重命名为rename_student
exec sp_rename ‘student’,'rename_student'

2.6.4 删除数据表

注意:如果要删除的表T1是其他表T2的参照表,即如果T2有外键约束,参照了T1的数据项,则不能删除。需要先取消T2表中的外键约束载删除T1,或者先删除T2表再删除T1表。
语法: drop table 表名[ ,……n ]

操作:已知sc表设置了外键约束,参照了表student和表course,现在要删除student表和course表。
Drop  table   sc 
go
Drop  table    student ,cour