数据库的分类及数据库的三大范式

为什么要用数据库
1.降低存储数据的冗余度
2.提高数据的一致性
3.存储数据的可共享
4.建立数据库所遵循的标准
5.便于维护数据完整性
6.提高数据安全性
数据库的三大范式
数据库三大范式通俗来讲
第一大范式,字段不可分
第二大范式,一个表必须有主键(在满足第一大范式的基础上)
第三大范式,一个表不能再包含其他表的非关键字。(在满足第二大范式的基础上)
关键字,如果某个字段或多个字段的值能唯一的标志一条记录,则称这个字段或字段组为关键字
第一大范式必须满足,其他两大范式看情况而定,
数据库约束
主键约束:主键不为空,值唯一,记录的唯一标识,与其他外键关联,
非空约束:值不能为空
外键约束:值为指定表的主键值
唯一约束:值唯一
默认约束:设置默认值
检查约束:check<表达式> MySQL中的约束不起作用

CREATE TABLE score3(
id INT PRIMARY KEY,
stu_id INT,
grade INT,
CHECK(grade>0 AND grade<100)
);

给表score3中的grade字段添加一个大于100的数据竟然不报错,在网上查询后得知MySQL中不会强制遵循约束如果需要判断的值少的情况下用enum枚举类型定义字段

create table root(
id int primary key,
sex enum('m','f')not null,
name char
)

触发器
触发频率:针对每一行执行
触发器定义在表上,附着在表上
每个表最多支持6个触发器
单一触发器不能与多个事件或多个表相关联
如果before触发器失败,则mysql将不执行请求操作,如果before触发器或语句本身失败,,MySQL将不执行after触发器(如果有的话)
触发器不能更新或覆盖,为了修改一个触发器,必须先删除,再重新创建
触发器内不支持call语句,不能从触发器内调用存储过程
触发器四要素
监视地点(table)
监视事件(insert update delete)
触发时间(before after)
触发事件(insert update delete)
create trigger triggerName
after/before insert/update/delete on 表名
for each row #这句话在mysql是固定的
begin
sql语句;
end;

create trigger ins_stu after insert on student for each row begin  
  insert into grade (stu_id)values(new.id);
end;

如果有两个表一个是student用来存储学生的信息,一个是grade用来存储学生的各科成绩,就可以设置一个触发器,当向student表中插入数据时grade表会由触发器向表里插入一条信息,即插入一个stu_id,但是在做的过程中遇到了一些麻烦,触发器写好后,向student表中插入一条数据时报了一个Field ‘garde_id’ dosen’t have defult value 当我给grade表的主键grade_id设置一个默认值后再向student表中插入数据时又报出Duplicate entry for key primary grade_id的值重复了。触发器的使用还存在一些问题。

关系模型数据库
关系模型数据库有MySql SqlService Oracle DB2
对象模型
Oracle
键值存储(Key-Value)数据库
Redis Oracle DBD Voldemort
列存储数据库
Cassandra HBase Riak
文档型数据库
CouchDB MongoDB
图形数据库
Graph InfoGird Neo4J Infinite

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值