Mysql之视图、索引、外键、触发器、事务

1、视图:
1、概念:就是一个假表;
2、作用:直观,便于我们对数据进行观察。
3、创建视图:
create view 视图名 as select 字段名1,字段名2 from 表名;
注意:多少个字段名你自己加。

4、查看视图结构:desc 视图名;
5、查看视图全部数据:SELECT * FROM 视图名;

2、索引:
1、作用:方便快速查找;对sql的优化非常有帮助。
2、注意:
1、字段经常被当作查询对象操作才加索引。
2、一张表里面与其他表里面关系重合的,不适合加索引。

3、查看所有索引:
			show index from 表名;

4、添加主键索引:
				alter table 表名 add primary key(字段名(一般是id));

5、添加唯一索引:
				alter table 表名 add unique(字段名);
				注意:一张表可以有多个唯一索引,主键索引只能有一个。

6、添加全局索引:
				alter table 表名 add index(表名);

7、删除索引:
			alter table 表名 drop index 字段名;

3、外键:
1、作用:就是可以把多张表的关系联系起来。
2、解释:从表的外键对应的都是主表的主键。
3、要求:外键的大小、长度、类型必须与主键的一样。
4、给从表添加外键:

	alter table 从表名 add constraint 外键名 foreign key(从表字段名) references 主表名(主表字段名);

	注意:1、从表字段名定义的时候最好与主表主键名一样。
	
		  2、删除grade表里id为1那行数据,失败,因为它有外键关联,下面添加级联操作就好了。

5、删除外键:

	alter table 表名 drop foreign key 外键名;
	
	注意:1、这样删除会还有索引,不过没关系。

6、添加层叠关系,删除主键的数据,从表外键的数据也会删除:

	alter table 从表名 add constraint 外键名 foreign key(从表字段名) references 主表名(主表字段名) on delete cascade;		

7、添加set null关系,在删除主表的同时把相关联的从表数据都设为NULL:

	alter table 从表名 add constraint 外键名 foreign key(从表字段名) references 主表名(主表字段名) on delete set null;
	
	注意:1、删除主表grade  id为1的数据,然后从表外键字段那个值为null。

4、触发器:
1、查看触发器:show triggers;

2、添加插入类型的触发器:	
					create trigger 触发器名 before insert on emp
					
					   for each row
					  
					insert into jixiao values(NEW.ename,NEW.esalary*0.5);
					
					注意:插入数据的表的字段个数一定要大于或者等于被触发的表的字段个数。
					
					#想emp表插入数据,jixiao表的数据也跟着变化
					
					insert into emp(ename,esalary) value("Rain",200); 					

3、添加修改类型的触发器:
					create trigger 触发器名 before update on emp
					
						for each row
						
					update jixiao set jmoney=NEW.esalary;
					
					#emp修改一条数据,jixiao表也会变
					
					update emp set esalary=500;
					
4、删除触发器:drop trigger 触发器名;

5、事务:
**1、概念:**一组操作,要么全部成功,要么全部失败。
2、事务的几大原则:acdl
1、a:原子性,就是最小的,不可分割的(同时执行sql语句,要么同时成功,要么同时失败)
2、c:一致性,同时执行两条sql语句,执行过程出现异常,要么回到最初状态、要么回到执行后的状态,不可能出现在中间状态。
3、d:隔离性,每个事务都不相互影响
4、l:持久性,只要commit成功,就不会再改变了。
3、常用存储引擎:
1、MyISAM和Inn
4、模拟转账功能:
1、数据库是自动提交数据库,现在set autoCommit=0,改为手动提交(意思就是jdbc那边还要有commit语句才能提交),设置开始事务start transaction;
2、执行一段update先
2、事务回滚 rollback;(永远回到上一步操作)

猜你喜欢

转载自blog.csdn.net/weixin_42334396/article/details/83242727