外键约束:
首先创建一个表
create table employee
(
id int primary key auto_increment,
name varchar(50) not null,
dpptName varchar(50)
);
使用外简约束的优势和问题:
1.主表从表关联性很强
2.主表从表数据操作时存在更多的约束
3.操作规范性更强
问题:
1.从表操作过程中,添加和修改约束过强。需要首先操作主表
2.主表操作过程中删除和修改约束过强,需要首先操作主表
3.数据操作过程中,整个数据库删除更新操作过于繁琐,后期维护压力过大。
外键约束虽然可以从语法上约束一定操作,但是会导致更多的问题,在开发中不允许使用。
级联操作
在外键约束的清空下,操作 主表和从表都有很多约束
所以SQL引入了级联操作:
级联删除 on delete cascade
级联修改 on update cascade
主表操作执行删除或者修改时,对于外键约束的从表会对应操作。
【代码】
数据表修改
添加字段:
alter table employee add age int;
修改字段对应的数据类型
alter table employee modify name char(50) not null;
修改字段名字和数据类型
alter table employee change name userName varchar(50) not null;
删除字段
alter table employee drop age;
修改表名
rename table employee to emp;
事务
什么是事务
操作数据库,修改,删除慎用,修改删除操作过程中,如果出现操作失误,会导致出现数据丢失或被毁,
而且不能撤销该操作。
事务可以认为是SQL语句处理的最小单元,具有一定的原子性,是由一条或者多条SQL语句组成,
事务执行完成,那么所有的SQL语句全部执行,都要执行成功。一旦出现任何一个SQL语句异常,
回到事务执行之前,事务执行失败。
事务的边界
开始:
当前事务,当前一整套和业务逻辑相关的内容一起执行
set autocommit = 0; //开启事务
一旦执行上述语句,数据库SQL语句不再立即执行,而是一种虚拟表的状态,需要等待
提交之后才能生效,但是操作的过程中数据库可观察。
事务结束:
1.确认没有问题
commit; // 确认无误之后SQL语句提交执行,显式提交
隐式方式提交:一条创建,删除SQL语句,或者数据库正常关闭
2.回滚操作
rollback; //显式回滚,从 set autocommit = 0; 开始的SQL语句
//全部失效,回到没更改过的状态
自动回滚,执行创建删除语句失败,或者数据库非正常退出
事务操作演示
【代码】
事务的特征
原子性:
事务操作是一个整体,所有的SQL语句完成一个事务,事务只有两种可能性,执行成功,或者失败
一致性:
事务如果操作失败,其中的所有数据操作过程,全部会回到原来的起点
隔离性:
如果在事务情况下,查询数据是一种事务处理过程中数据展示的情况,但是在实际的数据库中是
没有发生数据变化的。只有事务commit提交之后才会更改
持久性:
事务一旦执行成功,对于数据库的操作影响是持久性的。
权限管理
create user 'xiaoming' identified by '12456';
创建了一个小明用户,密码是123456
grant all on tbName.* to 'xiaoming';
给xiaoming用户授权tbName的所有权限
revoke all on tbName.* from 'xiaoming';
撤销所有权限
drop user 'xiaoming';
删除用户
创建用户
create user 'xiaoming' identified by '12456';
创建了一个小明用户,密码是123456
授权用户
grant all on tbName.* to 'xiaoming';
给xiaoming用户授权tbName的所有权限
撤销授权
revoke all on tbName.* from 'xiaoming';
撤销所有权限
删除用户
drop user 'xiaoming';
删除用户
视图 view
什么是视图
视图是一个虚拟表,通过查询语句,从一个表或者多个表中查询得到的一个结果,可以作为一个
视图使用,使用的效果跟真实表一致。可以在视图中update,delete,insert操作,可以提高数据库的
安全性,同时便于用户操作
视图的特点
优点:
1.简单化,数据所见即所得
2.安全,用户有且只能修改当前可见数据
3.逻辑的独立性,这里视图使用的是一张虚拟表,所有的操作并不会对数据库真实表[结构]造成影响。
缺点:
1.性能较差,不管是SQL语句操作还是对数据存储的性能
2.修改不方便,复杂视图在操作中是无法修改的
创建视图
语法:
create view 视图名 as 查询数据结果[查询语句]
create view student as select student.id,student.name,student.sex
from student;
student 不是一张真实存在的表,而是一个自定义查询结果的视图
select * from student where student.id = 150;
修改视图
修改视图中的数据,原表的数据会受到影响,而不会影响到原表的结构
update student set id = '007' where name = '小明';
修改当前视图的结构(不会修改原表的结构):
alter view student select id,name from student;
删除视图
dtop view 视图名;
删除操作不会影响原始数据。