//局部變量
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