09.09.11 数据库操作
关于数据库操作,本人在下一篇文章,有各位大哥挺我,我怕谁!!呵呵呵~~~~~~~
sql语言
一:基本概念
A 1 数据库:数据和数据库对象的集合。每一条数据具有相同格式。
2 表:数据库的对象之一,包含所有数据库的数据,一个数据库由多个表构成,每个表中存储具有共同属性的数据,表于标之间存在关联。
3 记录:数据库划分的单元,即表中的行。
4 字段:一条记录被划分为几个字段,每一个字段保存一种特定的数据。
二 完整性概念
A 实体完整性
行的完整性(primary unique identity)
1 primary 主键约束
在一个表中可以有一列或多列的组合,其值唯一地标识表中的一行
1.1)一个表中只能有一个primary key约束
1.2)pk不能取空
1.3)如何pk是由多列组成,则某一列可以重复,但所有列的组合不能重复。
创建pk方法
利用sql语句创建pk
在创建表时
create table 表名
(
列名 列类型 [constraint 约束名] primary key
--如果是多列 在最后加 [constraint 约束名] primary key(列名1,列名2)
)
创建完表以后创建pk
alter table 表名
add [constraint 约束名] primary key(列名1,列名2,)
删除pk
alter table 表名
drop constraint 约束名
2 unique 唯一约束
使用创建方法和pk相似,不允许表中对应字段存在重复值。
两者的区别如下
1) 一个表只能创建一个pk约束,但一个表可以根据需要对不同的列创建若干个unique约束
2)pk字段不允许为null ,unique允许为空
3)一般创建pk约束时,系统自动产生簇索引,unique约束自动产非簇索引
3 identity标识列 一个表中只能有一个标识列
据类型必须是 int、bigint、smallint、tinyint 或 decimal 数据类型,或者小数位数为 0 的 numeric 数据类型
identity(初始值,增量)
B 域完整性(列完整性)
列完整性,指定列输入的有效性。(check约束,default约束)
1 check 检查约束
建立约束:
1)通过企业管理器创建与删除check约束
2)语法:[constraint 约束名] check(逻辑表达式)
create table t
(
学分 tinyint check(学分>=0 and 学分<=10),
性别 char(2) constraint t_xb check(性别='男' or 性别='女')
)
3)建完表以后增加约束
alter table 表名
add constraint 约束名 check(表达式)
4)利用sql语句删除约束
alter table 表名
drop constraint 约束名
2 default 默认值约束
建立默认值约束
语法:[constraint 约束名] default(表达式)
学分 tinyint check(学分>=0 and 学分<=10) constraint df default 0
删除默认值约束
语法:
alter table 表名
drop constraint 约束名
C 参照完整性
1 禁止在从表中插入包含主表中不存在的关键字的数据行
2 禁止会导致从表中的响应值孤立的主表中的外关键字值改变
3 禁止删除在从表中的由对应记录的主表记录
对两个相关联的表(主表与从表)进行数据插入和删除时,通过参照完整性保证他们之间数据的一致性
利用foreign key定义从表的外键,pk或unique约束定义主表的主键或唯一键(不允许为空),可以实现
主从表的参照完整性
1 利用企业管理器定义参照关系
2 利用sql语句建立关系
在创建表同时
create table 表名
(
列名 列数据类型 [foreign key]
references 主表名(对应的主键列名)
)
通过修改表增加外键约束
alter table 表名
add constraint 约束名
foreign key (列名)
references 主表名(对应的主键列名)
3 利用sql删除约束
alter table 表名
drop constraint 约束名
D 用户定义的完整性
三 数据类型
A 整数类型:int/intger smallint tinyint bigint
B 浮点数据类型 real float decimal numeric
C 二进制数据类型 binary varbinary
D 逻辑数据类型 bit
E 字符数据类型 char:10个字节,固定长度2个字节存一个汉字,取值1-8000
nchar:一个字节存一个汉字,取值1-4000
varchar:10个字节,不固定长度,动态分配,1-8000
nvarchar:一个字节存一个汉字,动态分配,1-4000
F 文本和图形数据类型
text ntext image
G 时间日期数据类型
1 datetime/smaldatetime:时间日期的结合体
H 货币数据类型
1 money/mallmoney
I 用户自定义数据类型
语法:
sp_addtype 数据类型,数据名称,约束
例:use master
exec sp_addtype birthday,datetime,'null/not null'
四 SQL语言
A 数据定义语言
1 create:创建
1)创建数据库和表:
例:
--创建数据库
create database --关键词
student--库名
on--库文件
(name='stu',filename='f:/f/stu_dat.mdf')
log on--日志文件
(name='stulog',filename='f:/f/stu_log.ldf')
--创建表
create table --关键词
stu--表名
(stuno varchar(10),stuname varchar(10),stuage int,stusex char)--表内的每一个字段
2 alter:
1)修改数据库
alter database--关键词
student--库名
add--添加文件
remove--删除文件
modify--更改文件
2)修改表
add/drop/
3 drop:删除
drop database student,stu--数据库名
drop database stu,stu--表名
drop database student.dbo.stu--删除别的库内的表
B 数据操纵语言
1 插入数据:insert into
values:
使用:
use student
insert into values('1001','张三','1988-11-15')
2 select 查询子句
例:
use student
insert into
select --查询
top 5 --前5行
stuno,stuname,stusex,stutime--查询的列
3 更新数据
例:
update --关键词
student--表名
set --每一项关键词
stuname='周学良',stuage='21'--每一项
where--条件关键词
stuno='5158'--条件构成
注意:这是更新单条数据;更新多条数据:例:把每个人的成绩都加10分
那么每一项就为:score=score+10
4 删除数据
1)例:
delete from
student--表名
where stuno='5158'--删除条件
2)删除全部记录:truncate student
5 查询数据
1)选择列
例:use student
Select stuno,stuname,stuage
2) 使用‘*’查询所用列
例:use student—库名
Select*from stu—表名
3)选择行
用where子句
例:
Use student
Select stuno,stuname from stu
Where stuno>’20’ and stuno<’30’
使用distinct 消除重复
select distinct sno from score
使用 in 条件为。。。
例:select degree from score
where cno in('3-245')
6 查询结果排序
1)使用order
select*from score
order by—关键词
degree—一degree排序
desc升序/asc降序
2)使用top 查询前n行或前n%行的数据
select top 4 degree,sno,cno from score
order by degree desc
7 聚合函数
使用group by分组
例:
select degree
from score
group by degree
order by degree desc
注意:分组条件用having而不用here
例: 查询‘3-105’号课程的平均分。228
SELECT cno,AVG(DEGREE)AS 平均分
FROM [score]
GROUP BY cno
HAVING Cno='3-105'
1)avg—平均函数
select avg(degree),sno,cno
from score
group by sno,cno,degree
order by degree desc—以degree降序排列
2)sum—求和函数
3)max—求最大
4)min—求最小
5)count—返回组中项目的数量
例:select count(sno) from score
运行结果:12
例:去掉重复的
select count(distinct sno) from score
运行结果:6
C 数据控制语言
1 grant语句
作用:授予允许用户操作数据库的语句权限和对象权限
例:给用户mary,john授予建库和建表的权限
Crant create database,crease table to mary,john
2 deny
作用:安全系统中创建的一项,已拒绝给当前数据库内的安全账户授予权限并防止安全账户通过其组或角色成员资格继承权限。
例:对多用户拒绝多个语句权限,用户不能使用create database 和create table语句,除非给他们显示授予权限
Deny create database,create table to mary,john,[hygj]
3 revok
作用:用以删除以前在当前数据库内的用户上授予和拒绝的权限