一、数据库约束
1、主键约束
2、外键约束
3、唯一值约束
4、检查约束
5、默认值约束
6、非空约束
*****数据库约束作用
数据库约束都是作用在字段上,保证数据的完整性,表中约束越多数据就越完整,保证都是有效数据
约束的缺点
数据库表的约束越多,增、删、改会变慢
二、主键约束
1、主键约束
主键约束是表中记录的唯一标识,表中至少有一个字段代表记录的唯一标识,这个字段就是主键
主键不能为空,值不能重复,表一定要有主键
a、创表时,增加主键约束,系统名称
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型
);
b、创表时,增加主键约束,指定名称
create table 表名(
主键字段 数据类型,
普通字段 数据类型,
constraint 约束名 primary key (主键字段)
);
c、给已有的表增加主键约束,系统名称
alter table 表名 add primary key (主键字段);
d、给已有的表增加主键约束,指定名称
alter table 表名 add constraint 约束名 primary key (主键字段);
e、删除约束(可以删除任何约束)
alter table 表名 drop constraint 约束名;
2、复合主键
多个字段作为主键,多个字段内容不能重复
a、创表时,增加主键约束,系统名称
create table 表名(
主键字段1 数据类型,
主键字段2 数据类型,
普通字段 数据类型,
primary key(主键字段1, 主键字段2)
);
b、创表时,增加主键约束,指定名称
create table 表名(
主键字段1 数据类型,
主键字段2 数据类型,
普通字段 数据类型,
constraint 约束名 primary key (主键字段1, 主键字段2)
);
c、给已有的表增加主键约束,系统名称
alter table 表名 add primary key (主键字段1, 主键字段2);
d、给已有的表增加主键约束,指定名称
alter table 表名 add constraint 约束名 primary key (主键字段1, 主键字段2);
三、外键约束
1、什么是外键约束
两个表如果有关联关系,那么关联字段就是外键,外键字段指向主键字段,
外键的值来源与主键的值,外键可以为空,可以重复
a、创表时,增加外键约束,系统名称
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型,
外键字段 数据类型,
foreign key (外键字段) references 表名 (主键字段)
);
b、创表时,增加外键约束,指定名称
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型,
外键字段 数据类型,
constraint 约束名 foreign key (外键字段) references 表名 (主键字段)
);
c、给已有的表增加外键约束,系统名称
alter table 表名 add foreign key (外键字段) references 表名 (主键字段);
d、给已有的表增加外键约束,指定名称
alter table 表名 add constraint 约束名 foreign key (外键字段) references 表名 (主键字段);
2、主键与外键的区别
a、含义不同
主键:记录的唯一标识,不能重复,不能为空
外键:表与表之间的关联字段,外键的值来源与主键的值,外键可以为空,可以重复
b、作用不同
主键:保证数据的完整性,防止重复记录产生
外键:建立表与表之间的关系
c、个数不同
主键:一个表只能有一个主键
外键:一个表可以有多个外键
4、表与表之间的关系种类
关系型数据库中的关系指的就是主外键关系,主外键关系表示了表与表之间的关系,可以分为
以下情况:
一对多(在多的那张表中添加外键字段)
多对一
一对一
多对多(一定会产生第三张表)
*****四、数据库三范式(数据库建表的三范式)
第一范式:字段具有原子性,不可再分,所有关系型数据库都必须满足第一范式
第二范式:在满足第一范式基础上满足第二范式,一张表至少有一个字段代表记录的唯一标识,
这个字段称为主键,所有的表都应该有主键
第三范式:在满足第二范式基础上满足第三范式,如果表与表之间有关系,一张表只能包含另一
表的主键,不能包含其他字段,这个字段称为外键
五、唯一值约束
1、什么是唯一值约束
要求表中字段的值不能重复,称为唯一值约束
a、创表时,增加唯一值约束,系统名称
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型,
唯一值字段 数据类型,
unique (唯一值字段 )
);
b、创表时,增加唯一值约束,指定名称
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型,
唯一值字段 数据类型,
constraint 约束名 unique (唯一值字段 )
);
c、给已有的表增加唯一值约束,系统名称
alter table 表名 add unique (唯一值字段 );
d、给已有的表增加唯一值约束,指定名称
alter table 表名 add constraint 约束名 unique (唯一值字段 );
六、检查约束
1、什么是检查约束
要求表中字段的值在一定的取值范围,称为检查约束
a、创表时,增加检查约束,系统名称
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型,
check (表达式 )
);
b、创表时,增加检查约束,指定名称
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型,
constraint 约束名 check (表达式 )
);
c、给已有的表增加检查约束,系统名称
alter table 表名 add check (表达式 );
d、给已有的表增加检查约束,指定名称
alter table 表名 add constraint 约束名 check (表达式 );
七、默认值约束
1、什么是默认值约束
表中字段值为空时,给一个默认值,称为默认值约束
a、创表时,增加默认值约束
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型 default 默认值
);
b、给已有的表增加默认值约束
alter table 表名 modify 字段名 default 默认值;
八、非空约束
1、什么是非空约束
表中字段的值不能为空,称为非空约束
a、创表时,增加非空约束
create table 表名(
主键字段 数据类型 primary key,
普通字段 数据类型 not null
);
b、给已有的表增加非空约束
alter table 表名 modify 字段名 not null;
九、序列
1、什么是序列
序列相当于一个数字生成器,生成一个唯一的自增整数
2、简单方式创建序列
create sequence 序列名;
3、详细方式创建序列
create sequence seq_person
start with 起始值
increment by 步长
maxvalue 最大值
minvalue 最小值
cache 缓存大小;
4、查询序列的值
select 序列.nextval from dual; 查看序列下一个值
select 序列.currval from dual; 查看序列当前值
5、修改序列
alter sequence 序列名 属性 值;
注:起始值不能改,步长、最大值、最小值可以改
6、删除序列
drop sequence 序列名;
7、序列的作用
给主键添值
一、索引(index)
1、索引的作用
索引是优化查询的一种,使得查询效率特别高,索引是优化存储,索引作用在字段上
2、什么样的字段适合建索引
a、经常被查询的字段
b、不能为空,不能重复
c、字段的值不会被经常改变
注:主键、唯一值约束默认会建索引
3、索引的创建
a、普通索引
create index 索引名 on 表名(字段名);
b、唯一索引
create unique index 索引名 on 表名(字段名);
c、复合索引
create index 索引名 on 表名(字段名1, 字段名2);
4、如何使用索引
索引是自动使用,只要SQL语句where条件跟索引字段就行
5、删除索引
drop index 索引名;
6、重建索引
alter index 索引名 rebuild reverse;
*****7、什么情况下不走索引字段
a、模糊查询不走索引
b、复合索引查询单个字段不走索引
c、索引字段不能作用于函数
d、索引字段不能作用于运算
8、强制走索引
select /*+index(t 索引名)*/* from 表名 t where t.索引字段 like 值;
二、视图
1、什么是视图
视图是通过一条SQL语句查询的结果集,称为虚拟表,可以当做表使用,视图一般用于查询,
不能增删改数据
视图 = 虚拟表 = DQL查询语句
2、创建视图
create view 视图名 as 查询语句;
3、视图的优缺点
优点:
a、视图的字段来源于各个表,相同的数据可以产生不同的视图,扩展性好
b、通过简单的SQL语句能查询出复杂的结果
c、视图独立性强,利于后期维护
d、视图安全性高,创建与删除视图必须要有DBA权限,删除视图不会删除表
缺点:
视图不会提高查询效率
三、DCL语句
1、给用户赋权
grant 权限 to 用户名;
2、撤销用户权限
revoke 权限 from 用户名;
select userenv('language') from dual; oracle字符编码集
show create database qf2112; -- 数据库字符编码
show full columns from t_person; -- 表字段的字符编码