《PHP+MySQL动态网站开发》 课件-第8章 MySQL进阶_第1页
《PHP+MySQL动态网站开发》 课件-第8章 MySQL进阶_第2页
《PHP+MySQL动态网站开发》 课件-第8章 MySQL进阶_第3页
《PHP+MySQL动态网站开发》 课件-第8章 MySQL进阶_第4页
《PHP+MySQL动态网站开发》 课件-第8章 MySQL进阶_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论