148复习前一天的内容

淺唱寂寞╮ 提交于 2020-01-26 09:51:05
一、含义
事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行,要么都不执行

二、特点(ACID)
A 原子性:一个事务是不可再分割的,要么都执行,要么都不执行

C 一致性:我们的数据是准确的,完整的,可靠的。一个事务可以使数据从一个一致状态,切换到另一个一致状态

I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离(通过设置隔离级别来隔离)

D 持久性:一个事务一旦提交了,则永久的持久化到本地


三、事务的使用步骤
了解:
隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete
显示事务:需要手动提交,具有明显的开始和结束


使用显示事务:
①开启事务
set autocommit=0;

【start transaction;】    --可以省略

②编写一组逻辑sql语句

注意:sql语句支持的是insert、update、delete

设置回滚点:
savepoint 回滚点名;

③结束事务
提交:commit;
回滚:rollback;
回滚到制定的地方:rollback to 回滚点名;

四、并发事务、

1.事务的并发问题是如何发生的?
多个事务 同时 操作 同一个数据库的相同数据时

2.并发问题都有哪些?

脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务”更新“的数据

不可重复度:一个事务多次读取,结果不一样

幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是,其他事务”插入“的数据


3、如何解决并发问题
通过设置隔离级别来解决问题

4、隔离级别

                脏读        不可重复读    幻读
read_uncommitted:读未提交    ×          ×         ×

read committed:读已提交        √          ×         ×

repeatable read:可重复读        √          √         ×    --MySQL默认隔离级别

serializable:串行化        √          √         √    --虽然都能解决,但是它的性能也是最低的,其中一个事务在执行期间,其它事务只能等待

Oracle里只能支持read committed(默认),serializable




视图:

一、含义
MySQL5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。

好处:
1、简化了sql语句
2、提高了sql的重用性
3、保护基表的数据。和基表独立开来,提高了安全性

二、创建

create view 视图名
as
查询语句;

三、修改

方式一:
create view 视图名
as
查询语句;

方式二:
alter view 视图名
as
查询语句;

四、删除
drop view 视图1,视图2,...;

五、查看

desc 视图或表名;
show create view 视图名;

六、使用

1.插入
insert
2.修改
update
3.删除
delete
4.查看
select

注意:试图一般用于查询,而不是更新的,所以具有以下特点的视图都不允许更新
①包含分组函数、group by、distinct、having、union
②join
③常量视图
④where后面的子查询用到了from表
⑤用到了不可更新的视图

七、视图和表的对比

    关键字        是否占用物理空间            使用

视图    view        占用较小,只保存sql逻辑        一般用于查询

表    table        保存实际的数据            增删改查



一、常见约束

NOT NULL:非空,该字段的值必填

UNIQUE:唯一,该字段的值不可重复

DEFAUL:默认,该字段的值不用手动插入,有默认值

CHECK:检查,MySQL不支持

PRIMARY KEY:主键,该字段的值不可重复并且非空 --相当于:unique+not null

FOREIGN KEY:外键,该字段的值引用了另外的表的字段


主键和唯一:

1、区别:

①一个表至多有一个主键,但可以有多个唯一

②主键不允许为空,唯一看可以为空

2、相同点
都具有唯一性
都支持组合键,但不推荐,因为不太稳定


外键:
1、用于限制两个表的关系,从表的字段值引用了主表的某字段值

2、外键列和主表的被引用列要求类型一致,意义一样,名称无要求

3、主表的被引用列要求是一个key(一般就是主键)

4、插入数据,先插入主表    --因为主表还没有数据,从表就无法设置外键
删除数据,先删除从表    --当设置好了外键关系后,直接将主表drop掉,也不行,因为从表还应用着它

可以通过以下两种方式来删除主表的记录
#方式一:

级联删除        --删除主表(major)id时会同时将从表外键majorid对应的值的行删除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;

#方式二:

级联置空        --删除主表(major)id时会同时将从表外键majorid对应的值置为NUll
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;

二、创建表时添加约束
create table 表名(
    字段名 字段类型 not null,#非空
    字段名 字段类型 primary key,#主键
    字段名 字段类型 unique,#唯一
    字段名 字段类型 default 值,#默认
    constraint 约束名 foreign key(字段名) references 主表(被引用列)

)
注意:
            支持类型        可以起约束名            
列级约束        除了外键        不可以
表级约束        除了非空和默认    可以,但对主键无效

列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求

三、修改表时添加或删除约束
1、非空
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
删除非空
alter table 表名 modify column 字段名 字段类型 ;

2、默认
添加默认
alter table 表名 modify column 字段名 字段类型 default 值;
删除默认
alter table 表名 modify column 字段名 字段类型 ;
3、主键
添加主键
alter table 表名 add【 constraint 约束名】 primary key(字段名);
删除主键
alter table 表名 drop primary key;

4、唯一
添加唯一
alter table 表名 add【 constraint 约束名】 unique(字段名);
删除唯一
alter table 表名 drop index 索引名;
5、外键
添加外键
alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);
删除外键
alter table 表名 drop foreign key 约束名;


四、自增长列
特点:
1、不用手动插入值,可以自动提供序列值,默认从1开始,步长为1
auto_increment_increment
如果要更改起始值:手动插入值
如果要更改步长:更改系统变量
set auto_increment_increment=值;
2、一个表至多有一个自增长列
3、自增长列只能支持数值型
4、自增长列必须为一个key

一、创建表时设置自增长列
create table 表(
    字段名 字段类型 约束 auto_increment
)
二、修改表时设置自增长列
alter table 表 modify column 字段名 字段类型 约束 auto_increment
三、删除自增长列
alter table 表 modify column 字段名 字段类型 约束 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!