MySQL基礎(chǔ)操作

數(shù)據(jù)庫基礎(chǔ)知識

  1. 數(shù)據(jù)庫客戶端
    MySQL作為數(shù)據(jù)庫服務(wù)器來運(yùn)行,任何滿足mysql通信規(guī)范的軟件都可以作為客戶端來連接服務(wù)器。常用的圖形化客戶端:mysql_front,navcat和基于web的phpmyadmin,MySQL自帶命令行客戶端。

  2. 命令行客戶端
    開啟windows的命令行,啟動mysql服務(wù)端進(jìn)程,我們使用mysql客戶端來連接服務(wù)器。如果出現(xiàn)命令提示如下所示,則說明沒有配置境變量,導(dǎo)致系統(tǒng)找不到mysql.exe。

    C:\User> mysql -uroot -p
    'mysql'不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件
    

    解決方案

    1. 配置環(huán)境變量$PATH,指定mysql\bin\目錄。

    2. 每次進(jìn)入mysql\bin\目錄后,再運(yùn)行mysql。

  3. 連接服務(wù)器

    服務(wù)器地址(IP或域名):端口(3306) -u用戶名 -p密碼

    C:\User\> mysql -h localhost -uUsername -pPassword
    

    -h 如果不寫則默認(rèn)連接localhost

    進(jìn)入剛安裝好的MySQL數(shù)據(jù)庫中,我們會發(fā)現(xiàn)內(nèi)置了三個數(shù)據(jù)庫information_schema(數(shù)據(jù)庫基本信息),mysql(用戶基本信息),performance_schema(數(shù)據(jù)庫優(yōu)化信息)這三個內(nèi)置數(shù)據(jù)庫很重要,不能隨便修改或刪除。

數(shù)據(jù)庫入門語句

  1. 查看當(dāng)前服務(wù)器下面有哪些庫(database)

    show databases;
    
  2. 創(chuàng)建數(shù)據(jù)庫

    create database DBName[字符集聲明,整理集聲明];
    
  3. 刪除數(shù)據(jù)庫

    drop database test2;
    
  4. 修改數(shù)據(jù)庫

    只能修改數(shù)據(jù)庫的字符集和整理集,不能修改數(shù)據(jù)庫的名字
    
  5. 選擇數(shù)據(jù)庫

    use DBName;
    
  6. 查看庫下的表

    show tables; 
    
  7. 刪除一張表

    drop table tableName;
    
  8. 修改表名

    rename table oldName to newName;
    
  9. 查看表結(jié)構(gòu)

    desc tableName;
    
  10. 最簡單的建表語句

    create table 表名(
    列1名稱 列1類型,
    列2名稱 列2類型 
    );
    
  11. 為留言本建一張表

    create table msg(
    id int,
    title varchar(60),
    name varchar(10),
    content varchar(1000)
    );
    
  12. 解決字符集的問題

    默認(rèn)的建表一般用utf8,我們在windows下窗口是gbk,因此需要聲明字符集。

所謂建表就是聲明列的過程,數(shù)據(jù)是以文件的形式放在硬盤或內(nèi)存中的,不同的列類型占的空間不一樣,選列的原則是夠用又不浪費(fèi)。

詳解列類型

  1. 數(shù)值類型

    a. 整數(shù)型:tinyint smallint mediumint int bigint

    類型 字節(jié) 占位 無符號 有符號
    tinyint 1 8 0 ~ 2^8-1 -2^7 ~2^7-1
    smallint 2 16 0 ~ 2^16-1 -2^15 ~ 2^15 -1
    mediumint 3 24 0 ~ 2^24-1 -2^23 ~ 2^23 -1
    int 4 32 0 ~ 2^32-1 -2^31 ~ 2^31 -1

    默認(rèn)的整數(shù)類型是有符號的,如果存儲無符號的數(shù)據(jù)應(yīng)顯示聲明

    tinyint(M) unsigned zerofill的含義

    M : 代表寬度,對存儲范圍無影響,在zerofill時才有意義。

    unsigned:無符號類型,對存儲范圍有影響,即數(shù)值非負(fù)。

    zerofill:零填充(如果某列是zerofill默認(rèn)就是unsigned)

    M和zerofill標(biāo)記的字段是僅一種顯示效果,和數(shù)據(jù)的存儲范圍無關(guān)。

    列可以聲明默認(rèn)值,而且推薦聲明默認(rèn)值

    not null default 0
    

    b. 小數(shù)型

    1. 浮點(diǎn)型:float(M,D)(M代表總位數(shù),D代表小數(shù)位)

    2. 定點(diǎn)型:decimal(M,D)

    以float(4,2)為例,有符號時表示范圍-99.99 ~ 99.99,無符號時表示范圍0 ~ 99.99
    decimal和float類型占有固定的字節(jié)數(shù),為4字節(jié)或8字節(jié)。M<=23時占4個字節(jié),M>23時占8個字節(jié)

    decimal類型比float類型更加精確。

  2. 字符類型

    定長類型:char(M),M代表寬度,0<=M<=255,即可容納的字符數(shù)。

    變長類型:varchar(M),M代表寬度,0<=M<=65535,即可容納的字節(jié)數(shù)。(utf-8字符可容納22000個左右)

    文本類型:text,可以存比較大的文本段,搜索速度稍慢,因此如果不是特別大的內(nèi)容,建議使用char和varchar來代替,text不用加默認(rèn)值,加了也沒用。

    char類型和varchar類型的比較

    char定長:M個字符,如果存的小于M個字符,實(shí)占M個字符

    varchar變長:M個字符,如果存的小于M個字符,設(shè)為N,N<=M 實(shí)占N+1-2個字節(jié)

    類型 寬度 可存字符 實(shí)存字符 利用率
    char(M) M M i i/M <= 100%
    varchar(M) M M i字符+(1-2)字節(jié) i/(i+1~2) < 100%

    char類型利用率可能達(dá)到100%,但是varchar類型一定達(dá)不到100%。

    char類型的速度相比varchar類型會稍快一些,如果是存姓名等定長的字段,雖然空間有浪費(fèi),但是考慮速度使用char類型會更好一些。

    char類型如果不夠M個字符,內(nèi)部用空格補(bǔ)齊,取出來的時候再把后面的空格去掉,所以如果內(nèi)容最后有空格再次取出時會被清除。

    考慮空間利用率和存儲速度,像用戶名,四字成語等長度比較固定的字段應(yīng)該采用char類型存儲,而個人簡介等不是特別長的文本內(nèi)容應(yīng)該采用varchar類型來存儲。

  3. 日期時間類型

    a. 年類型:year,一個字節(jié)表示,范圍 1901 ~ 2155 [ 0000標(biāo)識錯誤選擇 ]

    如果輸入兩位,"00 ~ 69"表示2000 ~ 2069,"70 ~ 99"表示1970 ~ 1999

    如果記得麻煩,輸入的時候輸入四位

    b. 日期類型:date,典型格式"Y-m-d" 范圍 1000-01-01 ~ 9999-12-31

    c. 時間類型:time,典型格式"H:i:s" 范圍 -838:59:59 ~ 838:59:59

    d. 日期時間類型:datetime,典型格式"Y-m-d H:i:s" 范圍 "1000-01-01 ~ 9999-12-31 23:59:59"

    注意事項(xiàng):在開發(fā)中,很少使用時間類型來表示一個需要精確到秒的列,原因是雖然日期時間類型能精確到秒而且方便查看,但是不方便計算。解決辦法是用時間戳來表示,即使用int類型來存儲時間戳。

    時間戳:是1970-01-01 00:00:00到當(dāng)前的秒數(shù),一般存注冊時間,商品發(fā)布時間等,并不是使用datetime而是使用時間戳,因?yàn)閐atetime雖然直觀,但計算不夠方便,而用int類型存儲時間戳,方便計算,對于顯示來說,也可以方便格式化。

    對于類似于性別這樣的字段,可以聲明為tinyint,同時約定0和1分別代表什么,也可以使用枚舉類型enum('男',‘女’),但是這種設(shè)計不符合關(guān)系型數(shù)據(jù)庫的列的原子性設(shè)計原則,如果某一列的內(nèi)容僅具有幾種值,那么應(yīng)該單獨(dú)設(shè)計一張表來保存這幾種值。

    插入數(shù)據(jù)時除了數(shù)值類型其余類型數(shù)據(jù)應(yīng)該添加引號

簡單的建表練習(xí)

create table php313(
id int unsigned primary key auto_increment,
name char(3) not null default '',
age tinyint unsigned not null default 0,
email varchar(30) not null default '',
tel char(11) not null default '',
salary decimal(7,2) not null default 0.0,
riqi date not null default "2012-03-13"
)charset utf8;

增刪改查操作

  1. insert語法

    insert into 表名(列1,...列n) values(值1,...值n);
    
    insert into 表名 values(值1,...值n);
    
    insert into 表名(列1,...列n) values(值1,...值n),(值1,...值n),(值1,...,值n);
    
  2. update語法

    update 表名 set 列1=新值1,列2=新值2 where expr;
    
  3. delete語法

    delete from 表名 where expr;
    

對where條件的理解:對滿足expr的行執(zhí)行相應(yīng)動作,如果不加where條件,則默認(rèn)對所有行執(zhí)行動作。

  1. select語法

    查詢的五種子句:where(條件查詢),group by(分組),having(篩選),order by(排序),limit(限制結(jié)果條數(shù))

    1. where expression

      用法:如果expression為真就將該行取出。

    運(yùn)用場合:各種條件查詢場合,如按學(xué)號查詢學(xué)生,按價格查詢商品,按發(fā)布時間查詢新聞等。

    比較運(yùn)算符:<(小于) >(大于) =(等于) <=(小于等于) >=(大于等于) !=或<>(不等于) in 在某集合內(nèi) between and 在某范圍內(nèi)。

    邏輯運(yùn)算符:NOT或!(邏輯非) OR或||(邏輯或) AND或&&(邏輯與)。

    模糊查詢

    %:通配任意字符 _ :通配單個字符

    例子:查找"諾基亞"開頭的所有商品

    select goods_id,cat_id,goods_name from goods where goods_name like '諾基亞%';
     
    select goods_id,cat_id,goods_name from goods where goods_name like '諾基亞__'; 
    
    1. group by col1,col2,...colN

    用法:把行按字段分組

    運(yùn)用場合:常見于統(tǒng)計場合,如按欄目計算帖子數(shù),統(tǒng)計每個人的平均成績等。

    五個統(tǒng)計函數(shù)(也叫聚合函數(shù)):max()求最大,min()求最小,sum()求總和,avg()求平均,count()求總行數(shù)。

    select count(*) from goods;
    
    select cat_id,max(shop_price) from goods group by cat_id;      
    

    五個聚合函數(shù)必須作用于select和from之間的字段上,只有單獨(dú)使用在某一列或者配合group by使用時才有意義,否則查詢出的列是不相匹配的。
    要把列名當(dāng)成變量來看待,可以給列,表和計算結(jié)果取別名。

    3.having expr

    用法:對查詢結(jié)果的篩選

    where:針對原始表起作用,作用的時間在結(jié)果之前。

    having:對查詢結(jié)果其作用,作用的時間在結(jié)果之后。

    例子:一張學(xué)生成績信息表如下:

    姓名 科目 成績
    張三 數(shù)學(xué) 90
    張三 語文 50
    張三 地理 40
    李四 語文 55
    李四 政治 45
    王五 政治 30

    查詢掛科兩門及兩門以上的同學(xué)的平均成績

    思路:先計算所有同學(xué)的平均成績,然后新建一個字段作為是否掛科標(biāo)記,統(tǒng)計這個標(biāo)記的和,使用條件過濾。

    select name,avg(grade) as average,sum(grade < 60) as notpass from grade group by name having notpass > 2;
    

    4.order by

    用法:按一個或多個字段對查詢結(jié)果進(jìn)行排序。

    知識點(diǎn)在本項(xiàng)目案例的運(yùn)用:對欄目的商品按價格由高到低或由低到高排序

    知識點(diǎn)的運(yùn)用場合描述:各種排序場合,如熱點(diǎn)新聞,發(fā)帖狀元等。

    根據(jù)字段可以升序排列也可以降序排列,默認(rèn)是升序排列。

    "字段名 desc"來聲明按降序排列,"字段名 asc"來聲明按升序排列。

    使用order by進(jìn)行排序時,只通過一個字段有可能排不出結(jié)果,這時可以多字段排序。

    order by 列1 [desc/asc],列2 [desc/asc]...
    

    5.limit [offset, ] n

    用法:limit在語句的最后,起到限制條目的作用。

    offset:偏移量 n:取出的條數(shù)

    limit 2,3                 //取出第三條到第五條
    

    offset如果不寫,相當(dāng)于從頭開始取

    針對sql語句良好的理解模型:

    where表達(dá)式:將表達(dá)式放在行中,看表達(dá)式是否為真。

    列:理解為變量,可以運(yùn)算。

    取出結(jié)果:理解為一張臨時表。

    子查詢

    where型子查詢:是指把內(nèi)層查詢的結(jié)果當(dāng)作外層查詢的比較條件

    #查詢最新的商品
    select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods );
    
    #查詢每個欄目下的最新商品
    select goods_id,goods_name from goods where goods_id in (select max(godos_id) from goods group by cat_id);
    

    from型子查詢:是指把內(nèi)層查詢結(jié)果當(dāng)成臨時表,供外sql再次查詢。

    #查詢每個欄目下最新的商品
    select * from (select goods_id,cat_id,goods_name from goods order by cat_id asc,goods_id desc) as tmp group by cat_id;
    
    #查詢掛科兩門以上的平均分
    select name,avg(grade) from grade where name in (select name from(select name,count(*) as notpass from grade where grade < 60 group by name having notpass >=2) as tmp) group by name;
    

    where型子查詢和from型子查詢的區(qū)別:當(dāng)遇到兩條相同記錄時,from型子查詢可能會只查詢到其中一條記錄,而where型子查詢會查詢出所有記錄。

    注意from型子查詢的"as 臨時表"不能丟掉。

    exists型子查詢:是指把外層的查詢結(jié)果拿到內(nèi)層,看內(nèi)層的查詢結(jié)果是否成立

    #查詢有商品的欄目
    select cat_id,cat_name from category where exists(select * from goods where goods.cat_id=category.cat_id);
    

    聯(lián)合查詢

    union的用法:合并查詢結(jié)果。

    作用:把兩次或多次的查詢結(jié)果合并起來。

    要求:兩次查詢結(jié)果的列數(shù)一致,可以來自于一張或多張表。

    推薦:查詢的每一列對應(yīng)的列類型一致

    #查詢大于5000或者小于2000元的商品
    select goods_id,goods_name,shop_price from goods where shop_price > 5000
    union 
    select goods_id,goods_name,shop_price from goods where shop_price < 20;
    
    #查詢反饋表和評論表的內(nèi)容并合并起來
    select user_name,user_email,user_content from feedback where status=1
    union 
    select user_name,email,content from comment;
    

    多次sql語句取出的列名可以不一致,此時以第一個sql取出的列名為準(zhǔn)。如果不同的語句中取出的行有完全相同的(每個列的值都相同),那么相同的行將會合并(去重復(fù))。如果不去重復(fù),可以使用union all來指定。

    #查詢所有的合并記錄,而不去除重復(fù)數(shù)據(jù)
    select id,sum(num) from (select * from ta union all select * from tb) as tmp group by id;
    

    如果子句中有order by或limit,應(yīng)該用括號將子句包起來,推薦放到所有子句之后,即對最終合并的結(jié)果發(fā)揮作用。

    (select goods_id,cat_id,goods_name,shop_price from goods where cat_id=4 order by shop_price desc)
    union
    (select goods_id,goods_name,shop_price from goods where cat_id=5 order by shop_price desc) 
    order by shop_price desc;  
    

    在子句中order by配合limit使用時才有意義,如果order by不配合limit使用,會被語法分析器分析時去除。

    (select goods_id,cat_id,goods_name,shop_price from goods where cat_id=3 order by shop_price desc limit 3) 
    union 
    (select goods_id,cat_id,goods_name,shop_price from goods where cat_id=4 order by shop_price desc limit 2);
    

    連接查詢

    連接查詢步驟:先將兩張表連接起來,再使用條件過濾一些數(shù)據(jù),最后像查詢一張表那樣查詢聯(lián)合表,注意字段如果有重復(fù)應(yīng)該顯示聲明是哪一張表的字段。

    select goods_id,goods.cat_id,cat_name,goods_name,shop_price from goods left join category on goods.cat_id=category.cat_id;
    

    左連接 (left join)

    select 列1,列2,...列n from tableA left join tableB on tableA.列=tableB.列
    
    [此處表連接成一張大表,完全當(dāng)成普通表來看待]
    
    where group by having等查詢子句照常寫
    

    右連接 (right join)

    select 列1,列2,...列n from tableA right join tableB on tableA.列=tableB.列
    
    [此處表連接成一張大表,完全當(dāng)成普通表來看待]
    
    where group by having等查詢子句照常寫
    

    內(nèi)連接 (inner join)

    select 列1,列2,...列n from tableA inner join tableB on tableA.列=tableB.列
    
    [此處表連接成一張大表,完全當(dāng)成普通表來看待]
    
    where group by having等查詢子句照常寫
    

    左右連接以左表為準(zhǔn),去右表找匹配數(shù)據(jù),找不到匹配用NULL補(bǔ)齊。

    左連接與右連接的關(guān)系:左右連接可以相互轉(zhuǎn)化,A left join B <=> B right join A。推薦把右連接轉(zhuǎn)化成左連接來使用,并推薦使用左連接代替右連接,這樣做兼容性更好一點(diǎn)。

    內(nèi)連接:查詢左右表都有的數(shù)據(jù),即不要左右連接中的NULL那一部分,是左右連接的交集。

    如果想要查出左右連接的并集,可以用union來達(dá)到目的,目前mysql不支持外連接outer join。

練習(xí)題

1.取出goods表,category表,brand表連接查詢得到以下字段

goods_id,goods_name,cat_id,cat_name,brand_id,brand_name

select goods_id,goods_name,category.cat_id,category.cat_name,brand.brand_id,brand.brand_name 
from goods left join category on goods.cat_id=category.cat_id 
left join brand on goods.brand_id=brand.brand_id;

2.面試題

Match賽程表

字段名稱 字段類型 描述
matchID int 主鍵
hostTeamID int 主隊(duì)的ID
guestTeamID int 客隊(duì)的ID
matchResult varchar(20) 比賽結(jié)果,如(2,0)
matchTime date 比賽開始時間

Team參賽隊(duì)伍表

字段名稱 字段類型 描述
teamID int 主鍵
teamName int 隊(duì)伍名稱

Match的hostTeamID與guestTeamID都與Team中的teamID關(guān)聯(lián),查出2006-6-1到2006-7-1之間舉行的所有比賽,并且用以下形式列出:拜仁 2:0 不來梅

select t1.tname as hname,mres,t2.tname as gname,matime from m 
left join t as t1 on m.hid = t1.tid 
left join t as t2
on m.gid = t2.tid
where matime between '2006-06-01' and '2006-07-01';

列的增刪改

  1. 增加列

    alter table 表名 add 列聲明;
    

    增加的列默認(rèn)放在表的最后一列,可以用after來聲明新增的列放在哪一列的后面

    alter table 表名 add 列聲明 after 列名;
    

    如果新增的列放在最前面,則使用first關(guān)鍵字

    alter table 表名 add 列聲明 first;
    
  2. 修改列

    alter table 表名 change 列名 列聲明;
    
  3. 刪除列

    alter table 表名 drop 列名;
    

視圖 view

  1. 視圖的定義

    視圖是由查詢結(jié)果形成的一張?zhí)摂M表,沒有真實(shí)的數(shù)據(jù)存在,只是一種查詢產(chǎn)生的關(guān)系。

  2. 視圖的創(chuàng)建

    create view 視圖名 select 語句;
    
  3. 視圖的修改

    alter table 視圖名 as select 語句;

  4. 視圖的刪除

    drop view 視圖名;
    
  5. 視圖的意義

    a.可以達(dá)到簡化查詢的目的,對于一個多步復(fù)雜查詢,可以將中間結(jié)果保存為視圖,再針對視圖進(jìn)行查詢。

    b.可以進(jìn)行權(quán)限控制,把表的權(quán)限封閉,但是開放相應(yīng)的視圖權(quán)限,視圖里只開發(fā)部分?jǐn)?shù)據(jù)。

    c.大數(shù)據(jù)分表時可以用到,比如表的行數(shù)超過200萬時,就會變慢,可以把一張表的數(shù)據(jù)拆成四張表來存放,查詢時可以用視圖將四張表合并為一張來查詢。

  6. 視圖與表的關(guān)系

    視圖是表的查詢結(jié)果,表的數(shù)據(jù)修改會影響視圖的結(jié)果,視圖的增刪改也可以影響到表。但是視圖并不總是能夠增刪改的,只有視圖數(shù)據(jù)與表的數(shù)據(jù)一一對應(yīng)時,視圖的數(shù)據(jù)是可以修改的。對于視圖的insert操作還應(yīng)注意視圖必須包含所有表中沒有默認(rèn)值的列。

  7. 視圖的algorithm

    merge:當(dāng)引用視圖時,引用視圖的語句與定義視圖的語句合并。

    temptable:當(dāng)引用視圖時,根據(jù)視圖的創(chuàng)建語句建立一張臨時表。

    undefined:未定義,系統(tǒng)傾向于merge模式。

    merge模式與temptable模式的區(qū)別

    merge:意味著視圖只是一個語句規(guī)則,當(dāng)查詢視圖時,把查詢視圖的語句(比如where子句)與創(chuàng)建時的語句(比如where子句)等合并,分析形成一條select語句。

    #創(chuàng)建視圖的語句
    create view g2 as select goods_id,cat_id,goods_name,shop_price 
    from goods order by 
    cat_id asc,shop_price desc;
    
    #查詢視圖的語句
    select * from g2 group by cat_id;
    
    #最終執(zhí)行的語句
    select goods_id,cat_id,goods_name,shop_price from goods 
    group by cat_id order by 
    cat_id asc,shop_price desc;
    

    temptable:根據(jù)創(chuàng)建語句瞬間創(chuàng)建一張臨時表,然后查詢視圖的語句從該臨時表查詢數(shù)據(jù)。通過顯示指定temptable模式可以達(dá)到子查詢的效果。

    create algorithm=temptable view g2 as 
    select goods_id,cat_id,goods_name,shop_price 
    from goods order by cat_id asc,shop_price desc;
    
    #最終執(zhí)行兩句話,首先取數(shù)據(jù)放在臨時表,然后查詢臨時表。
    

字符集與校對集

1.字符集:MySQL的字符集設(shè)置非常靈活,可以設(shè)置以下幾個層面:服務(wù)器默認(rèn)字符集,數(shù)據(jù)庫默認(rèn)字符集,表默認(rèn)字符集,列默認(rèn)字符集。如果某一級別沒有指定字符集,則繼承上一級。

以表聲明為utf8為例,存儲在表中的數(shù)據(jù)是utf8字符集。

[圖解MySQL字符設(shè)置]

1.告訴服務(wù)器客戶端的編碼 character_set_client

2.告訴轉(zhuǎn)換器轉(zhuǎn)換的編碼 character_set_connection

3.查詢結(jié)果使用什么編碼 character_set_results

如果以上三者為同一字符集N可以使用 set names N;

產(chǎn)生亂碼的情形:

client聲明與事實(shí)不符或result聲明與客戶端頁面不符。

丟失數(shù)據(jù)的情形:

character_set_connection和character_set_server的字符集比character_set_client小

2.校對集:校對集就是排序規(guī)則,一種字符集可以有一個或多個排序規(guī)則,utf8一般使用默認(rèn)的utf8_general_ci規(guī)則,也可以使用二進(jìn)制規(guī)則utf8_bin

show character set;             //查看字符集

show collation;                 //查看校對集

show colation like 'utf8%';     //查看utf8字符集對應(yīng)的校對集 

觸發(fā)器 trigger

  1. 觸發(fā)器的作用

    監(jiān)視某種動作并觸發(fā)某種動作,觸發(fā)器能監(jiān)視增刪改三種操作并出發(fā)增刪改三種操作。

  2. 觸發(fā)器的應(yīng)用場景

    a. 當(dāng)向一張表中添加或刪除記錄時,需要在相關(guān)表中進(jìn)行同步操作。比如,當(dāng)一個訂單產(chǎn)生時,訂單的所購的商品的庫存量應(yīng)改相應(yīng)減少。

    b. 當(dāng)表上某列數(shù)據(jù)的值與其他表中的數(shù)據(jù)有聯(lián)系時。比如當(dāng)某客戶進(jìn)行欠款消費(fèi),可以在生成訂單時通過設(shè)計觸發(fā)器判斷客戶的累計欠款是否超過了最大限度。

    c. 當(dāng)需要對某張表進(jìn)行跟蹤時。比如,當(dāng)有新訂單產(chǎn)生時,需要及時通知相關(guān)人員進(jìn)行處理,此時可以在訂單表上設(shè)計添加觸發(fā)器加以實(shí)現(xiàn)。

  3. 觸發(fā)器的四個要素

    a. 監(jiān)視地點(diǎn):table

    b. 監(jiān)視事件:insert/update/delete

    c. 觸發(fā)時間:after/before

    d. 觸發(fā)事件:insert/update/delete

  4. 觸發(fā)器的使用語法

    創(chuàng)建觸發(fā)器的語法

    create trigger triggerName
    after/before insert/update/delete
    on tableName
    for each row        //這句話在MySQL數(shù)據(jù)庫中是固定的
    begin
      sql語句;        //一句或多句insert/update/delete范圍內(nèi)
    end$
    

    刪除觸發(fā)器的語法

    drop trigger triggerName;
    
  5. 觸發(fā)器引用行變量的值

    a. 對于insert而言,新增的行用new來表示,行中每一列用new.列名來表示。

    b. 對于delete而言,刪除的行用old來表示,行中每一列用old.列名來表示。

    c. 對于update而言,原來的行用old來表示,行中每一列的值用old.列名來表示;新增的行用new來表示,行中每一列的值用new.列名來表示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容