




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章MySQL進階《PHP+MySQL動態網站開發》學習目標/Target掌握事務的開啟、提交和回滾操作掌握使用視圖對數據進行操作掌握數據庫的備份與還原學習目標/Target了解用戶賬號的管理和授權熟悉索引及分區的應用熟悉存儲過程及觸發器的使用方法章節概述/Summary在前面的章節中,已經學會了如何使用MySQL來對數據進行增加、刪除、修改、查詢操作,這些是MySQL的基本功能。而在實際開發中,有時還需要利用事務保證多條SQL語句同時成功或失敗、利用視圖來滿足不同的查詢需求、利用索引來提高數據庫的查詢效率等,這就需要學習MySQL中的一些進階技術。本章將針對MySQL中的事務、視圖、數據備份與還原、用戶管理、索引、分區、存儲過程以及觸發器進行詳細講解。目錄/Contents01020304事務視圖數據備份與還原用戶管理目錄/Contents05060708索引分區存儲過程觸發器事務8.18.1.1事務的概念
先定一個小目標!熟悉事務的概念,能夠說出在什么情況下需要用到事務8.1.1事務的概念事務(Transaction):針對數據庫的一組操作,由一條或多條SQL語句組成,每個SQL語句相互依賴。保證數據完整性:程序執行過程中有一條SQL語句執行失敗或發生錯誤,其他語句就不會執行,返回到事務開始前的狀態。8.1.1事務的概念應用場景:轉賬時如果任意一條SQL出現異常,導致兩個賬戶的金額錯誤。用戶A用戶B用戶A執行轉出SQL用戶B執行轉入SQL8.1.2事務特性
先定一個小目標!熟悉事務的特性,能夠說出事務的4個基本特性分別是什么8.1.2事務特性原子性Atomicity事務必須被視為不可分割的最小工作單元,只有事務中所有的數據操作都執行成功,整個事務才算執行成功。一致性Consistency持久性Durability在事務處理時,無論執行成功還是失敗,都要保證數據庫系統中的事務狀態一致,保證數據庫系統不會返回到一個未處理的事務中。事務在執行時,不會受其他事務的影響。保證未完成事務的所有操作與數據庫系統的隔離,事務執行成功后才能看到執行結果。事務一旦提交,其對數據庫的修改就是永久性的。隔離性Isolation8.1.2事務特性實現事務特性的途徑:一致性:主要由日志機制實現,記錄數據庫的所有變化,提供恢復事務的跟蹤記錄。隔離性:通過并發控制、可串行化、鎖等技術。8.1.3事務處理
先定一個小目標!掌握事務的處理,能夠進行開啟事務、提交事務、回滾事務,以及設置保存點等操作8.1.3事務處理實現事務的步驟:開啟事務提交事務回滾事務刪除保存點回滾至保存點創建保存點8.1.3事務處理開啟事務:STARTTRANSACTION;語法格式8.1.3事務處理提交事務:COMMIT;語法格式8.1.3事務處理回滾事務:ROLLBACK;語法格式8.1.3事務處理創建保存點:SAVEPOINT保存點名;語法格式用于撤銷一部分事務,一個事務可以創建多個保存點,提交事務后保存點會被刪除,回滾到某個保存點后,該保存點之后的保存點也會消失。8.1.3事務處理回滾至保存點:ROLLBACKTOSAVEPOINT保存點名;語法格式8.1.3事務處理刪除保存點:ELEASESAVEPOINT保存點名;語法格式8.1.3事務處理mysql>CREATETABLE`my_user`(->`id`INTUNSIGNEDPRIMARYKEYAUTO_INCREMENTCOMMENT'用戶id',->`name`VARCHAR(100)NOTNULLUNIQUEDEFAULT''COMMENT'用戶名',->`money`DECIMAL(10,2)UNSIGNEDNOTNULLDEFAULT0COMMENT'金額'->)ENGINE=InnoDBDEFAULTCHARSET=utf8;mysql>INSERTINTO`my_user`(`id`,`name`,`money`)VALUES->(1,'Alex',1000),(2,'Bill',1000);案例:使用事務實現轉賬代碼示例創建數據表。創建用戶表插入測試數據。STEP018.1.3事務處理mysql>SELECT`name`,`money`FROM`my_user`;+------+---------+|name|money|+------+---------+|Alex|1000.00||Bill|1000.00|+------+---------+案例:使用事務實現轉賬代碼示例查看數據。創建用戶表插入測試數據。STEP028.1.3事務處理#①開啟事務mysql>STARTTRANSACTION;#②Alex減少100元mysql>UPDATE`my_user`SET`money`=`money`-100WHERE`name`='Alex';#③Bill增加100元mysql>UPDATE`my_user`SET`money`=`money`+100WHERE`name`='Bill';#④提交事務mysql>COMMIT;案例:使用事務實現轉賬代碼示例執行轉賬操作。通過UPDATE語句將Alex用戶的100元錢轉給Bill用戶,最后提交事務。STEP038.1.3事務處理mysql>SELECT`name`,`money`FROM`my_user`;+------+---------+|name|money|+------+---------+|Alex|900.00||Bill|1100.00|+------+---------+案例:使用事務實現轉賬代碼示例查看轉賬結果。查詢Alex和Bill的金額。STEP048.1.3事務處理mysql>STARTTRANSACTION;mysql>UPDATE`my_user`SET`money`=`money`-100WHERE`name`='Bill';mysql>SELECT`name`,`money`FROM`my_user`WHERE`name`='Bill';+------+---------+|name|money|+------+---------+|Bill|1000.00|+------+---------+案例:使用事務實現轉賬代碼示例回滾事務。將Bill的金額扣除100元。STEP058.1.3事務處理#①回滾事務mysql>ROLLBACK;#②查看Bill的金額mysql>SELECT`name`,`money`FROM`my_user`WHERE`name`='Bill';+------+---------+|name|money|+------+---------+|Bill|1100.00|+------+---------+案例:使用事務實現轉賬代碼示例執行回滾操作。查詢Bill的金額。STEP068.1.3事務處理#①開啟事務mysql>STARTTRANSACTION;#②Alex扣除100元mysql>UPDATE`my_user`SET`money`=`money`-100WHERE`name`='Alex';#③創建保存點s1mysql>SAVEPOINTS1;#④Alex扣除50元mysql>UPDATE`my_user`SET`money`=`money`-50WHERE`name`='Alex';案例:使用事務實現轉賬代碼示例創建保存點。將Alex(當前金額900)的金額扣除100元,創建保存點S1,再扣除50元。STEP078.1.3事務處理#①回滾到保存點s1mysql>ROLLBACKTOSAVEPOINTS1;#②查詢Alex的金額mysql>SELECT`name`,`money`FROM`my_user`WHERE`name`='Alex';+------+--------+|name|money|+------+--------+|Alex|800.00|+------+--------+案例:使用事務實現轉賬代碼示例將事務回滾至保存點。查詢Alex的金額。STEP088.1.3事務處理#①回滾事務mysql>ROLLBACK;#②查詢Alex的金額mysql>SELECT`name`,`money`FROM`my_user`WHERE`name`='Alex';+------+--------+|name|money|+------+--------+|Alex|900.00|+------+--------+案例:使用事務實現轉賬代碼示例回滾事務。再次執行回滾操作,則恢復到事務開始時的狀態。STEP09視圖8.28.2.1創建視圖
先定一個小目標!掌握視圖的創建,能夠通過CREATEVIEW語句創建視圖8.2.1創建視圖什么是視圖:視圖是從一個或多個表中導出來的表,它是虛擬存在的表,表結構和數據都依賴于基本表。視圖的作用:通過視圖可以查看基本表的數據,還可以對數據進行查詢、添加、修改和刪除。CREATEVIEW視圖名稱ASSELECT指令;語法格式CREATEVIEW創建視圖SELECT指令獲取視圖的結構和數據8.2.1創建視圖mysql>CREATEVIEW`view_student`AS->SELECTs.`id`,s.`name`,m.`name`ASmajorFROM`majors`ASm->LEFTJOIN`student`ASsONm.`id`=s.`mid`;案例:視圖的使用創建視圖。STEP018.2.1創建視圖mysql>SHOWTABLES;+----------------+|Tables_in_mydb|+----------------+|goods||majors||student||view_student|+----------------+案例:視圖的使用查看創建的視圖。STEP028.2.1創建視圖mysql>SELECT*FROM`view_student`;+----+------+-------+|id|name|major|+----+------+-------+|3|Alen|前端||4|Andy|前端|+----+------+-------+案例:視圖的使用查詢視圖。STEP038.2.2視圖管理
先定一個小目標!掌握視圖的管理,能夠對視圖進行查看、修改和刪除操作8.2.2視圖管理查看視圖使用的語法和查看數據表使用的語法相同。重點學習修改視圖和刪除視圖。查看視圖修改視圖刪除視圖視圖管理語法格式:ALTERVIEW視圖名稱ASSELECT指令;語法格式:DROPVIEW[IFEXISTS]視圖名稱;8.2.2視圖管理mysql>ALTERVIEW`view_student`AS->SELECTs.`name`,m.`name`ASmajorFROM`majors`ASm->LEFTJOIN`student`ASsONm.`id`=s.`mid`;案例:修改和刪除視圖代碼示例修改視圖的數據源。STEP018.2.2視圖管理mysql>SELECT*FROM`view_student`;+------+-------+|name|major|+------+-------+|Alen|前端||Andy|前端|+------+-------+案例:修改和刪除視圖代碼示例查詢視圖。STEP028.2.2視圖管理mysql>DROPVIEW`view_student`;#檢查視圖是否已被刪除mysql>SELECT*FROM`view_student`;Error1146(42S02):Table'mydb.view_student'doesn'texist案例:修改和刪除視圖代碼示例刪除視圖。STEP038.2.3視圖數據操作
先定一個小目標!掌握視圖數據操作,能夠對視圖中的數據進行添加、修改和刪除操作8.2.3視圖數據操作視圖數據操作:對視圖進行添加、修改或刪除等操作,實現對基本表的修改。數據操作的限制:數據操作只對單張基本表的視圖有效,多張基本表的視圖不允許進行數據操作。8.2.3視圖數據操作mysql>CREATEVIEW`view_student`AS->SELECT`id`,`name`,`mid`FROM`student`;案例:對單張表的視圖進行數據操作代碼示例創建視圖。STEP018.2.3視圖數據操作mysql>INSERTINTO`view_student`VALUES(NULL,'Sun',2);mysql>SELECT*FROM`view_student`;+----+------+-----+|id|name|mid|+----+------+-----+|3|Alen|2||4|Andy|2||5|Sun|2|+----+------+-----+案例:對單張表的視圖進行數據操作代碼示例通過視圖添加數據。STEP028.2.3視圖數據操作mysql>UPDATE`view_student`SET`name`='Sun1'WHERE`id`=5;mysql>SELECT*FROM`view_student`;+----+------+-----+|id|name|mid|+----+------+-----+|3|Alen|2||4|Andy|2||5|Sun1|2|+----+------+-----+案例:對單張表的視圖進行數據操作代碼示例通過視圖更新數據。STEP038.2.3視圖數據操作mysql>DELETEFROM`view_student`WHERE`id`=5;mysql>SELECT*FROM`view_student`;+----+------+-----+|id|name|mid|+----+------+-----+|3|Alen|2||4|Andy|2|+----+------+-----+案例:對單張表的視圖進行數據操作代碼示例通過視圖刪除數據。STEP048.3數據備份與還原8.3.1數據備份
先定一個小目標!掌握數據的備份,能夠通過相關命令對數據庫、數據表進行備份8.3.1數據備份MEDIUNINTmysqldump工具:將數據庫導出成SQL腳本,SQL腳本包含表結構和數據信息,執行腳本可以導入備份的數據。8.3.1數據備份MEDIUNINT備份單個數據庫或數據表mysqldump-uusername-ppassworddbname[tbname1[tbname2…]]語法格式username表示用戶名password表示密碼dbname表示需要備份的數據庫名稱tbname表示數據庫中的表名,多個表名使用用空格分隔8.3.1數據備份MEDIUNINT備份多個數據庫mysqldump-uusername-ppassword--databasedbname1[dbname2…]語法格式--database后指定數據庫名稱,如果有多個數據庫使用空格分隔8.3.1數據備份MEDIUNINT備份所有數據庫mysqldump-uusername-ppassword--all-databases語法格式--all-databases表示備份所有的數據庫8.3.1數據備份#①備份mydb數據庫的student表mysqldump-uroot-pmydbstudent>D:/student.sql#②備份單個數據庫mysqldump-uroot-pmydb>D:/mydb.sql#③備份所有數據庫mysqldump-uroot-p--all-databases>D:/mysql.sql案例:備份數據庫代碼示例STEP01備份數據庫和數據表。備份成功后在D盤根目錄下生成student.sql、mydb.sql和mysql.sql3個文件。8.3.1數據備份案例:備份數據庫代碼示例STEP02查看備份結果。打開student.sql查看備份內容。8.3.1數據備份STEP02SQL腳本中包含內容:MySQLdump版本、MySQL服務器版本、主機名、備份的數據庫名稱、SQL語句。以/*!開頭*/結尾的語句是可執行的MySQL注釋,可以被特定版本的MySQL執行,在其他數據庫管理系統中將被作為注釋忽略,提高數據庫的可移植性。8.3.2數據還原
先定一個小目標!掌握數據的還原,能夠通過輸入重定向、source命令這兩種方式進行數據還原8.3.2數據還原提示:若SQL腳本不包含創建和選擇數據庫的語句,在還原數據前,應先創建和選擇數據庫。輸入重定向mysql-uusername-ppassword[dbname]<filename.sql語法格式username表示用戶名password表示密碼dbname表示數據庫名稱filename.sql是SQL腳本文件,文件名前面可以加上路徑8.3.2數據還原案例:利用輸入重定向還原數據代碼示例STEP02#①登錄MySQL,創建mydb2數據庫后退出mysql>CREATEDATABASE`mydb2`;mysql>exit;#②還原數據mysql-uroot-pmydb2<D:/mydb.sql8.3.2數據還原source命令source文件路徑語法格式8.3.2數據還原案例:利用source命令還原數據代碼示例STEP02#①刪除student數據表mysql>DROPtable`student`;#②還原數據mysql>sourceD:/student.sql;#③查看數據是否還原mysql>SELECT*FROM`student`;8.4用戶管理8.4.1賬號管理
先定一個小目標!掌握賬號的管理,能夠利用CREATEUSER語句創建賬號,利用DROPUSER語句刪除賬號8.4.1賬號管理什么是賬號:用戶是數據庫的使用者和管理者,每個用戶都有對應的賬號,MySQL通過設置不同的賬號來控制操作人員的訪問和操作范圍。創建賬號語法格式CREATEUSER[IFNOTEXISTS]賬號名[,賬號名]…多個賬號之間使用逗號分隔,賬號名是由“用戶名@主機地址”組成8.4.1賬號管理#①創建test1賬號mysql>CREATEUSER'test1'IDENTIFIEDBY'123456';#②創建test2賬號mysql>CREATEUSER'test2@127.0.0.1'IDENTIFIEDBY'123456';案例:創建賬號代碼示例test1賬號:IDENTIFIEDBY后指定字符串形式的明文密碼test2賬號:指定登錄服務器的IP地址,限定只有指定的服務器可以進行登錄8.4.1賬號管理案例:查看創建的賬號代碼示例mysql>SELECT`host`,`user`FROM`mysql.user`;+-----------+-----------------+|host|user|+-----------+-----------------+|%|test1||%|test2@127.0.0.1||localhost|mysql.session||localhost|mysql.sys||localhost|root|+-----------+-----------------+8.4.1賬號管理刪除賬號:某個賬號不需要再對數據庫進行管理時,就將該賬號刪除。語法格式DROPUSER[IFEXISTS]賬戶名[,賬戶名…];8.4.1賬號管理案例:刪除賬號代碼示例mysql>DROPUSERIFEXISTS'test2@127.0.0.1';注意:通過已刪除的賬號創建的數據庫信息不會因此刪除操作而失效。8.4.2權限管理
先定一個小目標!掌握權限的管理,能夠利用GRANT語句授予用戶權限,利用REVOKE語句回收用戶權限8.4.2權限管理GRANT語句:用于實現賬號權限的設置。語法格式GRANT權限列表ON[目標類型]權限級別TO賬號權限列表:指要賦予的權限,常見的有數據權限、結構權限和管理權限。目標類型:默認為TABLE,表示將全局、數據庫、表或列中的某些權限授予給指定的用戶。權限級別:用于定義全局權限、數據庫權限和表權限。8.4.2權限管理不同權限級別對應的語法:權限級別實現語法全局權限GRANT權限列表ON*.*TO賬戶名[WITHGRANTOPTION];數據庫級權限GRANT權限列表ON數據庫名.*TO賬戶名[WITHGRANTOPTION];表級權限GRANT權限列表ON數據庫名.表名TO賬戶名[WITHGRANTOPTION];列級權限GRANT權限類型(字段列表)[,…]ON數據庫名.表名TO賬戶名[WITHGRANTOPTION];8.4.2權限管理mysql>GRANTALLPRIVILEGESON`mydb2`.*TO'test1'@'%';QueryOK,0rowsaffected(0.00sec)案例:給用戶授權代碼示例8.4.2權限管理mysql>SELECTuser,db,select_priv,insert_priv,update_priv,delete_priv->FROMmysql.dbWHEREuser='test1';+-------+-------+-------------+-------------+-------------+-------------+|user|db|select_priv|insert_priv|update_priv|delete_priv|+-------+-------+-------------+-------------+-------------+-------------+|test1|mydb2|Y|Y|Y|Y|+-------+-------+-------------+-------------+-------------+-------------+1rowinset(0.00sec)案例:查看授權結果代碼示例8.4.2權限管理收回用戶權限:為了保證數據庫安全,需要將用戶不需要的權限回收。語法格式REVOKE權限類型[(字段列表)][,權限類型[(字段列表)]]…ON[目標類型]權限級別FROM賬戶名[,賬戶名]…8.4.2權限管理mysql>REVOKEallONmydb2.*FROM'test1'@'%';QueryOK,0rowsaffected(0.00sec)案例:收回權限代碼示例8.5索引8.5.1索引的類型
先定一個小目標!熟悉索引的類型,能夠說出MySQL中常用的5種類型索引的作用8.5.1索引的類型什么是索引:索引是一種特殊的數據結構,利用MySQL提供的語法將數據表中的某個字段或某些字段與記錄的位置建立對應關系,并按照一定的順序排列好,類似于書籍中的目錄,目的就是為了快速定位指定數據的位置。8.5.1索引的類型根據索引實現語法的不同,索引分類:普通索引唯一性索引主鍵索引全文索引空間索引基本索引類型,使用KEY或INDEX定義,不需要添加任何限制條件,作用是加快對數據的訪問速度。使用UNIQUEINDEX定義,創建唯一性索引的字段需要添加唯一性約束,用于防止用戶添加重復的值。使用PRIMARYKEY定義,是特殊的唯一性索引,根據主鍵自身的唯一性標識每條記錄,防止字段值重復或為NULL。使用FULLTEXTINDEX定義,提高數據量較大的字段查詢速度,定義時字段類型必須是CHAR、VARCHAR或TEXT。使用SPATIALINDEX定義在空間數據類型字段上的索引,提高系統獲取空間數據的效率。8.5.1索引的類型根據創建索引的字段個數,索引分類:單列索引指在表中單個字段上創建的索引,可以是普通索引、唯一索引、主鍵索引或者全文索引,只要保證該索引對應表中一個字段即可。復合索引指在表的多個字段上創建一個索引,且只有在查詢條件中使用了這些字段中的第一個字段時,該索引才會被使用。8.5.1索引的類型前綴索引:創建的索引從左開始截取數據表中字段值的一部分內容,前綴索引可以節約索引空間,提高索引的效率,類似在漢語詞典中根據偏旁部首(類似前綴索引)查找漢字(要索引的數據)。8.5.2索引的使用
先定一個小目標!掌握索引的使用,能夠為數據表添加合適的索引8.5.2索引的使用mysql>ALTERTABLE`student`ADDINDEXname_index(`name`);QueryOK,0rowsaffected(0.00sec)Records:0Duplicates:0Warnings:0案例:創建普通索引代碼示例INDEX表示創建的索引為普通索引name_index表示為索引定義的名稱name表示在數據表student的name字段上創建索引8.5.2索引的使用#查看創建的索引mysql>SHOWCREATETABLE`student`\G******************************1.row************************************Table:studentCreateTable:CREATETABLE`student`(……此處省略字段的創建信息
PRIMARYKEY(`id`),
KEY`name_index`(`name`))ENGINE=InnoDBAUTO_INCREMENT=8DEFAULTCHARSET=utf8案例:創建普通索引代碼示例8.6分區8.6.1什么是分區
先定一個小目標!熟悉什么是分區,能夠說出分區技術的作用8.6.1什么是分區分區技術:操作數據表時根據給定的算法,將數據在邏輯上分到多個區域中存儲,在分區中還可以設置子分區,將數據存放到更加具體的區域內。8.6.1什么是分區分區技術:將一張數據表中的數據存儲在不同物理磁盤中,比單個磁盤存儲更多的數據,如果WHERE子句的條件命中一個分區,掃描相關的一個分區而不用全表掃描,提高查詢效率。提示:如果查詢id為3~5的數據,掃描磁盤1即可。8.6.1什么是分區分區技術對存儲引擎以及鎖的要求:分區技術不適用于MERGE、CSV或FEDERATED存儲引擎。InnoDB分區表不能設置外鍵,同樣地,與外鍵相關的主表和從表也不能被分區。MySQL5.7中InnoDB表不支持子分區在多個磁盤中存儲,目前僅MyISAM存儲引擎支持。同一個分區表的所有分區必須使用相同存儲引擎。當建表時未指定存儲引擎,在創建分區時就必須設置存儲引擎。MySQL5.6及更早的版本中,對分區的MyISAM表進行操作時會鎖定所有的分區,直到操作完成后才會釋放鎖。而在MySQL5.7中,僅會鎖定與操作相關的分區,不會影響其他分區。8.6.2創建分區
先定一個小目標!掌握分區的創建,能夠對數據表中的記錄進行分區保存8.6.2創建分區mysql>CREATETABLE`mydb`.`p_list`(->`id`INTAUTO_INCREMENTCOMMENT'ID編號',->`name`VARCHAR(50)COMMENT'姓名',->`dpt`INTCOMMENT'部門編號',->KEY(`id`)->)ENGINE=INNODB->PARTITIONBYLIST(`dpt`)(->PARTITIONp1VALUESIN(1,3),->PARTITIONp2VALUESIN(2,4)
->);案例:創建分區代碼示例將dpt字段進行分區:值為1或3時,將記錄放在p1分區值為2或4時,將記錄放在p2分區8.6.2創建分區#在MySQL的data/mydb目錄下查看分區數據文件p_list#p#p1.ibdp_list#p#p2.ibd案例:創建分區代碼示例p_list是建立分區的數據表名,p1和p2表示分區名稱。8.7存儲過程8.7.1初識存儲過程
先定一個小目標!熟悉存儲過程,能夠說出存儲過程的作用,能說出存儲過程與函數的區別8.7.1初識存儲過程存儲過程:一種在數據庫中存儲復雜程序,以便外部程序調用的一種數據庫對象,它是在大型數據庫系統中用于完成特定功能的一組SQL語句集,在第一次使用時經過編譯后,再次調用就不需要重復編譯,執行效率比較高。8.7.1初識存儲過程存儲過程與函數的相同點:目的都是為了可重復地執行數據庫SQL語句的集合,經過一次編譯后,后面再次需要時直接執行即可。存儲過程與函數的不同點:語法中實現的標識符不同,存儲過程使用PROCEDURE,函數為FUNCTION。存儲過程在創建時沒有返回值,而函數在定義時必須設置返回值。存儲過程沒有返回值類型,且不能將結果直接賦值給變量;而函數定義時需要設置返回值類型,且在調用時必須將返回值賦給變量。存儲過程必須通過CALL進行調用,不能使用SELECT調用;而函數則可在SELECT語句中直接使用。8.7.2存儲過程的使用
先定一個小目標!掌握存儲過程的使用,能夠創建存儲過程進行數據的查詢操作8.7.2存儲過程的使用mysql>DELIMITER$$#將語句的結束符號從分號;臨時改為兩個$$(可以是自定義)mysql>CREATEPROCEDUREproc(INgidINT)->BEGIN->SELECT`id`,`name`FROM`my_goods`where`id`>`gid`;->END->$$Query0K,0rowsaffected(0.00sec)mysql>DELIMITER;
#將語句的結束符號恢復為分號案例:創建存儲過程代碼示例gid表示調用存儲過程時傳入的參數8.7.2存儲過程的使用mysql>CALLproc(9);+----+--------+|id|name|+----+--------+|10|薄毛衣|+----+--------+1rowinset(0.00sec)QueryOK,0rowsaffected(0.03sec)案例:調用存儲過程代碼示例表示執行存儲過程體內的SQL語句的描述信息表示調用存儲過程的結果描述信息。8.8觸發器8.8.1什么是觸發器
先定一個小目標!熟悉什么是觸發器,能夠說出觸發器的作用,能夠說出觸發器的優點與缺點8.8.1什么是觸發器觸發器:可以看作是一種特殊類型的存儲過程,它與存儲過程的區別在于存儲過程使用時需要調用,而觸發器是在預先定義好的事件(如INSERT、DELETE等操作)發生時,才會被MySQL自動調用。觸發器的優點:觸發器可以通過數據庫中的相關表實現級聯無痕更改操作。保證數據安全,進行安全校驗。觸發器的缺點:觸發器的使用會影響數據庫的結構,同時增加了維護的復雜程度。觸發器的無痕操作會造成數據在程序(如PHP、Java等)層面不可控。8.8.2觸發器的使用
先定一個小目標!掌握觸發器的使用,能夠為數據表設置觸發器,使其在特定的時機觸發8.8.2觸發器的使用CREATETABLE`my_shopcart`(`id`INTUNSIGNEDPRIMARYKEYAUTO_INCREMENTCOMMENT'購物車id',`user_id`INTUNSIGNEDNOTNULLDEFAULT0COMMENT'用戶id',`goods_id`INTUNSIGNEDNOTNULLDEFAULT0COMMENT'商品id',`goods_price`DECIMAL(10,2)UNSIGNEDNOTNULLDEFAULT0COMMENT'單價',`goods_num`INTUNSIGNEDNOTNULLDEFAULT0COMMENT'購買件數',`is_select`TINYINTUNSIGNEDNOTNULLDEFAULT0COMMENT'是否選中',`create_time`DATETIMENOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'創建時間',`update_time`DATETIMEDEFAULTNULLCOMMENT'更新時間')ENGINE=InnoDBDEFAULTCHARSET=utf8;案例:觸發器的使用代碼示例STEP01創建my_shopcart購物車表。以my_goods和my_shopcart為例,演示添加商品到購物車后自動減少商品庫存。8.8.2觸發器的使用mysql>DELIMITER$$mysql>CR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共衛生執業醫師在多領域學習的必要性試題及答案
- 文化產業管理證書考試復習方法試題及答案
- 心理咨詢師考試社會支持應用的試題及答案
- 廉潔購銷合同協議
- 衛生管理全球協作考題及答案
- 2024年衛生管理社會健康考題及答案
- 國貿地產面試題及答案
- 2025年公共衛生考試的模擬測試策略試題及答案
- 2024年衛生管理學習路線圖試題及答案
- 安裝拆除地板合同協議
- 《第3單元 角的度量:角的度量》課件
- 血栓性血小板減少性紫癜的護理
- CHT 8024-2011 機載激光雷達數據獲取技術規范(正式版)
- 浙江省寧波市鄞州區2023 學年第二學期八年級科學期中考試試卷
- MOOC 跨文化交際入門-華中師范大學 中國大學慕課答案
- 1000kV電容式電壓互感器設備檢修導則(修訂版)編制說明
- 中華民族共同體概論課件專家版2第二講 樹立正確的中華民族歷史觀
- 2024年中職農林牧漁類《農業經營與管理》職教高考復習題庫(濃縮600題)
- 針灸優勢病種
- 地方電網公司變電站(土建)電力考試及答案
- 金屬腐蝕與防護課件-防護方法
評論
0/150
提交評論