一、含义 事务:一条或多条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 字段名 字段类型 约束