1、檢視:開發中不常用
給某個常用的查詢語句設定別名,方便使用
建立:create view 檢視名稱 as sql
修改:alter view 檢視名稱 as sql
刪除:drop view 檢視名稱
檢視是虛擬的而非物理表。
2、觸發器:開發中不常用
執行增刪改語句,自動執行設定的關聯語句
觸發器中類:insert,delete,update
觸發時機:before,after
關鍵字:new:insert,update中;old:delete,update中
例:before insert觸發
delimiter // 更改語句結束符為//create trigger t1 before insert onclass
for each row begin insert into student values(0,'
sdf',12,3);
end//t1是觸發器名稱,在插入語句執行之前執行begin和end間語句,注意:each row 表示每插入一條記錄,就執行一次觸發器
delimiter ; 語句結束符改回 ;
new關鍵字:在將插入到class中的name,也插入到student中
create trigger wwww before insert on classfor each row begin insert into student values(0,new.name,12,3); end//
刪除觸發器:
drop trigger t1;
3、函式
(1)內建函式:
select curdate(); yyyy-mm-ddselect char_length(
'sdf
'); 字串長度
mysql> select concat('
asdf
','123');
+----------------------+
| concat('
asdf
','123
') |
+----------------------+
| asdf123 |
+----------------------+時間格式化:
mysql> select date_format(curdate(),'
%y-%m
');select curdate();
+--------------------------------+
| date_format(curdate(),'
%y-%m
') |
+--------------------------------+
| 2018-03 |
+--------------------------------+
1 row in
set+------------+
| curdate() |
+------------+
| 2018-03-14 |
+------------+
1 row in set
時間格式化:
(2)自定義函式:
delimiter //create function f1(i1 int,i2 int) returns intbegin declare num int default 0;set num = i1 + i2;return num;end //mysql> select f1(1,45);
+----------+
| f1(1,45) |
+----------+
| 46 |
+----------+
注意:1、函式有返回值;2、函式內不能寫如select等語句
4、儲存過程
儲存過程是指儲存在mysql上的乙個別名,它代指的是事先寫好的,實現一定功能的一堆sql語句。以後通過該別名執行。
檢視也是別名,但是是把檢視當作一張表(臨時結果集)來呼叫的,檢視只能查詢;儲存過程直接通過別名來呼叫,別名代表一系列操作(查,改等)
儲存過程是為了減少直接寫sql語句
可通過遠端傳入儲存過程名執行資料庫操作
a、簡單儲存過程
delimiter //create procedure f1()begin
select * from
student; #查
insert into
class(name) values('
yiban
'); #插入
end //delimiter ;
mysql中使用:call f1();
pymysql使用:cursor.callproc('f1
')
傳引數:in,out,inout關鍵字
b、in
delimiter //create procedure f2(inn1 int,
inn2 int
)begin
select * from student where id >n1;
end //delimiter ;
mysql中使用:call f2(4,6); #n2沒有利用,也要傳入
pymysql使用:cursor.callproc('f1
',(4,6))
c、in,out #儲存過程沒有return,可以用out返回值
delimiter //create procedure f3(inn1 int,
out n2 int #變數
)begin
set n2 = 123456select * from student where id >n1;
end //delimiter ;
set @v1 = 0; #
session級別的全域性變數
mysql中使用:call f3(4,@v1); #
n2必須是變數
檢視:select @v1; #
輸出 123456
pymysql使用:cursor.callproc('
f3',(4,2))
cursor.excute(
'select @_f3_0,@_f3_1
')
d、inout
e、事務(原子性操作),要不全部執行,要不全部不執行
f、游標
g、動態執行sql(防sql注入)
特性:1、可傳引數 in,out,inout
2、pymysql結合
3、沒有return;out 可用於標識儲存過程的執行結果
5、索引
6、orm操作
10 MySQL入門小結
1.連線操作和集合操作 續 由於mysql不支援full join,我麼可以這樣實現 select from a left join b on a.id b.id union select from a right join b on a.id b.id a.先查出左聯接 b.查出右聯接 c.用un...
10 mysql選錯索引
在mysql表中可以支援多個索引,有的 sql不指定使用哪個索引,由 mysql 自己來決定,但是有時候 mysql 選錯了索引,導致執行很慢。例子create table t10 id int 11 not null a int 11 default null b int 11 default n...
MySQL學習筆記(10)MySQL變數
變數由系統提供,不是使用者定義,屬於伺服器層面 使用語法 1 檢視所有的系統變數 show global variables 參看所有全域性變數 show session variables 檢視所有會話變數,可以不寫session2 檢視滿足條件的部分系統變數 show global variab...