數據庫(視圖,事件,觸發器,函數,存儲,變量)


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 | 表示末尾輸入|表示執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM