日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...

發布時間:2024/7/23 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 MySql中的三元運算符有兩種方法:

1、case when 條件 then (條件為true時執行) else(條件為false時執行) end;/*end不可少*/

2、select *,if(expr1,expr2,expr3) from 表名;

實例:SELECT if(isnull(sum(c.MONEY)),0,sum(c.MONEY)) AS m1 FROM Table

2 上下連表:

select 列名,列名 from 表名

union

select 列名,列名 from 表名;

這連表方法自動去重,如果不想去重,則union改成 union all。 需要注意的是上下連表的 所連接的表的列數目需要相同。

3 視圖

MYSQL語句:

CREATE VIEW? 視圖名 AS SELECT 列名 FROM 表名 WHERE 條件;

ALTER VIEW? 視圖名 AS SELECT 列名 FROM 表名 WHERE 條件;

視圖是一張虛擬表,動態的隨著原始表更新而更新;

4 觸發器

觸發器是與表有關的數據庫對象,在滿足定義條件時觸發,并執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在數據庫端確保數據的完整性。

CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW?trigger_stmt

trigger_name:觸發器的名稱

tirgger_time:觸發時機,

為BEFORE或者AFTER

trigger_event:觸發事件,為INSERT、DELETE或者UPDATE

tb_name:表示建立觸發器的表名,就是在哪張表上建立觸發器

trigger_stmt:觸發器的程序體,可以是一條SQL語句或者是用BEGIN和END包含的多條語句 所以可以說MySQL創建以下六種觸發器: BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE AFTER INSERT,AFTER DELETE,AFTER UPDATE

mysql> DELIMITER //

mysql> CREATE TRIGGER demo BEFORE DELETE ON users FOR EACH ROW BEGIN INSERT INTO logs VALUES(NOW());

INSERT INTO logs VALUES(NOW()); END //

mysql> DELIMITER ;

DELIMITER 用于修改結束語句的符號,上例就是將符號改為//,結尾又改回來了,目的是為了觸發器里面的觸發語句不引發錯誤。

NEW.columnname:新增行的某列數據

OLD.columnname:刪除行的某列數據

5 函數

MySQL中提供了許多內置函數

自定義函數

delimiter \\

create function f1(

i1 int,

i2 int)

returns int

BEGIN

declare num int;

set num = i1 + i2;

return(num);

END \\

delimiter ;

刪除函數

drop function func_name;

執行函數

獲取返回值

declare @i VARCHAR(32);

select UPPER('alex') into @i;

SELECT @i;

在查詢中使用

select f1(11,nid) ,name from tb2;

6 執行過程

存儲過程是一個SQL語句集合,當主動去調用存儲過程時,其中內部的SQL語句會按照邏輯執行。

創建存儲過程

delimiter //

create procedure p1()

BEGIN

select * from t1;

END//

delimiter ;

執行存儲過程

call p1()

創建有參數的存儲過程,

in ? ? ? ? ?僅用于傳入參數用

out ? ? ? ?僅用于返回值用

inout ? ? 既可以傳入又可以當作返回值

delimiter \\

create procedure p1(

in i1 int,

in i2 int,

inout i3 int,

out r1 int

)

BEGIN

DECLARE temp1 int;

DECLARE temp2 int default 0;

set temp1 = 1;

set r1 = i1 + i2 + temp1 + temp2;

set i3 = i3 + 100;

end\\

delimiter ;

-- 執行存儲過程

set @t1 =4;

set @t2 = 0;

CALL p1 (1, 2 ,@t1, @t2);

SELECT @t1,@t2;

解釋: set @ti =4,set 是賦值的key word,@代表這個關鍵字是定義域是session,t1是變量名字。

7 事務

1、原子性(Atomicity):事務開始后所有操作,要么全部做完,要么全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是一個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。

2、一致性(Consistency):事務開始前和結束后,數據庫的完整性約束沒有被破壞 。比如A向B轉賬,不可能A扣了錢,B卻沒收到。

3、隔離性(Isolation):同一時間,只允許一個事務請求同一數據,不同的事務之間彼此沒有任何干擾。比如A正在從一張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。

4、持久性(Durability):事務完成后,事務對數據庫的所有更新將被保存到數據庫,不能回滾。

delimiter \\

create PROCEDURE p1( -- procedure 關鍵字,字義 程序

OUT p_return_code tinyint -- 全session的變量 短整數類型。

)

BEGIN

DECLARE exit handler for sqlexception --mysql的異常處理,declare (聲明) exit(退出這個存儲過程)

handler for sqlexception --出現sqlception 時

BEGIN -- ERROR set p_return_code = 1; rollback;

END;

DECLARE exit handler for sqlwarning BEGIN -- WARNING set p_return_code = 2;

rollback; END; START TRANSACTION; ---START TRANSACTION 或 BEGIN 開啟事務

DELETE from tb1;

insert into tb2(name)values('seven');

COMMIT; --提交事務(關閉事務)

-- SUCCESS

set p_return_code = 0;

END\\

delimiter ;

mysql異常處理詳解

總結

以上是生活随笔為你收集整理的mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。