儲存過程與自定義函式的區別
delimiter //
create procedure showtime()
begin
select now();
end//
delimiter ;
call showtime;
delimiter //
create procedure selectbyid(in uid smallint unsigned)
begin
select * from students where stuid = uid;
end//
delimiter ;
call selectbyid(2);
查詢編號為2的學生
##儲存過程示例
delimiter //
create procedure dorepeat(n int)
begin
set @i = 0;
set @sum = 0;
repeat set @sum = @sum+@i; set @i = @i + 1;
until @i > n end repeat;
end//
delimiter ;
call dorepeat(100);
select @sum;
建立含參儲存過程:包含in引數和out引數
delimiter //
create procedure deletebyid(in uid smallint unsigned, out num smallint unsigned)
begin
delete from students where stuid = uid;
select row_count() into num;
end//
delimiter ;
call deletebyid(2,@line);
select @line;
說明:建立儲存過程deletebyid,包含乙個in引數和乙個out引數.呼叫時,傳入刪除的id和儲存被修改的行數值的使用者變數@line,select @line;輸出被影響行數
準備工作:
create table student_info (
stu_id int(11) not null auto_increment,
stu_name varchar(255) default null,
primary key (stu_id)
);create table student_count (
student_count int(11) default 0
);insert into student_count values(0);
示例:建立觸發器,在向學生表insert資料時,學生數增加,delete學生時,學生數減少
create trigger trigger_student_count_insert
after insert
on student_info for each row
update student_count set student_count=student_count+1;
create trigger trigger_student_count_delete
after delete
on student_info for each row
update student_count set student_count=student_count-1;
mysql> use information_schema;
database changed
mysql>
select
* from
triggers
where
trigger_name='trigger_student_count_insert';
create
user dushan@'192.168.31.17'
identified by
'centos';
rename user
liuying@'192.168.31.17'
to dushan@'192.168.32.17';
在192.168.32.17上測試:
mysql -udushan -pcentos -h192.168.32.7
drop user test@'192.168.31.17';
drop user ''@'localhost';
set password for
dushan@'192.168.32.17'=password('123456');
還可以用下列方法修改,*不推薦*
update
mysql.user
set
password=password('password')
where
clause;
此方法需要執行下面指令才能生效:
flush privileges;
客戶端驗證:
mysqladmin -u root -poldpass password 『newpass』
測試中可直接刪除mysql中的表....當然沒有什麼意義
systemctl stop mariadb
rm -rf /var/lib/mysql/*
劃重點啟動mysqld程序時,為其使用如下選項:
–skip-grant-tables --skip-networking
update 命令修改
關閉mysqld程序,移除上述兩個選項,重啟mysqld
systemctl stop mariadb
vim /etc/my.cnf
[mysqld]
skip-grant-tables mysqld語句塊底下新增
skip-networking
systemctl start mariadb
進入後update mysql.user set password=''
多例項情況下,啟動指令碼中新增–skip-grant-tables即可
許可權類別:
管理類程式類
資料庫級別
表級別字段級別
參考:
示例:grant select (col1), insert (col1,col2) on mydb.mytbl to 『someuser』@'somehost『;
grant select(stuid,name) on hellodb.students to liuying@'192.168.32.17';
192.168.32.17的liuying只能查詢students表中的stuid和name欄位
grant all on * to liuying@'192.168.32.17';
對所有表授權,*代表當前庫所有表,不代表所有庫
show grants for liuying@'192.168.32.17'\g;
revoke all on *.* from liuying@'192.168.32.17';
revoke delete on hellbd.* from 'liuying'@'192.168.32.17';
注意:mariadb服務程序啟動時會讀取mysql庫中所有授權表至記憶體
(1) grant或revoke等執行許可權操作會儲存於系統表中,mariadb的服務程序通常會自動重讀授權表,使之生效
(2) 對於不能夠或不能及時重讀授權表的命令,可手動讓mariadb的服務程序重讀授權表:mysql> flush privileges;
linux mysql 批量儲存
當mysql引擎為innodb時,mysql支援提交模式的設定,預設是自動提交的,通過設定提交模式為關閉,最後統一提交,我們可以提 高批量儲存資料的效率,下面是例項 mysql mysql mysql init mysql if mysql real connect mysql,host user ...
六 MySQL儲存過程
在資料庫系統中為了保證資料的完整性和一致性,同時也為了提高其應用效能,大多數的資料庫常採用儲存過程和儲存函式技術 類似於c語言中的函式 mysql5.0以後開始支援儲存過程和儲存函式。1 建立儲存過程 create procedure sp name proc parameter character...
MYSQL儲存過程(六)
1 mysql執行流程,通過儲存過程,可以避免重複語法分和編譯,提高執行效率 2 儲存過程 1 是sql語句與控制語句的 預編譯集合 以 乙個名稱儲存 作為 乙個單元處理 2 優點 增強了語句的功能和靈活性 可以通過控制語句對流程進行控制和判斷 實現較快的執行速度,只在 第一次呼叫時進行語法分析和編...