1、网络数据库技术MySQL基础MySQL基本情况 The worlds most popular open source database.瑞典MySQL AB公司(2000年,正式进入开源世界)SUN公司 Oracle公司 LAMP(Linux+Apache+MySQL+PHP)流行的网站构架方式MySQL支持的操作系统 MySQL可运行于20多种操作系统 Linux Windows Mac OS,Solaris,HP-UX,IBM AIX等。MySQL版本 MySQL Community Edition(MySQL社区版):商业用途的MySQL:MySQL Standard Edition(
2、标准版)MySQL Enterprise Edition(企业版)MySQL Cluster Carrier Grade Edition(集群版)MySQL相关产品 MySQL Workbench Oracle为MySQL服务器和数据库提供的图形工具 MySQL Installer for Windows MySQL相关产品的安装包 第三方图形工具 如Navicat for MySQLMySQL Server服务启动 控制面板管理工具服务MySQL57 任务管理器MySQL57MySQL 命令行客户端运行 开始菜单快捷方式 命令窗口 运行cmd命令 所有程序附件命令提示符MySQL基本命令 1
3、连接及断开MySQL服务器 1.1 连接MySQL服务器例:在MySQL服务器所在机上,以root身份登录。1.2 断开MySQL服务器连接2简单查询2简单查询MySQL命令说明:命令通常以分号结束。(个别例外如QUIT)当用户发出一个命令时,mysql将其发送到服务器执行并显示结果,之后,在屏幕上显示另一个mysql提示符表示已准备接受另外的命令。mysql 以表格形式显示查询结果。表格首行显示列的名字,其余行显示查询结果。mysql 显示了命令执行的结果以及命令执行的时间 命令关键词不分大小写。MySQL命令说明:命令可以写在一行上,也可以输入在一行上输入多条命令,每条命令以;结束。MyS
4、QL命令说明:允许一条命令写在几行上,直到以;结束。MySQL命令说明:若想中断命令执行,则键入c:各种系统提示符的含义MySQL Workbench使用 开始菜单快捷方式网络数据库技术网络数据库技术MySQL数据数据类型类型学习目标 掌握MySQL常见数据类型 能够为业务选择合适数据类型QQ个人资料MySQL常用数据类型 数值类型 日期时间类型 字符串类型数值类型整数整数类型字节取值范围最小值最大值TINYINT1signed-128127unsigned0255SMALLINT2signed-3276832767unsigned065535MEDIUMINT3signed-83886088
5、388607unsigned01677215INT/INTEGER4signed-21474836482147483747unsigned04294967295BIGINT5signed-9223372036854775808-9223372036854775808unsigned018446744073709551615INT(5)和 INT(11)取值范围不同?存储方式不同?INT 和 BIGINT BIGINT存储空间更大,INT和BIGINT之间通常选择BIGINT整数类型的属性 zerofill unsigned 若为zerofill,则自动为unsigned auto_increm
6、ent 一个表最多只能有一列auto_increment auto_increment列应定义为not null auto_increment列应定义为primay key或unique数值类型小数 浮点数 float double 定点数 decimal 更精确数值类型小数浮点数类型字节取值范围最小值最大值FLOAT41.175494351E-383.402823466E+38DOUBLE82.22507385850720014E-3081.7976931348623157E+308定点数类型字节取值范围最小值最大值DEC(M,D)DECIMAL(M,D)M+2由M和D决定,最大取值范围与D
7、OUBLE相同对比 FLOAT 与 DOUBLE 与 DECIMAL FLOAT(5,2)与 DOUBLE(5,2)与 DECIMAL(5,2)n浮点数不写精度和标度,则会按实际位数显示n浮点数如果有精度和标度,则规定了其表示范围,自动将四舍五入结果插入n定点数不写精度和标度,则会按默认值DECIMAL(10,0)n定点数若数据超越了精度和标度值,则会警告注意 浮点数存在误差问题 对货币等对精度敏感的数据,应该用定点数表示或存储 尽量避免做浮点数的比较 浮点数中一些特殊值的处理日期时间型日期和时间型字节取值范围最小值最大值DATE31000-01-019999-12-31DATETIME810
8、00-01-01 00:00:009999-12-31 23:59:59TIMESTAMP4197001010800012038年某个时刻TIME3838:59:59838:59:59YEAR119012155日期和时间类型 各类型都有一个有效范围,超出则进行错误提示,并以零值进行存储 DATE,TIME 和 DATETIME最常使用TIMESTAMP 与 DATETIME TIMESTAMP的1970-2038,DATETIME的范围为1000-9999 TIMESTAMP还可以自动根据OS时区设置自动转换为对应值TIMESTAMP类型 若一个表有一列类型为TIMESTAMP,则系统自动创建
9、其默认值为CURRENT_TIMESTAMP 若一个表有多列类型为TIMESTAMP,则系统会不会都自动创建他们的默认值为CURRENT_TIMESTAMP呢?说明 日期和时间类型可以采用多种格式说明 在具体业务中,要根据实际需要选择能够满足应用的最小存储的日期类型字符串型 CHAR 与 VARCHAR TEXT BLOB 与 BINARY ENUM字符串型CHAR 与 VARCHAR字符串型字节描述及存储需求CHAR(M)固定M为0255之间的整数VARCHAR(M)可变M255 (MySQL5.7为 21844)n存储文本信息nCHAR(M),VARCHAR(M),M指的是字符数n其所占用
10、的存储空间字节数,根据采用编码的不同可能不同字符串型CHAR 与 VARCHAR值CHAR(4)存储需求VARCHAR(4)存储需求 4个字节1个字节abab 4个字节ab3个字节abcdabcd4个字节abcd5个字节abcdefabcd4个字节abcd5个字节n英文字符p在各种编码方式上,英文字符都占用一个字节not using strict mode字符与字节的区别编码 字符串大学universityGBK(双字节)VARCHAR(2)VARCHAR(10)UTF8(三字节)VARCHAR(2)VARCHAR(10)UTF8MB4(三或四字节)VARCHAR(2)VARCHAR(10)编
11、码 字符串大学universityGBK(双字节)VARCHAR(2)4+1字节VARCHAR(10)11字节UTF8(三字节)VARCHAR(2)6+1字节VARCHAR(10)11字节UTF8MB4(三或四字节)VARCHAR(2)6+1字节VARCHAR(10)11字节n不同编码方式,一个中文字符占用的存储字节数不同n在各种编码方式上,一个英文字符都占用一个字节nUTF8MB4可存储表情字符串尾部的空格 在数据检索时,CHAR类型数据删除了尾部的空格,而VARCHAR类型数据则保留这些空格 在进行数据比较时,CHAR,VARCHAR 和 TEXT 值都不计尾部的空格 LIKE 除外说明
12、char为固定长度类型,容易造成空间的浪费(分配的空间是固定,不足以空格补齐).varchar为可变长度类型,可以超过255个字符,较为节省空间.存储字符串推荐使用varchar(M),M尽量小;如果是uuid,gender等定长内容可以用char.当存储字符再多时,可使用TEXT字符串型TEXT字符串型字节描述及存储需求TEXT允许长度为065535字节,值的长度+2个字节n存储大文本信息nTEXT存储单位为字节,总大小为65535字节,约为64KB;n在DB内部大多存储格式为溢出页,效率不及char字符串型BLOB,BINARY 可存储二进制字符串 可存储图像,音频等。但是不推荐!性能低下
13、(存储方式类似TEXT的溢出页)强调 CHAR(M),VARCHAR(M),M指的是字符数 存储字符串推荐使用VARCHAR(M),M尽量小;虽然BLOB和BINARY可存储二进制数据,但性能低下,不建议用数据库存储文件视频音频等二进制数据字符串型ENUM枚举类型字节描述及存储需求ENUM121255个成员25665535字节,nENUM类型只能从值集合中取单个值,不能取多个n忽略大小写字符串型ENUM小结 数值类型 整数TINYINT,INT,BIGINT 小数FLOAT,DOUBLE,DECIMAL 日期时间类型 DATE,TIME,DATETIME 字符串类型 CHAR(M),VARCH
14、AR(M),TEXT,ENUMQQ个人资料每一项都应是什么数据类型呢?网络数据库技术网络数据库技术MySQL数据数据对象对象学习目标 掌握几种常见MySQL的数据对象的概念 学会定义具体的数据对象MySQL常见数据对象 Database/Schema Table Index Constraint View/Trigger/Function/ProcedureMySQL各数据对象的关系模式 (数据库)表列索引外键触发器视图存储过程函数模式/数据库 Schema和Database同义 是存储数据对象的容器创建数据库例:创建sakila数据库p 其中的/*!40100.*/这部分注释会被MySQL执
15、行,表示服务端版本号大于4.1.00时会被执行。例:创建ldb数据库p 数据库默认的字符集是utf8修改数据库删除数据库表 Table 是最基本的数据对象,是存放数据的实体创建表例:sakila.filmAUTO_INCREMENT列的初始值设为1001例:sakila.customer例:订单表修改表删除表MySQL各数据对象的关系模式 (数据库)表列索引外键触发器视图存储过程函数索引 类似一本书的目录 索引是数据库中数据的目录 索引和数据是两个对象,索引需要占用实际磁盘空间(与view不同)索引主要用来提高数据的查询效率 数据库中数据变更同样需要同步索引数据的变更 在mysql中,inde
16、x和key是同一个概念,都是指索引.创建索引创建索引(1)(1)创建索引创建索引(2)(2)删除索引约束 生活中的约束 每个的指纹信息唯一 每个人的身份证号唯一 网上购物要先登录才能下订单MySQL中的约束 唯一约束 外键约束唯一约束 对一张表的某个字段或某几个字段设置唯一约束,保证在这个表里对应的数据必须唯一 用户ID,手机号,身份证号 街道号和门牌号的组合创建唯一约束 唯一约束是一种特殊的索引 唯一约束可以建立在一列上,也可建立在多列上 唯一约束可以在create table时定义,也可以alter table增加,但存在重复数据时该操作将报错 主键也是一种唯一约束 表order1中有 多
17、少索引 多少唯一约束添加唯一约束 添加主键 添加唯一索引删除唯一约束外键约束 外键是指两张表的数据通过某种条件关联起来创建外键约束 用户表和订单表删除外键约束使用外键注意事项 必须都是InnoDB表,MyISAM和其他引擎都不支持 互相约束的字段类型必须一样 INT和BIGINT,UNSIGNED和SIGNED都认为是类型不同 TABLE的CHARSET也必须一致.主表的约束字段必须要有索引 子表+references+主表 约束名称必须是当前DATABASE唯一视图(VIEW)业务需求 其它部门的同事要查询我们数据库里的数据,但是我们并不想暴露表结构,并且只提供给他们部分数据 View的作用
18、 视图将一组语句构成的结果集,是一种虚拟结构,并不是实际数据 视图能简化数据库的访问,能将多个查询语句结构化成一个虚拟结构 视图可以隐藏数据库后端表结构,提高数据库的安全性 视图可以作为权限管理,只对用户提供部分数据创建已完成订单的视图删除视图触发器(TRIGGER)业务需求 随着客户个人等级的提升,系统需要自动更新用户的积分,其中一共有两张表 用户信息表(存等级信息)积分信息表(存积分信息)Trigger 指可以在数据写入表A之前或之后做一些其他的动作 使用Trigger在每次更新用户表的时候触发更新积分表还有 存储函数(Function)存储过程(Procedure)小结 Database
19、/Schema Table Index Constraint View/Trigger/Function/Procedure网络数据库技术网络数据库技术MySQL权限管理权限管理学习目标 掌握MySQL授权操作 了解MySQL权限验证流程登录网站需要什么信息连接MySQL的必要条件 网络要畅通 用户名/密码要正确 数据库IP白名单 更细颗粒度的验证(库,表,列权限类型等)MySQL权限管理的步骤用户管理权限管理p合法的用户才能连接到MySQL服务器p用户名p密码p登录IPp进一步操作数据库对象的权限p包括库,表,列权限类型 用户管理 新建一个用户(MySQL命令)n用户nuserhostn密码
20、host 允许登录的主机名 可以是主机名或IP 特殊主机名 localhost:本地主机%:任何主机%:域的所有主机 只有user无host,代表%更改用户名 RENAME USER更改用户密码(1)SET PASSWORD set password for userhost=password(newpassword);若是更改当前用户的密码 set password=password(newpassword);SET PASSWORD 更改用户密码(2)ALTER USERn用户nuserhostn新密码删除用户 DROP USERuser表进行用户管理 创建用户 向mysql数据库的use
21、r表里面插入一条记录 更改用户名 修改user表里的user列和host列 删除用户 删除user表里的对应记录 执行flush privileges命令,让权限生效不推荐 权限管理 MySQL有哪些权限show privileges;权限粒度1 数据操作Privileges DATA:SELECT,INSERT,UPDATE,DELECT权限粒度2 数据定义Privileges DATABASE:CREATE,ALTER,DROP TABLE:CREATE,ALTER,DROP VIEW/FUNCTION/TRIGGER/PROCEDURE:CREATE,ALTER,DROP权限粒度3 管理
22、员Privileges SHUTDOWN DATABASE REPLICATION SLAVE REPLICATION CLIENT FILE PRIVILEGEMySQL授权语句 GRANT授权(GRANT)授权WITH GRANT OPTION 允许被授予权限的用户,把这个权限转授他人新建一个用户并授权MySQL命令 新建用户 授权 更简单的方法新建一个用户并授权的其他方法 更改数据库记录 首先向mysql数据库的user表里面插入一条记录 根据自己需要是否向db和tables_priv表插入记录。执行flush privileges命令,让权限生效不推荐查看用户权限 查看当前用户权限查看
23、用户权限 查看其他用户权限回收权限 REVOKE回收权限 REVOKEMySQL权限信息存储结构 存储在数据库表中 密码也加密存储在表中 每一种权限类型在元数据里都是枚举类型,表明是否有该权限与权限相关的表 User Db Tables_priv Columns_privMySQL权限管理的步骤用户管理权限管理p合法的用户才能连接到MySQL服务器p用户名p密码p登录IPp进一步操作数据库对象的权限p包括库,表,列权限类型小结 MySQL权限信息都是以数据记录的形式存储在数据库的表中 MySQL权限验证有IP白名单的环节,并且粒度更细,可以精确到表和字段。小结 使用Binary二进制安装时,没
24、有设置密码,需要重置root的密码 权限相关的操作不要直接操作表,统一使用MySQL命令网络数据库技术网络数据库技术 数据查询数据查询学习目标 掌握SELECT语句的用法 掌握多表查询 等值连接 join连接 子查询 unionSELECTSELECT语法语法示例:网易云音乐歌单歌单表(play_list)的结构SELECT基本使用查询全部列*代表所有的列场景1:查询所有的歌单信息SELECT基本使用查询指定的列 各列名之间以逗号分隔场景2:查询所有的歌单名字和作者账号SELECT基本使用定义列别名 as 可以省略 当列别名中有空格时,列名必须用单引号单引号括起来 也可以定义表别名表别名场景3
25、:查询所有的歌单名字和作者账号,并以中文显示对应的列名SELECT基本使用 消除结果集中的重复行 distinct 大表慎用 可对多字段使用场景4:查询创建歌单的用户账号SELECT基本使用 替换查询结果中的数据 case when 实现类似编程语言的if else功能 可以对SQL的输出结果进行选择判断场景5:对未录入歌曲的歌单(trackcount=null),输出结果时,歌曲数返回0SELECT基本使用 替换查询结果中的数据 case when 格式casewhen 条件1 then 表达式1when 条件2 then 表达式2else 表达式nendSELECT基本使用比较运算场景6:
26、查询歌曲数在5首以上的歌单信息n当多个条件时,要用逻辑运算符pnot and orSELECT基本使用 模式匹配通配符描述%匹配一个或多个字符_匹配单个字符nLike运算符p用于指出一个字符串是否与指定的字符串相匹配p其运算对象可以是char,varchar,text,datetime等场景7:查询歌曲名有“男孩”二字的歌曲名SELECT基本使用 范围比较(1)nbetween and p用于查询条件是某个值的范围场景8:查询歌曲数在2首到6首之间的歌单信息SELECT基本使用 范围比较(2)ninp可以指定一个值表,值表中列出所有可能的值p当与值表中的一个值匹配,即返回TRUE,否则FALS
27、E场景10:查询账号为1,3,5号的作者创作的歌单SELECT基本使用 空值比较nis nullnis not null场景11:查询歌曲数为空值的歌单SELECT基本使用order by asc 升序(默认)desc 降序场景12:按创建时间排序order by多字段排序SELECT基本使用 group by 分组时,select子句包括 分组的字段 对分组字段的统计(聚合函数)场景13:统计创建歌单的用户和每人创建歌单的数量SELECT基本使用 group by常用的聚合函数group by场景132:统计创建歌单的用户和每人创建歌单的数量,并且只显示创建歌单数量大于2个的用户SELECT
28、基本使用 limit,offset 实现分页 offset不建议过大场景14:查询歌单,从第3行开始显示10行SELECTSELECT语法语法练习查询创建的歌单的订阅总人数为前2名的用户及其创建的歌单的订阅总人数song.play_list歌单表(play_list)记录了歌单的基本信息song.play_list歌单收藏表(play_fav)记录了用户收藏歌单的情况song.play_fav连接数据源为多个表等值连接 场景1:查看每个歌单的基本信息及其被收藏的情况练习 查询收藏“老男孩”这个歌单的用户ID连接join(等价)起别名,使书写更简单子查询 子查询也可以实现同上功能 子查询:内层查
29、询的结果作为外层的比较条件 一般子查询都能转换成连接 推荐使用连接左连接left join 从左表左表中返回所有的行,即使在右表中没有匹配的行n场景:查看每个歌单的id及名字以及其收藏者id对比 join右连接right joinn从右表中返回所有的行,即使在左表中没有匹配的行n场景:查看每个收藏者id及其收藏的歌单的id及名字left join 场景:查询没有用户收藏的歌单right join 场景:查询没有收藏歌单的用户union 场景:查看创建和收藏歌单的所有用户n把不同表中的相同字段聚合在一个结果集中nunion:去掉重复nunion all:不去掉重复带有比较运算符的子查询 父查询与
30、子查询之间用比较运算符进行连接,可以用、=、=、!=或 查询和张红同一个系学习的学生姓名Select xm from xs where szx=(select szx from xs where xm=张红);带有ANY或ALL谓词的子查询 可以用ANY、=ALL、=ALL等 查询其他系中比信息系任一学生年龄小的学生名单Select sname,sage from xs where sageany(select sage from xs where szx=信息系)andSzx信息系;带有EXISTS谓词的子查询 带有EXISTS谓词的子查询不返回任何实际数据,只产生逻辑真或逻辑假。查询所有选
31、修了1号课程的学生姓名Select sname from xs where exists (select *from sc where xh=xs.xh and kch=1);小结 等值连接 join left join right join 子查询 带有ANY、ALL、EXISTS的子查询网络数据库技术网络数据库技术数据操纵数据操纵学习目标 掌握insert语句的使用 掌握update语句的使用 掌握delete语句的使用数据插入insert(1)一次可插入一行或多行insert 实例1insert 实例2数据插入insert(2)一次可插入一行insert 实例3数据插入insert(3)
32、insert 实例4insert 实例5数据插入replace replace的用法同insert两者区别?数据插入小结 单行插入pinsert into table values();多行插入:insert into table values(),();覆盖插入:replace into table values();忽略插入:insert ignore into table values();查询插入:insert into table_b select*from table_a;数据更新update(1)单表updateupdate实例1数据更新update(2)多表updateupda
33、te实例2 根据a表的age值更新b表的age2320n用单表update也可以实现,但很麻烦删除delete(1)单表deletedelete实例1 将姓名是cao的记录删除delete实例2n根据b表的name值删除a表的数据n将name为liu的对应记录从表a删除删除delete(2)多表deleten或多表删除 根据b表的name值删除a表的数据删除truncate 将表全部数据清空 逻辑上,等同于delete from truncate 操作先将表drop,之后再create,比一行行地delete快网络数据库技术网络数据库技术内置函数内置函数学习目标 掌握常用的聚合函数 掌握常用的
34、预定义函数 掌握算术、逻辑运算聚合函数 对数据进行集中概括 面向一组数据,对数据进行聚合运算后,返回单个值 常见应用 带group by子句的select语句中,完成统计功能 基本语法 select function(列)from 表名 group by;常用的聚合函数函数名函数名说明说明COUNT(列)/COUNT(*)返回列的行数/全部行数COUNT(DISTINCT 列)返回列去重后的行数MAX(列)返回列的最大值MIN(列)返回列的最小值SUM(列)返回列的总和AVG(列)返回列的平均值GROUP_CONCAT(列)返回一组值的连接字符串(MySQL独有)song.song_lists
35、elect*from song_list;count说明基本一样去掉nullgroup_concat()显示每张专辑的歌曲列表group_concat()其返回值的最大长度默认为1024SET GLOBAL|SESSION group_concat_max_len=val;n可以改变其长度使用聚合函数作表行列转换表行列转换实现可以省略预定义函数 预定义函数面向单值数据,返回一对一的处理结果(聚合函数可以理解为多对一)基本语法 select function(列)from 表名;select*from 表名 where 列名function(value);预定义函数字符串函数函数名函数名说明说明
36、LENGTH()LENGTH()返回列的返回列的字节数字节数CHAR_LENGTH()CHAR_LENGTH()返回列的返回列的字符数字符数TRIM(),RTRIM(),LTRIM()TRIM(),RTRIM(),LTRIM()去除去除两边两边空格空格/右边右边/左边左边SUBSTRING(SUBSTRING(strstr,pospos,lenlen)从从pospos位置截取位置截取(长度为长度为lenlen的)字符串的)字符串strstrLOCATE(LOCATE(substrsubstr,strstr,pospos)返回返回substrsubstr在在strstr字符串中的位置字符串中的位
37、置REPLACE(REPLACE(strstr,from_strfrom_str,to_strto_str)将将strstr字符串中字符串中from_strfrom_str替换成替换成to_strto_strLOWER(),UPPER()LOWER(),UPPER()字符串转换为小写字符串转换为小写/大写大写LEFT/RIGHT(LEFT/RIGHT(strstr,x),x)返回字符串返回字符串strstr左边(右边)左边(右边)x x个字符个字符实例 length()vs.char_length()实例substring()实例locate()实例left()/right()预定义函数时间处
38、理函数函数名函数名说明说明CURDATE()当前日期日期CURTIME()当前时间时间NOW()当前时间和日期时间和日期UNIX_TIMESTAMP()当前时间戳时间戳FROM_UNIXTIME()转换转换时间戳为时间DATE_FORMAT(date,format)按指定格式指定格式显示时间DATE_ADD(date,INTERVAL expr unit)计算指定日期日期向后加向后加一段时间的日期DATE_SUB(date,INTERVAL expr unit)计算指定日期日期向前减向前减一段时间的日期实例当前时间实例时间戳实例时间格式MySQL5.7手册Date formatMySQL5.7
39、手册 Date format实例DATE_ADD(date,INTERVAL DATE_ADD(date,INTERVAL exprexpr unit)unit)DATE_SUB(date,INTERVAL expr unit)MySQL5.7手册DATE_ADD(date,INTERVAL DATE_ADD(date,INTERVAL exprexpr unit)unit)DATE_SUB(date,INTERVAL expr unit)实例DATE_ADD(date,INTERVAL DATE_ADD(date,INTERVAL exprexpr unit)unit)DATE_SUB(da
40、te,INTERVAL expr unit)其它常用时间日期函数实例预定义函数数字处理函数函数名函数名说明说明ABS()求绝对值求绝对值ROUND()四舍五入四舍五入CEIL()对小数对小数向上向上取整取整FLOOR()对小数对小数向下向下取整取整POW(num,n)num的n次幂幂MOD(n,m)取模取模(n除以m的余数)n%mRAND()取 0=v,=,=大于,大于等于大于,大于等于,=,=小于,小于等于小于,小于等于=等于等于,!=,!=不等于不等于BETWEEN m AND nBETWEEN m AND nm m 和和n n之间的值之间的值IN,NOTIN,NOT IN IN检查是否在
41、(或不在)一组值之中检查是否在(或不在)一组值之中算术、逻辑运算 算术运算 逻辑运算文档的使用 MySQL手册 http:/ Stack Overflow http:/ blog http:/ 常用的聚合函数 常用的预定义函数 算术、逻辑运算网络数据库技术网络数据库技术存储过程、存储函数、触发器存储过程、存储函数、触发器学习目标 掌握存储过程相关的基本语法 可以用存储过程完成常见的业务需求 掌握存储函数相关的基本语法 了解存储函数常见的业务需求 掌握触发器的基本语法 可以用触发器完成常见的业务需求存储过程 定义 是存储在数据库服务器端的一组SQL语句集 用户可以通过存储过程名和参数多次调用存储
42、过程 特点 使用灵活,可以使用流控制语句、自定义变量等完成复杂的业务逻辑 提高数据安全性,屏蔽应用程序直接对表的操作,易于进行审计 减少网络传输 提高代码维护的复杂度,实际使用中要评估场景是否合适创建存储过程基本语法创建存储过程实例求一个数的价乘存储过程名创建存储过程参数存储过程体声明局部变量i,其作用范围为它所在的程序块变量初始化if 语句while 语句说明 存储过程依附于数据库 创建存储过程,使用语句CREATE PROCEDURE。创建存储过程必须具有CREATE ROUTINE权限。常用的过程式语句 BEGIN.END复合语句 DECLARE语句 使用SET语句赋值 SELECT.I
43、NTO语句 流程控制语句 存储子程序可以使用BEGIN.END复合语句来包含多个语句。语法格式语法格式:begin_label:BEGIN statement_list END end_labelBEGIN.END复合语句DECLARE语句 用于声明局部变量局部变量 语法格式语法格式:说明说明:局部变量用于存储临时结果。其作用范围只在BEGINEND语句块中 DECLARE 语句位于BEGINEND语句块的开头,在任何其它语句之前。变量名变量类型默认值局部变量和用户变量的区别 局部变量前面没有使用符号 局部变量在其所在的BEGINEND语句块处理完后就消失了 而用户变量存在于整个会话当中 se
44、t(变量赋值)语法格式:SELECT.INTO语句 用于把选定的列值直接存储到变量中 返回的结果只能有一行 语法格式为:列名要赋值的变量名SELECT语句中的FROM子句及后面的部分流程控制命令命令命令描述描述IFCASEWHILEREPEAT调用存储过程call命令 call语法格式参数n存储过程可以在程序、触发器或者存储过程中被调用存储过程名存储过程可以不带任何参数存储过程可不可以没有返回值?实例创建存储过程调用存储过程调用存储过程的过程演示:查看存储过程 SHOW PROCEDURE STATUS 查看有哪些存储过程 SHOW CREATE PROCEDURE sp_name 查看某个存
45、储过程的具体信息删除存储过程 和其他数据库对象一样,使用DROP语句即可将存储过程从数据库中删除。存储过程小结 存储过程的创建 常用的过程式SQL语句 存储过程的调用 存储过程的删除知识回顾:系统函数 是系统提供的功能用户可以直接调用自定义函数(存储函数)需要用户自己创建存储在服务器端,供用户调用存储函数 定义 是存储在数据库服务器端的一组SQL语句集 用户可以通过存储函数名和传参多次调用n存储函数 VS.存储过程p存储函数的参数:是输入参数,没有输出参数p存储函数体中必须包含一条RETURN语句,来返回存储函数的值。存储函数有几个返回值?创建存储函数语法函数名参数返回值类型函数体特征设定创建
46、存储函数实例求一个数的价乘存储函数有几个返回值?调用存储函数语法函数名参数调用存储函数的过程演示:问题:这个存储过程是否可以用存储函数实现?不能!返回值多于一个删除存储函数 和其他数据库对象一样,使用DROP语句即可将存储函数从数据库中删除。函数名存储函数小结 存储函数与存储过程类似,但是必须带回一个返回值。存储函数与系统函数调用方法一样 函数可能在遍历数据时使用,注意性能损耗 在实际应用中,存储过程(函数)和触发器不利于水平扩展,多用于统计和运维操作中。触发器 是什么?触发器是加在表表上的一个特殊程序特殊程序 当表上出现特定的事件事件(INSERT/UPDATE/DELETE)时触发触发该程
47、序的执行 做什么?数据订正 迁移表 实现特定的业务逻辑定义触发器基本语法DEFINER :定义执行这个触发器的用户 bodyhead实例n触发器定义n有一张XS1表,结构与XS表相同。Create trigger xs_insert after insert on xs for each rowBegin insert into xs1 values(new.xh,new.xm,new.sr,new.szx,new.xb);End;实例 new.列名列名 更新后的列值更新后的列值 old.列名列名 更新前的列值(只读)更新前的列值(只读)n触发器定义bodyhead改变语句结束符改变语句结束符
48、触发器说明 在MySQL触发器中的SQL语句可以关联表中的任意列 但不能直接使用列的名称去标志 NEW.列名列名:用来引用新行的一列 OLD.列名列名:用来引用更新或删除它之前的原有行的列“NEW.列名”和“OLD.列名”对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以与NEW或OLD同时使用。实例n触发器执行?实例n触发器执行实例n触发器执行显示触发器删除触发器 和其他数据库对象一样,使用DROP语句即可将触发器从数据库中删除。触发器特点 触发器对性能有损耗,应慎重使用 同一类事件在一个表中只能创建一次 对于事务表,触发器执行失败则整个
49、语句回滚 Row格式主从复制,触发器不会在从库上执行 使用触发器时应防止递归执行触发器小结 触发器的定义 触发器的执行 触发器的特点 触发器的删除网络数据库技术网络数据库技术MySQL系统环境系统环境学习目标 理解几个ySQL术语 理解系统变量、状态变量、用户变量 理解SQL mode的作用 掌握设置SQL mode的方法 理解MySQL常用的SQL f 在Unix或Linux操作系统中,MySQL配置文件的名字 配置文件可以为程序启动时指定常用的选项 大多数MySQL程序可以读取其中的启动选项2.my.ini 在Windows操作系统中,MySQL配置文件的名字 配置文件可以为程序启动时指定
50、常用的选项 大多数MySQL程序可以读取其中的启动选项3.mysql mysql程序是MySQL数据库的一个命令行解释器 负责接收SQL语句,以及一些MySQL专门命令 如SHOW TABLES等 将这些需求传送给mysqld进程进行处理4.mysqld mysqld就是MySQL Server mysqld程序是MySQL数据库的数据库引擎 它以Unix进程或Windows服务的方式运行 它时刻等待处理客户端的需求以及在后台执行维护工作。mysql与mysqldClientServermysqld 程序程序mysql 程序程序启动ySQL Server方法一 命令行运行mysqld启动 启动