mysql 学习笔记 day06

/*
	视图操作
	create | alter view_name as select column_name from table_name;
	
*/
---------------------------事物操作-------------------------------------
/*
	原子性
	一致性
	隔离性
	持久性
*/
create table `class`(
	id int primary key auto_increment,
	cz_money decimal(10, 2) comment '班费' 
);

insert into `class` values(null, 1250);

create table student(
	id int primary key auto_increment,
	stu_money decimal(10, 2) comment '学生拥有的钱'
);

insert into student values(null, 5000);

-- 班费
update student set stu_money=stu_money-30 where id =1;
update `class` set cz_money = cz_money +30 where id =1;

-- 将一组sql语句整体运行,运行失败回滚程序
show variables like 'autocommit';

set autocommit=0;


-- 利用commit提交事务

-- --------------------------------------触发器---------------------------------

-- 监听数据库的操作:
	-- 创建触发器:
		create trigger 名字 事件 执行代码;

		create trigger jiaobanfei after update on student
		for each row 
		update class set cz_money = cz_money+90;



	-- 事件
	insert
	update
	delete

	-- 事件的时机和事件在一起形成笛卡尔乘积
	-- before 
		insert
		update
		delete
	before insert |update |delete 
	-- after 
		insert
		update
		delete
		after insert |update |delete 

	-- 执行代码
		-- sql 脚本代码

update student set stu_money = stu_money+80 where id = 1;

/*
	注意:
		触发器不能同名;
		目前mysql只支持一类事件只有一个触发器
		6种触发器
		show create trigger trigger_name;

	(old.stu_money - new.stu_money)
	当事件是insert不能用old
	或是delete不能用new

	old 触发该触发器的表 on 之后的表 事件发生之前
	new 触发该触发器的表 on 之后的表 事件发生之后

*/

update student set stu_money=stu_money-50 where id =1;

drop trigger jiaobanfei;
create trigger jiaobanfei after update on student
for each row 
update `class` set cz_money=(old.stu_money - new.stu_money);

-- 如果一个触发程序有多个sql组成:
	-- 应该:
		--1、用begin end 作为标识语句块
		--2、语句块内用“;”作为定界符


delimiter $$ -- 修改语句结束符
create trigger ruxue after insert on student 
for each row
begin
update class set stu_count = stu_count+1;
update class set cz_money = cz_money+20;

end
$$

delimiter ; -- 再改回来

/*
	mysql 编程
	set 变量名=变量值
	set @who='刘瑞斌';
	通过select可以获得当前变量值
	select @who;

	定义一个变量selectinfo

	select  列   into 变量列表
		select 10,15,20 into @a,@b,@c;
		select @a,@b,@c;
	select -----into @var 只能返回一行

	= 应该是赋值,但在sql中是判断,写成:=
		set @i := '流';
		select @who:='流';
	

	自定义函数
	delimiter $$
	create function sayHello() returns varchar(20)
	begin 
	return 'hello world';
	end
	$$
	delimiter ;


	调用
		select sayHello();


	多分枝:
	if 条件 then
	elseif 条件2 then
	end
*/











你可能感兴趣的:(mysql)