mysql-函數,視圖,觸發器

存儲過程函數

-- 設置數據庫的結束符爲 ///
mysql> delimiter ///
-- 創建過程函數test
mysql> create procedure test(a int)
    -> begin
    -> select * from student where id=a;
    -> end
    -> ///
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

--調用函數 test
mysql> call test(2);
+----+------+-----+-----+
| id | name | age | sex |
+----+------+-----+-----+
|  2 | lisi |  31 | 0   |
+----+------+-----+-----+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

-- 查看函數 test 的狀態信息
mysql> show procedure status like 'test' \G       
*************************** 1. row ***************************
                  Db: shop
                Name: test
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2018-04-24 12:42:43
             Created: 2018-04-24 12:42:43
       Security_type: DEFINER
             Comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

-- 刪除函數 test
mysql> drop procedure test;  

視圖

-- 創建視圖
mysql> create view test_view(name,age) as select name,age from student where id =5;
Query OK, 0 rows affected (0.00 sec)

-- 視圖調用 
mysql> select * from test_view;
+--------+-----+
| name   | age |
+--------+-----+
| tianqi |  42 |
+--------+-----+
1 row in set (0.01 sec)

-- 查看視圖的創建過程
mysql> show create view test_view \G

-- 刪除視圖
mysql> drop view test_view;

觸發器

-- artcle表結構,article表開始是空的
mysql> desc article;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| title | varchar(20)      | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+

mysql> desc total_num;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type                | Null | Key | Default | Extra          |
+-------+---------------------+------+-----+---------+----------------+
| id    | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| type  | tinyint(3) unsigned | NO   |     | NULL    |                |
| num   | int(10) unsigned    | NO   |     | NULL    |                |
+-------+---------------------+------+-----+---------+----------------+

-- type=1代表文章數  type=2代表用戶的數量
mysql> select * from total_num;   
+----+------+-----+
| id | type | num |
+----+------+-----+
|  1 |    1 |   0 |
|  2 |    2 |   0 |
+----+------+-----+

創建觸發器,向article表中每增加一條記錄,total_num表中的type=1對應num值就加1
mysql> delimiter //
mysql> create trigger add_total_num after insert on article for each row
    -> begin
    -> update total_num set num=num+1 where type=1;
    -> end
    -> //

創建觸發器,向article表中每刪除一條記錄,total_num表中的type=1對應num值就減1
mysql> create trigger delete_total_num after delete on article for each row
    -> begin
    -> update total_num set num=num-1 where type=1;
    -> end
    -> //

向article表中插入2條數據,再查看total_num表中的變化
mysql> insert into article(title)values('title1'),('title2');
    -> //

mysql-函數,視圖,觸發器

向article表中刪除一條記錄時,查看total_num表中的變化
mysql> delete from article where id=1;
    -> //

mysql-函數,視圖,觸發器

觸發器語法

create trigger trigger_name after|before insert|update|delete on table_name for each row
begin
sql語句
end;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章