当前位置: 首页 > news >正文

桂平逗乐游戏招聘网站开发网站设计推荐

桂平逗乐游戏招聘网站开发,网站设计推荐,中学网站建设方案,wordpress 主题 星球MySQL支持把几种对象存放在服务器端供以后使用。这几种对象有一些可以根据情况通过程序代码调用#xff0c;有一些会在数据表被修改时自动执行#xff0c;还有一些可以在预定时刻自动执行。它们包括以下几种: 1.存储函数(stored function)。返回一个计算结果#xff0c;该结…MySQL支持把几种对象存放在服务器端供以后使用。这几种对象有一些可以根据情况通过程序代码调用有一些会在数据表被修改时自动执行还有一些可以在预定时刻自动执行。它们包括以下几种: 1.存储函数(stored function)。返回一个计算结果该结果可以用在表达式里。 2.存储过程(stored procedure)。不直接返回一个结果但可以用来完成一般的运算或是生成一个结果集并传递回客户。 3.触发器(trigger)。与数据表相关联当那个数据表被工NSERT、DELETE或UPDATE语句修改时触发器将自动执行。 4.事件(event)。根据时间表在预定时刻自动执行。 MySQL对存储函数和存储过程的支持始于5.0.0版本对触发器和事件的支持分别始于5.0.2版本和5.1.6版本。存储程序有以下优点和能力 1.存储程序对象的可执行部分可以用复合语句来编写复合语句对SQL语法进行了扩展可以包括代码块、循环和条件语句。 2.存储程序都被保存在服务器端定义它们所需要的代码只需在它们被创建时通过网络传递一次而不是每次执行都要传递一次。这大大减少了开销。 3.它们可以把复杂的计算封装为程序单元而你可以简单地通过程序单元的名字来调用它们。你甚至可以把一组存储程序打包为一个“函数库”供其他应用程序调用。 4.它们提供了一种错误处理机制。 5.它们可以提高数据库的安全性。你可以通过选择存储程序执行时所需的权限下来对敏感数据的访问情况进行限制和调控。 存储程序。泛指各种类型的存储对象(存储函数、存储过程、触发器、事件)。存储例程(stored routine )特指存储函数和存储过程。这两种对象的定义语法很相似所以很自然地把它们放在一起讨论。在开始讨论各种类型的存储程序之前我们首先学习一下复合语句。 1.复合语句和语句分隔符 简单的存储程序只包含一条SQL语句在编写时不需要特殊对待。下面的存储过程使用了一条SELECT语句来列出sampdb数据库里的数据表的名字: PROCEDURE sampdb_tables() SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA’sampdb’ ORDER BY TABLE_NAME; 不过存储程序并非只能包含一条简单的SQL语句。它们可以包含多条SQL语句可以使用局部变量、条件语句、循环和嵌套语句块等多种语法构造。要使用这些构造编写存储程序就需要用到复合语句。复合语句由BEGIN开头END结束在它们之间可以写出任意数量的语句这些语句构成了一个语句块。下面的存储过程将显示一条欢迎消息其中有你的用户名;如果你是一位匿名用户用户名将是“earthing CREATE PROCEDURE greetings() BEGIN#7716 for username60 for hostname1 for DECLARE user CHAR(77) CHARACTER SET utf8;SET user (SELECT CURRENT USER());IF INSTR(user,’’)0 THEN#返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0否则返回位置从1开始SET userSUBSTRING_INDEX(user, , 1);END IF;IF user THENSET userearthling;END IF;SELECT CONCAT(Greetings,user, !) AS greeting; END; 在使用复合语句时必须考虑和解决这样一个问题复合语句块里的语句必须以分号(;)彼此隔开但因为分号同时也是mysql程序默认使用的语句分隔符所以在使用mysql程序定义存储程序时会发生冲突。 解决这个问题的办法是使用delimiter命令把mysql程序的语句分隔符重定义为另一个字符或字符串它必须是在存储例程的定义里没有出现过的。这样一来mysql程序就不会把分号解释为语句终止符了它将把整个对象定义作为一条语句传递给服务器。在定义完存储程序之后可以把mysql程序的语句终止符重新定义为分号。 use weibo; delimiter $ CREATE PROCEDURE show_times() BEGINSELECT Local time is:, CURRENT_TIMESTAMP;SELECT UTC time is:, UTC_TIMESTAMP; END$ delimiter ;-- delimiter后空格加分号将分号设置为分隔符 CALL show_times(); 定义一个存储过程时把mysql程序的默认分隔符临时改变为$然后在恢复了mysql程序的默认分隔符之后执行了那个存储过程:   分隔符不必非得是$字符也不必非得是单个的字符: delimiter EOF 这里的原则是:只要在某个存储程序内部的语句里会用到分号就应该在定义这个存储程序时临时改变mysql程序的分隔符。 2.存储函数和存储过程 存储函数将向调用者返回一个计算结果这个结果可以用在表达式里(就像COS()或HEX()这样的内建函数那样)。存储过程需要使用CALL语句来调用是一个独立的操作不能用在表达式里。使用存储过程的情况主要有两种:(1)只需通过运算来实现某种效果或动作而无需返回一个值(2)运算会返回多个结果集(函数做不到这一点)。这只是些指导性建议不是硬性规定。 比如说如果你需要返回两个或更多的值就不能使用函数。但你可以使用一个过程因为过程支持的参数类型允许它们的值在过程执行期间被设置而调用者可以在过程返回后去访问那些值。 存储函数要用CREATE FUNCTION语句来创建存储过程要用CREATE PROCEDURE语句来创建。下面的例子将创建一个函数该函数有一个代表着年份的整数参数。(为了与数据表或数据列的名字有所区别参数命名时将使用p_前缀)。 delimiter $ CREATE FUNCTION count_born_in_year(p_year INT) RETURNS INT READS SQL DATA BEGINRETURN (SELECT COUNT(*) FROM president WHERE YEAR(birtb) p_year); END$ delimiter ; 这个函数有一条用来表明其返回值数据类型的RETURNS子句和一个用来计算那个值的函数体。函数体至少需要包含一条RETURN语句用来向调用者返回一个值。把计算定义为函数的好处是可以方便地执行它而无须每次都写出所有的逻辑你可以像使用内建函数那样来调用存储函数: SELECT count_born_in_year(1990); 你无法让一个给定的函数返回多个值。你可以编写任意多个函数然后在同一条语句里调用它们全体。另一个办法是使用一个存储过程并通过它的OUT参数“返回”多个值。存储过程负责计算那些值并把它们赋值给相应的参数而那些参数可以在过程返回后由调用者访问。如果你定义了一个与某个MySQL内建函数同名的存储函数在调用它时就必须用数据库的名字对该函数的名字进行限定以避免歧义。 存储过程和存储函数很相似但它不返回值。因此它没有RETURNS子句或任何RETURN语句。下面这个简单的存储过程和count_born_in_year()函数很相似它将显示一个结果集而不是把计算结果作为其返回值。 delimiter $ CREATE PROCEDURE show_born_in_year(p_year INT) BEGINSELECT first_name, last_name, birth, deathFROM presidentWHERE YEAR(birth)P_year; END$ delimiter ; 与存储函数不同存储过程不能用在表达式里它们只能通过CALL语句来调用。如下所示: CALL show_born_in_year(1990); 前面的例子都是选取信息但存储例程还可以用来修改数据表如下例所示: delimiter $ CREATE PROCEDURE update_expiration (p_id INT UNSIGNED, p_date DATE) BEGINUPDATE member SET expirationp_date WHERE member_idp_id; END$ delimiter ; 存储函数必须遵守这样一条限制:不允许对调用本函数的语句正在读或写的数据表进行修改。存储过程通常没有这个限制但如果它们是从存储函数里被调用就需要遵守这条限制。 3.存储函数和存储过程的权限 存储函数和存储过程属于数据库。要想创建存储函数或存储过程必须拥有那个数据库的CREATE ROUTINE权限。在默认的情况下当你创建一个存储例程时服务器将自动地把EXECUTE和ALTER ROUTINE权限授予你(如果你还没有获得这些权限)这样你才可以执行那个例程或删除它。当你删除那个例程时服务器将自动撤销那些权限。如果你不想使用这种自动化的权限授予/撤销机制把automatic_sp_privileges系统变量设置为0即可。 如果服务器启用了二进制日志功能存储函数还需要遵守一些额外的限制条件(不允许创建不确定或是会修改数据的存储函数)以保证二进制日志能够安全地完成备份和复制操作。这些限制条件如下 1.如果log_bin_trust_function_creators系统变量没有被激活你就必须具备SUPER权限才能创建存储函数。在此前提下你创建的每一个函数都必须是确定的并且不得修改数据。为了表明这一点需要使用DETERMINISTIC、NO SQL或READS SQL DATA之一来定义存储函数。 2.如果log bin_trust_function_creators系统变量已被激活则没有任何限制。只有当你可以相信MySQL服务器上的所有用户都不会去定义不安全的存储函数时这种设置才是最适当的。 与log_bin_trust_function_creators系统变量有关的限制条件同样适用于触发器的创建工作。 4.存储过程的参数类型 存储过程的参数分为3种类型。对于IN参数调用者把一个值传递给过程过程可以对这个值进行修改但任何修改在过程返回后对调用者是不可见的。OUT参数刚好相反过程把一个值赋值给OUT参数这个值在过程返回后可以由调用者访问。INOUT参数允许调用者向过程传递一个值然后再取回一个值。 要想明确地为参数指定类型在参数表里把IN, OUT或INOUT写在参数名字前面即可。如果没有为参数指定类型其默认类型将是IN。 在使用OUT或INOUT参数时在调用过程时需要给出一个变量名。过程可以设置参数的值相应的变量将在过程返回时获得那个值。如果想让某个存储过程返回多个结果值OUT和INOUT参数类型将非常有用(存储函数只能返回一个值不能胜任)。下面的过程演示了OUT参数的用法。它将分别统计出student数据表里的男生和女生人数并通过它的参数返回这两个计数值让调用者可以访问它们: delimiter $ CREATE PROCEDURE count_students_by_sex(OUT p_male INT, OUT p_female INT) BEGINSELECT COUNT(*) FROM student WHERE sex F INTO p_female;SELECT COUNT(*) FROM student WHERE sex F INTO p_female; END$ delimiter ; 在调用这个过程时请把各个参数替换为相应的用户定义变量。这个过程将把计数值放到这些参数里在它返回之后那些变量将包含计数值: CALL count_students_by_sex(mcoant, fcount); SELECT Number of male students:mcount; IN、OUT和INOUT关键字不适用于存储函数、触发器或事件。对于存储函数所有的参数都像IN参数。触发器和事件则根本没有任何参数。下一部分介绍触发器和事件。转载于:https://www.cnblogs.com/houkai/p/3523563.html
http://www.zqtcl.cn/news/417994/

相关文章:

  • 室内设计网站官网大全电子商务网站后台核心管理
  • 网站建设报价图片欣赏福州网站建设报价
  • 网站推广基本方法是文创产品设计稿
  • 厦门网站制作公司推荐作文网投稿网站
  • 网站开发过什么软件杭州cms建站模板下载
  • 做中东服装有什么网站谁能给我个网址
  • 深圳网站建设公司服务平台河北省建设银行网站首页
  • 新密网站网页版微信小程序在哪
  • 长春建一个网站大概要多少钱微信公众号开店流程
  • 网站运营实例django 微信小程序开发教程
  • wordpress 搭网站郑州网站建设华久
  • 网站建设图片尺寸专门做音乐的网站
  • 株洲做网站外贸推广产品
  • 枫叶的网站建设博客企业网站样板制作
  • 织梦网站文章相互调用百度下载老版本
  • pc网站的优势网站建设款属不属于无形资产
  • 网站建设数据安全分析网络全案推广
  • 网站建设哪家好就推 鹏博资讯手机自助建网站
  • 沈阳网站制作招聘网长治网站建设电话
  • 承德网站设计公司余姚做百度网站
  • 阿里云购买网站空间做网站怎么插音乐循环
  • 网站设计时应考虑哪些因素惠州做网站
  • 西安网站搭建的公司网站建设条例
  • 网站建设联系网站改备案信息吗
  • 建设一个看电影的网站唐山网址建站
  • 呼和浩特网站建设价格vs网站开发入门
  • 中国农业工程建设协会网站有专业做线切割配件的网站吗
  • 东莞建网站公司哪个好陕西手机网站建设公司
  • 网站系统里不能打印西安哪有学做淘宝网站
  • 哈尔滨建站模板大全天猫购买