//局部变量
create procedure getNum()
begin
declare number int;
set number = 10;
select number;
end
(1)查询任意id的图书信息
注意:参数的名称不能和表中字段名相同
select * from books where id = ?;
create procedure getBooksByID(in bid int)
begin
select * from books where id = bid;
end
(2)查询任意图书类型的图书信息
注意:varchar,char类型需要定义长度
select * from books where type_id = (select type_id from book_type where type_name = '黑客');
方法一
create procedure getBooksByName(in tname varchar(50))
begin
select * from books where type_id = (select type_id from book_type where type_name = tname);
end
方法二
create procedure getBooksByName2(in tname varchar(50))
begin
declare tid int;
set tid = (select type_id from book_type where type_name = tname);
select * from books where type_id = tid;
end
insert into comment (aid,com_content,com_time)
values(13,'回复内容13',null);
//获取最近一次存入数据表的ID
注意:必须保证id是自动增长;不能指定下一个递增的ID值
last_insert_id();
(3)在评论表insert一条评论之后,实现article表中的评论数量+1
create procedure getComs(a int,b text,c datetime)
begin
declare pid int;//评论表id
declare wid int;//文章表id
//向评论表存入一条数据
insert into comment(aid,com_content,com_time)
values(a,b,c);
//获取刚存入的评论id
set pid =(select last_insert_id());
//根据评论id获取到文章id
set wid = (select aid from comment where cid = pid);
//根据上一步获取到的文章id,更新文章表的评论数量
update article set coms = coms + 1 where aid = wid;
end
call getComs(10,'太棒了','2017-1-1');
//在学生表存入一条数据之后,在成绩表中存入一条此学生的语文成绩
//用存储过程向一个表中存入100条数据
create procedure pro_add100()
begin
declare i int;
declare max int;
set i = 0;
set max = 100;
while i <= 100 do
insert into course(co_name) values('course');
set i = i+1;
end while;
end
//删除存储过程
drop procedure 存储过程的名字;
//总结
(1)存储过程包含单条或者多条sql,都需要写在begin end之间
(2)在存储过程中的每条sql语句结束时都要加';';
(3)存储过程中的参数没有默认值,在调用时,不能省略这个参数,可以用null代替
//事务
定义:MySQL 事务主要用于处理操作量大,复杂度高的数据。
一句话概括:可以回滚,可以提交,程序没有问题,则提交,有问题就回滚
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性:一组事务,要么成功;要么撤回。
2、稳定性 : 有非法数据(外键约束之类),事务撤回。
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
事务(transaction)的语法:
(1)开启事务:begin; //start transaction;
(2)进行相关的操作
(3)提交事务:commit;
(4)撤销事务(回滚):rollback;
使用事务的注意事项:
(1)表必须是innodb存储引擎
(2)常用于金额、库房等行业,一般行业不使用
mysql中的存储引擎:
mysql数据类型很多,表很多,在处理数据上存在差异
针对不同的处理要求,mysql提供多种不同的存储引擎
(1)innodb
a)事务型存储引擎,支持事务,有崩溃恢复能力
b)表只有一个.frm文件,索引和数据是紧密相连的,降低mysql运行效率
c)mysql版本是5.5及之后的,默认存储引擎是innodb
(2)myisam
a)表分成三个文件存储(.frm,.myd,.myi),索引和数据是分开的,提高mysql运行效率
b)不支持事务
c)mysql版本是5.5之前,默认存储引擎是myisam
mysql根据功能不同,划分了一些类型:
DCL:mysql用户的管理、权限分配、数据库的备份、还原
(1)mysql用户管理
a)root是mysql默认的用户(超级管理员),才有权限去创建其他mysql用户
b)mysql用户信息是存储在mysql库中的user表中
//如何创建mysql用户
create user 用户名@服务器名称 identified by '密码';
create user xiaoming@localhost identified by '123';
//修改密码(root或者当前登录用户都可以修改密码)
set password for 用户名@服务器名称 = password('新密码');
set password for xiaoming@localhost = password('12345');
//删除用户(在root账户下)
drop user 用户名@服务器名称
drop user xiaoming@localhost;
//用户权限(在root账户下)
//赋予权限
grant 权限列表 on 对象列表 to 用户列表;
权限列表:
(1)All:所有权限(增删改查)
(2)Create 创建权限
(3)drop 删除权限
(4)alter 修改权限
(5)select 查询权限
(6)insert 数据的添加权限
(7)update
(8)delete
对象列表(数据库或数据表)
*.* //第一个*是数据库,第二个*是数据表
数据库名称.* //数据库中的所有表
数据库名称.表名 //一个数据中的某个表
grant All on *.* to xiaoming@localhost;
grant All on demo.* to xiaoming@localhost;
收回权限(在root账户下)
revoke 权限列表 on 对象列表 from 用户列表;
revoke All on *.* from xiaoming@localhost;
revoke All on demo.* from xiaoming@localhost;
(2)mysql数据的备份与还原(导出导入),不需要登录数据库
返回上一级:cd ..或cd ../
进入下一级: cd 文件夹名字
在mysql/bin目录下:
备份:
mysqldump -uroot -p 数据库名称>路径(存放sql文件)
mysqldump -uroot -p demo>c:/demo.sql
还原(不用dump):
mysql -uroot -p demo4