07.21自我總結
一.視圖
1.什么是是視圖
本質上是一個虛擬的表,即看得見但是不實際存在
- 視圖內修改了內容,原表的內容也會受到影響
- 原表修改了內容視圖同樣也會受到影響
目的
:簡化sql語句
2.視圖的增刪改查
-
增
create view 視圖名稱 as select語句
-
刪
drop view 視圖名稱
-
改
alter view 視圖名稱 as 新的select語句
-
查
desc view_name
show create view 視圖名稱
二.觸發器
1.什么是觸發器
當表格內發生,增,刪,改對立面數據有變動時,我們可以給他特定的變動內容,除法某些select語句,以及邏輯判斷
2.觸發器的增刪改查
-
增
create trigger 觸發器名稱 時間 事件 on 表名稱 for each row
begin
sql語句。。。。。;
end- 時間:事件發生前 before | 事件發生后 after
- 事件:update delete insert
-
刪
drop trigger 觸發器名稱
-
查
show triggers;查看所有觸發器
show create trigger 觸發器名稱
-
改
建議刪了后再添加
3.舉例
`python
將結束符設置為|
delimiter |
create trigger cmd_insert after insert on cmd for each row
begin
if new.success = "no" then
insert into errlog values(null,new.cmd,new.sub_time);
end if;
end|
在還原之前的結束符
delimiter ;
`
4.ord與new
- ord:update,delete中可用
- new:update,insert 中可用
三.事物
1.什么是事物
事務就是一系列sql語句的組合,是一個整體
2.事物的特點
-
原子性,指的是這個事務中的sql語句是一個整體,不能拆分,要么都執行,要么全都失敗
-
一致性, 事務執行結束后,表的關聯關系一定是正確的,不會發送數據錯亂
-
隔離性,事務之間相互隔離,數據不會互相影響,即使操作了同一個表 , 本質就是加鎖,根據鎖的粒度不同分為幾個隔離級別
-
持久性,事務執行成功后數據將永久保存,無法恢復
3.事物的語法
`mysql
開啟事務
start transaction
sql 語句......
sql 語句......
sql 語句......
commit #提交事務 一旦提交就持久化了
`
4.歸檔操作
1.savepoint
設置歸檔的存點sql 語句savepoint 檔案名稱
2.返回歸檔點
- rollback to 保存點名稱
- rollback 返回事件一開始
- read committed 上傳修改信息
注意:如果一個事件提交了,將沒法返回歸檔點
四,存儲過程
1.什么是存儲過程
是任意的sql語句的組合,被放到某一個存儲過程中,類似於一個函數,有一個函數,有參數,還是函數體
2.語法
1.創建
create procedure p_name(p_type p_name p_date_type)
begin
sql.......
end
- p_type :有兩種 in輸入,out輸出,inout輸入輸出
- p_name:參數名稱
- p_date_type:參數類型
2.調用
call add1(參數);
其中in對於的是傳入的有具體值參數,out對於數據庫中的變量名
3.刪除
drop procedure 名稱;
4.查找
- 查找全部select name from mysql.proc where db =庫名 and type = 'PROCEDURE';
- 查找個別:show create procedure 名稱;
五.定義變量
set @變量名 = 值
六.函數
一、數學函數
函數 | 介紹 |
---|---|
abs(x) | 返回x的絕對值 |
bin(x) | 返回x的二進制(oct返回八進制,hex返回十六進制) |
ceiling(x) | 返回大於x的最小整數值 |
exp(x) | 返回值e(自然對數的底)的x次方 |
floor(x) | 返回小於x的最大整數值 |
greatest(x1,x2,...,xn) | 返回集合中最大的值 |
least(x1,x2,...,xn) | 返回集合中最小的值 |
ln(x) | 返回x的自然對數 |
log(x)y) | 返回x的以y為底的對數 |
mod(x)y) | 返回x/y的模(余數) |
pi() | 返回pi的值(圓周率) |
rand() | 返回0到1內的隨機值,可以通過提供一個參數(種子)使rand()隨機數生成器生成一個指定的值。 |
round(x,y) | 返回參數x的四舍五入的有y位小數的值 |
sign(x) | 返回代表數字x的符號的值 |
sqrt(x) | 返回一個數的平方根 |
truncate(x,y) | 返回數字x截短為y位小數的結果 |
二、聚合函數(常用於group by從句的select查詢中)
函數 | 介紹 |
---|---|
avg(col) | 返回指定列的平均值 |
count(col) | 返回指定列中非null值的個數 |
min(col) | 返回指定列的最小值 |
max(col) | 返回指定列的最大值 |
sum(col) | 返回指定列的所有值之和 |
group_concat(col) | 返回由屬於一組的列值連接組合而成的結果 |
三、字符串函數
函數 | 介紹 |
---|---|
ascii(char) | 返回字符的ascii碼值 |
bit_length(str) | 返回字符串的比特長度 |
concat(s1,s2...,sn) | 將s1,s2...,sn連接成字符串 |
concat_ws(sep,s1,s2...,sn) | 將s1,s2...,sn連接成字符串,並用sep字符間隔 |
insert(str,x,y,instr) | 將字符串str從第x位置開始,y個字符長的子串替換為字符串instr,返回結果 |
find_in_set(str,list) | 分析逗號分隔的list列表,如果發現str,返回str在list中的位置 |
lcase(str)或lower(str) | 返回將字符串str中所有字符改變為小寫后的結果 |
left(str,x) | 返回字符串str中最左邊的x個字符 |
length(s) | 返回字符串str中的字符數 |
ltrim(str) | 從字符串str中切掉開頭的空格 |
position(substr in str) | 返回子串substr在字符串str中第一次出現的位置 |
quote(str) | 用反斜杠轉義str中的單引號 |
repeat(str,srchstr,rplcstr) | 返回字符串str重復x次的結果 |
reverse(str) | 返回顛倒字符串str的結果 |
right(str,x) | 返回字符串str中最右邊的x個字符 |
rtrim(str) | 返回字符串str尾部的空格 |
strcmp(s1,s2) | 比較字符串s1和s2 |
trim(str) | 去除字符串首部和尾部的所有空格 |
ucase(str)或upper(str) | 返回將字符串str中所有字符轉變為大寫后的結果 |
四、日期和時間函數
函數 | 介紹 |
---|---|
curdate()或current_date() | 返回當前的日期 |
curtime()或current_time() | 返回當前的時間 |
date_add(date,interval int keyword) | 返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:selectdate_add(current_date,interval 6 month); |
date_format(date,fmt) | 依照指定的fmt格式格式化日期date值 |
date_sub(date,interval int keyword) | 返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:selectdate_sub(current_date,interval 6 month); |
dayofweek(date) | 返回date所代表的一星期中的第幾天(1~7) |
dayofmonth(date) | 返回date是一個月的第幾天(1~31) |
dayofyear(date) | 返回date是一年的第幾天(1~366) |
dayname(date) | 返回date的星期名,如:select dayname(current_date); |
from_unixtime(ts,fmt) | 根據指定的fmt格式,格式化unix時間戳ts |
hour(time) | 返回time的小時值(0~23) |
minute(time) | 返回time的分鍾值(0~59) |
month(date) | 返回date的月份值(1~12) |
monthname(date) | 返回date的月份名,如:select monthname(current_date); |
now() | 返回當前的日期和時間 |
quarter(date) | 返回date在一年中的季度(1~4),如select quarter(current_date); |
week(date) | 返回日期date為一年中第幾周(0~53) |
year(date) | 返回日期date的年份(1000~9999) |
五.自定義函數
語法
CREATE FUNCTION f_name(paramters)
returns dataType;
return value;
說明:
paramters 只能是in 輸入參數 參數名 類型
必須有返回值
不能呢加begin 和end
returns 后面是返回值的類型 這里不加分號
return 后面是要返回的值
注意
函數只能返回一個值
函數一般不涉及數據的增刪改查 就是一個通用的功能
調用自定義的函數 與調用系統的一致 不需要call 使用select 可獲得返回值
函數中不能使用sql語句
就像在java中不能識別sql語句一樣
案例
delimiter |
create function addfuntion(a int,b int)
returns int return a + b;
delimiter ;
執行函數
select addfuntion(1,1);
七.關鍵字delimiter
delimiter改變命令行語言執行的方法
/
如默認是;進行運行
而delimiter | 表示末尾輸入|表示執行