//局部變量
create procedure getNum()
begin
declare number int;
set number = 10;
select number;
end
(1)查詢?nèi)我鈏d的圖書信息
注意:參數(shù)的名稱不能和表中字段名相同
select * from books where id = ?;
create procedure getBooksByID(in bid int)
begin
select * from books where id = bid;
end
(2)查詢?nèi)我鈭D書類型的圖書信息
注意: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,'回復內(nèi)容13',null);
//獲取最近一次存入數(shù)據(jù)表的ID
注意:必須保證id是自動增長;不能指定下一個遞增的ID值
last_insert_id();
(3)在評論表insert一條評論之后,實現(xiàn)article表中的評論數(shù)量+1
create procedure getComs(a int,b text,c datetime)
begin
declare pid int;//評論表id
declare wid int;//文章表id
//向評論表存入一條數(shù)據(jù)
insert into comment(aid,com_content,com_time)
values(a,b,c);
//獲取剛存入的評論id
set pid =(select last_insert_id());
//根據(jù)評論id獲取到文章id
set wid = (select aid from comment where cid = pid);
//根據(jù)上一步獲取到的文章id,更新文章表的評論數(shù)量
update article set coms = coms + 1 where aid = wid;
end
call getComs(10,'太棒了','2017-1-1');
//在學生表存入一條數(shù)據(jù)之后壁拉,在成績表中存入一條此學生的語文成績
//用存儲過程向一個表中存入100條數(shù)據(jù)
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 存儲過程的名字;
//總結(jié)
(1)存儲過程包含單條或者多條sql沐兵,都需要寫在begin end之間
(2)在存儲過程中的每條sql語句結(jié)束時都要加';';
(3)存儲過程中的參數(shù)沒有默認值,在調(diào)用時榜跌,不能省略這個參數(shù)竖幔,可以用null代替
//事務(wù)
定義:MySQL 事務(wù)主要用于處理操作量大漓藕,復雜度高的數(shù)據(jù)纤控。
一句話概括:可以回滾婉徘,可以提交藏研,程序沒有問題敬矩,則提交,有問題就回滾
一般來說蠢挡,事務(wù)是必須滿足4個條件(ACID): Atomicity(原子性)弧岳、Consistency(穩(wěn)定性)、Isolation(隔離性)业踏、Durability(可靠性)
1禽炬、事務(wù)的原子性:一組事務(wù),要么成功勤家;要么撤回腹尖。
2、穩(wěn)定性 : 有非法數(shù)據(jù)(外鍵約束之類)伐脖,事務(wù)撤回热幔。
3、隔離性:事務(wù)獨立運行讼庇。一個事務(wù)處理后的結(jié)果绎巨,影響了其他事務(wù),那么其他事務(wù)會撤回蠕啄。事務(wù)的100%隔離场勤,需要犧牲速度。
4歼跟、可靠性:軟和媳、硬件崩潰后,InnoDB數(shù)據(jù)表驅(qū)動會利用日志文件重構(gòu)修改哈街×敉可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什么時候吧事務(wù)保存到日志里骚秦。
事務(wù)(transaction)的語法:
(1)開啟事務(wù):begin; //start transaction;
(2)進行相關(guān)的操作
(3)提交事務(wù):commit;
(4)撤銷事務(wù)(回滾):rollback;
使用事務(wù)的注意事項:
(1)表必須是innodb存儲引擎
(2)常用于金額撼港、庫房等行業(yè)坪它,一般行業(yè)不使用
mysql中的存儲引擎:
mysql數(shù)據(jù)類型很多,表很多帝牡,在處理數(shù)據(jù)上存在差異
針對不同的處理要求往毡,mysql提供多種不同的存儲引擎
(1)innodb
a)事務(wù)型存儲引擎,支持事務(wù),有崩潰恢復能力
b)表只有一個.frm文件,索引和數(shù)據(jù)是緊密相連的靶溜,降低mysql運行效率
c)mysql版本是5.5及之后的开瞭,默認存儲引擎是innodb
(2)myisam
a)表分成三個文件存儲(.frm,.myd,.myi),索引和數(shù)據(jù)是分開的,提高mysql運行效率
b)不支持事務(wù)
c)mysql版本是5.5之前罩息,默認存儲引擎是myisam
mysql根據(jù)功能不同嗤详,劃分了一些類型:
DCL:mysql用戶的管理、權(quán)限分配瓷炮、數(shù)據(jù)庫的備份葱色、還原
(1)mysql用戶管理
a)root是mysql默認的用戶(超級管理員),才有權(quán)限去創(chuàng)建其他mysql用戶
b)mysql用戶信息是存儲在mysql庫中的user表中
//如何創(chuàng)建mysql用戶
create user 用戶名@服務(wù)器名稱 identified by '密碼';
create user xiaoming@localhost identified by '123';
//修改密碼(root或者當前登錄用戶都可以修改密碼)
set password for 用戶名@服務(wù)器名稱 = password('新密碼');
set password for xiaoming@localhost = password('12345');
//刪除用戶(在root賬戶下)
drop user 用戶名@服務(wù)器名稱
drop user xiaoming@localhost;
//用戶權(quán)限(在root賬戶下)
//賦予權(quán)限
grant 權(quán)限列表 on 對象列表 to 用戶列表;
權(quán)限列表:
(1)All:所有權(quán)限(增刪改查)
(2)Create 創(chuàng)建權(quán)限
(3)drop 刪除權(quán)限
(4)alter 修改權(quán)限
(5)select 查詢權(quán)限
(6)insert 數(shù)據(jù)的添加權(quán)限
(7)update
(8)delete
對象列表(數(shù)據(jù)庫或數(shù)據(jù)表)
*.*? //第一個*是數(shù)據(jù)庫,第二個*是數(shù)據(jù)表
數(shù)據(jù)庫名稱.*? //數(shù)據(jù)庫中的所有表
數(shù)據(jù)庫名稱.表名 //一個數(shù)據(jù)中的某個表
grant All on *.* to xiaoming@localhost;
grant All on demo.* to xiaoming@localhost;
收回權(quán)限(在root賬戶下)
revoke 權(quán)限列表 on 對象列表 from 用戶列表;
revoke All on *.* from xiaoming@localhost;
revoke All on demo.* from xiaoming@localhost;
(2)mysql數(shù)據(jù)的備份與還原(導出導入),不需要登錄數(shù)據(jù)庫
返回上一級:cd ..或cd ../
進入下一級: cd 文件夾名字
在mysql/bin目錄下:
備份:
mysqldump -uroot -p 數(shù)據(jù)庫名稱>路徑(存放sql文件)
mysqldump -uroot -p demo>c:/demo.sql
還原(不用dump):
mysql -uroot -p demo4