視圖View
作用:簡化查詢語句
創建視圖
create view 視圖名
as
select語句;
修改視圖
alter view 視圖名
as
select語句子
刪除視圖
drop view 視圖名;
使用視圖:把視圖當表用
select * from 視圖名;
select 字段,字段... from 視圖名;
select * from 視圖名 where 條件 order by 字段 limit 起始值,條數;
查看視圖
1、查看現存的所有表
show tables;
2、查看information_schema庫->views表
select table_schema,table_name from information_schema.views
where table_schema='庫名';
視圖注意:
1、簡化查詢語句(視圖中只能存放select查詢語句)
2、把視圖當表用(建議只對視圖執行查詢操作)
視圖知識點
1、創建視圖
2、修改視圖
3、查看視圖
4、刪除視圖
5、使用視圖
視圖使用的場合
一個多表查詢語句,頻繁的使用,那麼就要考慮是否創建一個視圖
-----------------------------------------------------------
觸發器Trigger:數據庫中的事件
作用:當用戶對錶進行增刪改操作的同時,是否要執行其他操作
觸發器執行時間
before:當用戶對錶進行增刪改時,先調用觸發器,後執行增刪改操作
after:當用戶對錶進行增刪改時,先執行增刪改操作,後調用觸發器
觸發器的類型
insert:當用戶對錶進行insert操作時,系統將自動調用觸發器
update:當用戶對錶進行update操作時,系統將自動調用觸發器
delete:當用戶對錶進行delete操作時,系統將自動調用觸發器
創建觸發器
delimiter //
drop trigger if exists 觸發器名//
create trigger 觸發器名
before|after insert|update|delete
on 表名
for each row
begin
sql語句;
sql語句;
sql語句;
end//
delimiter ;
刪除觸發器
drop trigger 觸發器名;
drop trigger updateBbs;
查看觸發器
1、查看information_schema庫->triggers表
select trigger_schema,trigger_name from information_schema.triggers
where trigger_schema='庫名';
例一:修改bbsInfo表中的記錄,同時向userInfo表添加一條記錄
delimiter //
drop trigger if exists updateBbs//
create trigger updateBbs
after update
on bbsInfo
for each row
begin
insert into userInfo(userName,password)values('張三','123');
end//
delimiter ;
例二:向新聞表添加記錄的同時,將分類表中指定分類下的數量加一
newsTypes:typeId、typeName、articleNums
newsArticles:articleId、title、content...
注意:該功能無法用觸發器實現(原因:觸發器無法傳參)
例三:統計功能
員工表
create table employee
(
empId int auto_increment primary key,
userName varchar(20) unique not null,
sex char(3) default '男',
age int default 20
);
部門表
create table bumen
(
bmId int auto_increment primary key,
bmName varchar(50) not null
);
統計表
create table tongji
(
empCount int default 0,#員工總數
bmCount int default 0 #部門總數
);
insert into tongji values(0,0);
題目:向員工表添加記錄時,員工數量加一,相返的減一
向部門表添加記錄時,部門數量加一,相返的減一
添加員工的觸發器
delimiter //
drop trigger if exists addEmp//
create trigger addEmp
after insert
on employee
for each row
begin
update tongji set empCount=empCount+1;
end//
delimiter ;
刪除員的觸發器
delimiter //
drop trigger if exists delEmp//
create trigger delEmp
after delete
on employee
for each row
begin
update tongji set empCount=empCount-1;
end//
delimiter ;
添加部門的觸發器
delimiter //
drop trigger if exists addBm//
create trigger addBm
after insert
on bumen
for each row
begin
update tongji set bmCount=bmCount+1;
end//
delimiter ;
刪除部門的觸發器
delimiter //
drop trigger if exists delBm//
create trigger delBm
after delete
on bumen
for each row
begin
update tongji set bmCount=bmCount-1;
end//
delimiter ;
測試
insert into employee(userName,sex,age)values('張三','男',25);
insert into employee(userName,sex,age)values('李四','女',25);
insert into employee(userName,sex,age)values('王五','女',27);
insert into employee(userName,sex,age)values('趙六','男',30);
insert into employee(userName,sex,age)values('田七','男',50);
insert into bumen(bmName)values('開發部');
insert into bumen(bmName)values('就業部');
觸發器的知識點
1、創建觸發器
2、刪除觸發器
3、查看觸發器
觸發器注意
1、一個觸發器最多隻能有一個類型
2、一個表最多隻能添加三個觸發器
3、一個觸發器最多隻能監聽一個表的動作
4、觸發器是由系自動調用(觸發器是由用戶隱式調用)
5、觸發器沒有參數、觸發器沒有返回值
觸發器的使用場合
當用戶對錶進行增刪改的同時,是否要執行其他操作
----------------------------------------------------------
存儲過程Procedure:相當於數據庫中的自定義函數
作用:解決了代碼重用(省代碼)
創建存儲過程
delimiter //
drop procedure if exists 存儲過程名//
create procedure 存儲過程名(參數...)
begin
sql語句;
sql語句;
sql語句;
end//
delimiter ;
調用存儲過程
call 存儲過程名();
call 存儲過程名(值,值,值...);
刪除存儲過程
drop procedure 存儲過程名;
查看存儲過程
1、查看mysql庫->proc表
select db,name from mysql.proc where db='庫名';
例一:利用存儲過程查詢bbsInfo表的記錄
delimiter //
drop procedure if exists getBbs//
create procedure getBbs()
begin
select * from bbsInfo;
end//
delimiter ;
調用上邊的存儲過程
call getBbs();
php語言:弱語言、腳本語言
例二:利用存儲過程查詢bbsInfo表的記錄
delimiter //
drop procedure if exists getBbsById//
create procedure getBbsById(bid int)#參數名不能和表的字段名相同
begin
select * from bbsInfo where bbsId=bid;
end//
delimiter ;
調用上邊的存儲過程
call getBbsById(7);
外鍵約束名詞:
主表:包含主鍵的那個表
從表(外表):包含外鍵的那個表
外鍵限制
1、建表 先建主表,後建從表
2、刪表 先刪從表,後刪主表
3、添加記錄 先給主表添加記錄,後給從表添加記錄
4、刪除記錄 先刪除從表記錄,後刪除主表的記錄
用戶表(主表)
userId userName...
1 張三
2 李四
3 王五
4 趙六
文章表(從表)
id userId title content...
1 2 xxxxxx xxxxxxxxxxxxxxxxxx
2 4 xxxxxx xxxxxxxxxxxxxxxxxx
例三:利用刪除過程,刪除指定的分類$typeId=3
newsTypes: 分類表(typeId,typeName...)
newsArticles: 新聞表(articleId,typeId,title...)
reviews: 評論表(id,articleId,body...)
delimiter //
drop procedure if exists deleteBbs//
create procedure deleteBbs(tid int)
begin
delete from reviews where articleId in (select articleId from newsArticles where typeId=tid);
delete from newsArticles where typeId=(tid);
delete from newsTypes where typeId=(tid);
end//
delimiter ;
調用上邊的存儲過程
call deleteBbs(1);
mysql高級 視圖,觸發器,存儲過程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
找了幾天終於找到一個無限聯動下拉框的代碼,並且可以賦初始值,非常滿意
zly22169846
2020-06-22 05:12:42
sql server用腳本生成數據庫腳本
cuijian_ok
2020-06-16 02:44:09
sql server鎖機制
cuijian_ok
2020-06-16 02:44:09
兩條關於生成排名的SQL語句
cuijian_ok
2020-06-16 02:44:09
微服務之----分佈式事務解決方案
起源星
2020-06-11 14:18:11
【Mysql之自我練習】select查詢複雜排序(注:私用的,爲了不遺失)
深圳-雄少
2020-06-03 09:13:55
sql server中取得表結構的存儲過程
htyy521
2020-02-24 00:50:51
DTS和WorkBench
htyy521
2020-02-24 00:50:21
基於xml的數據庫移植代碼
htyy521
2020-02-24 00:50:21
在Windows操作系統下,卸載Oracle 9i
htyy521
2020-02-24 00:50:21
如何使用SQlDEMO.
htyy521
2020-02-24 00:50:21
刪除oracle中完全重複的數據
IT_guo
2020-02-23 19:42:28
刪除oralce中重複的數據(一)
IT_guo
2020-02-23 19:42:28
PowerDesigner 16 sql server 2008 生成備註報“對象名 'sysproperties' 無效”解決辦法。
xiaotuni
2020-02-23 05:13:16