森纵培训第二十七天课程总结



约束:
为了增强表的安全性(在数据库中创建的用户表必须安全),需要对表中的每列数进行约束。
约束方式有两种:1.建表时设置约束    2建表后追加约束

当应用程序访问数据库时,还要注意的是,如果是数据库设计方面的操作,一定要在数据库中
完成,而不能借用其他形式(如在应用程序中操作);

单表五类约束,多表一类约束;

第一类单表约束:可空、非空约束
 null,默认可空,用来约束列的,标明这列数据可有可无;
 not null,非空,用来约束列的,标明这列数据必须有;
例:在数据库mydb中设计student表:
if exists(select name from sysobjects where name='student' and
xtype='u')
drop table student
go
create table student
(
 sid char(10) not null,
 sname nvarchar(10) not null,
 sage int not null,
 ssex nchar(1) not null,
 sdesc nvarchar(500),
)
go

创建表之后,向表中添加行记录,使用关键字insert(添加一条记录);
insert into student values('2009010470','索强',26,'男','无')
go
再向表中添加一条数据
insert into student(sid,sname,sage,ssex) values('2009010444','索小强',24,'男')
go
再向表中添加一条数据
insert into student(sid,sage,sname,ssex) values('2009010010',23,'张三','男')
go
以上三条插入语句都是正确的,再向表中插入一条数据:
insert into student(sid,sname,sage) values('2009000111','李四',21)
go
执行后出现错误,因为表中定义ssex不允许为空值

以上用到的可空约束和非空约束是几类约束最简单的,也是最常用的,这类约束需要在建表时就
设置,不合适用于追加。

第二类单表约束:
主键约束:primary key
它的作用是用来标记行的唯一性,即某行记录与其他所有行记录不同。
要求对于任何一个表,都要设计主键约束,而且一个表中只有一个主键约束。
选择主键约束时是按照实际逻辑关系进行选择哪一列为主键约束
表中做为主键的列,可以是单列,也可以是多列(称为复合主键或联合主键),在sqlserver中不建议
使用复合主键
约束的要素:
 1.约束名称,可以由用户定义,如果用户不定义,则由服务器自动命名;
 2.约束类型
给student表中的sid列添加主键约束的代码:
create table student
(
sid char(10) not null constraint pk_student primary key,
sname nvarchar(10) not null,
sage int not null,
ssex nchar(1) not null,
sdesc nvarchar(500) null,
)
sid也可以改为:sid char(10) not null primary key,
还可以改为:sid char(10) primary key,与not null约束存在时没有任何变化
表中符合主键约束列的条件:1.唯一  2.非空

sqlserver中使用中文的一些问题:
 1.全方位支持中文,各类数据库对象的名称,
 2.如果对象名或列名使用了中文,通常按照习惯,用[]括起来。
 3.[my table]  select * from [我的table]
 
主键列的几种形式:
1.字符型主键列数据,其内容需要用户输入,无论是否包括中文;
 a.如果不包括中文,则使用单字节字符编码
 b.如果数据中有中文存在,则一定要使用双字节编码
 c.如果是变长的数据,也以按照以上两点执行。
2.整数自增型数据作为主键
 a.sqlserver中的自增属性,此技术在mysql(increment)和oracle(sequence)也都存在;用法为提供
   一个种子和一个增量,每添加一行记录,此列就会增大或减小。
 b.在数据值数据中,只有整型数据可以作主键,实数不行。
 c.整数作主键,只是唯一非空即可,不一定非自增。
例:建表worker
use mydb
go
if exists(select name from sysobjects where name='worker' and xtype='u')
drop table worker
go
create table worker
(
 wid int identity(1,1) primary key,
 wname nvarchar(6) not null,
)
go
一旦表中的主键列设置为identity自增属性,则在添加数据时,此列数据不需要添加,它会自动插入数据。
向表中添加两行记录:
insert into worker(wname) values('张三')
insert into worker(wname) values('李四')
go
当自增中的种子和增量都为1时,显式体现可以省略。

3.用全局唯一性标识符类型作主键:
创建网站上常用的注册用户表,包括了主键,用户名,密码等信息。
if exists(select name from sysobjects where name='users'
and xtype='u')
drop table users
go
create table users
(
 userid uniqueidentifier primary key,
 username nvarchar(20) not null,
 password varchar(20) not null,
 --..
)
go
向表中添加若干记录:
insert into users values(newid(),'admin','admin')
insert into users values(newid(),'member','member')
go

主键约束的另一种操作形式,建表后向表中追加。
如果表中已经存在了主键约束,就不能继续向表中追加了;当追加约束时,如果表中已经有了记录,
如果记录中有不符合主键约束的条件,仍然追加不上。
向表中追加约束的过程,相当于修改了表的结构,使用关键字alter
例:创建student表如下
create table student
(
sid char(10) not null,
sname nvarchar(10) not null,
--....
)
go
此表中没有主键约束,按照sqlserver的要求追加一个
alter table student add
constraint pk_student
primary key(sid)
go
删除约束:(可删除任何类型的约束,只需要提供约束名称,可以一次性删除多个、多种);
alter table student drop constraint pk_student
go

批量插入记录:
将提供的数据,将其存入一个文本文件f:/data.sql文本中,如下
2001010010 张三
2001020020 李四
建表如下:
if exists(select name from sysobjects where name='emp' and xtype='u')
drop table emp
go
create table emp
(
eid char(10) primary key,
ename nvarchar(10) not null,
)
go
将数据文件中的数据批量导入到表中:
bulk insert emp from 'f:/data.sql'
go
如果文本中的数据列与列之间不是用默认的TAB键间隔,是其他字符,则使用bulk insert命令中更全面的部分;
如列与列之间的间隔为分号:
2001010010;张三
2001020020;李四
使用批量插入命令:
bulk insert emp from 'f:/data.sql'
with
(
fieldterminator=';',
rowterminator='\n'
)
go

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值