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三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html表格按钮相对位置不变,表格中如何
- 下一篇: mysql 删除另一个表中的_mysql