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

07.21自我總結

一.視圖

1.什麼是是視圖

​ 本質上是一個虛擬的表,即看得見可是不實際存在java

  • 視圖內修改了內容,原表的內容也會受到影響
  • 原表修改了內容視圖一樣也會受到影響

目的:簡化sql語句python

2.視圖的增刪改查

  • mysql

    create view 視圖名稱 as select語句sql

  • 數據庫

    drop view 視圖名稱函數

  • 命令行

    alter view 視圖名稱 as 新的select語句unix

  • code

    desc view_nameorm

    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 @變量名 = 值

六.函數

1、數學函數

函數 介紹
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位小數的結果

2、聚合函數(經常使用於group by從句的select查詢中)

函數 介紹
avg(col) 返回指定列的平均值
count(col) 返回指定列中非null值的個數
min(col) 返回指定列的最小值
max(col) 返回指定列的最大值
sum(col) 返回指定列的全部值之和
group_concat(col) 返回由屬於一組的列值鏈接組合而成的結果

3、字符串函數

函數 介紹
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中全部字符轉變爲大寫後的結果

4、日期和時間函數

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

相關文章
相關標籤/搜索