MYSQL

作者:烨竹

数据库的基本操作

登陆MySQL数据库服务:mysql -h服务器地址 -P端口号 -u用户名 -p密码
mysql -hlocalhost -P3306 -uroot -p
查看数据库:show databases;
创建数据库 :create database 数据库名 【库选项】
【库选项】:charset 用于设置字符集;collate 用于设置校验集
create database php charset utf8;
查看数据库的创建语句:show create database 数据库名;
删除数据库:drop database 数据库名
选择数据库:use 数据库名;

数据表的基本操作

设置客户端的通讯编码:set names 客户端编码
查看数据表:show tables;
创建数据表
语法:
create table 表名(
字段1 列类型 【列属性】,
字段2 列类型 【列属性】,
……
)【表选项】
说明:
列类型 列所要存储的数据的类型
【表选项】 包含以下几项:
charset 存储字符集
collate 校验集
engine 设置存储引擎(MyIsam、innodb) 在高版本的MySQL中默认是InnoDB
当创建一个表时,那么就是在创建一个表的结构,也就是表的表头信息。



查看表结构:desc 表名
查看表的创建语句:show create table 表名\G;
删除表:drop table 数据表名;

数据的操作

数据库是用于数据的操作,操作包含CURD(增Create、改Update、查Review、删Delete)

增加数据:insert into 表名【(字段列表)】 values(值列表);

查看数据:select 【all|distinct】 |字段列表|字段名 【as】 字段别名 from 数据源【where子句】【group by子句】【having子句】【order by子句】【limit子句】


【all|distinct】:all (缺省)显示查询到的所的记录;distinct去重(去掉重复)


【where子句】作用:根据where子句中的表达式,在将数据从硬盘读取到内存时进行第1次筛选。


【group by子句】
group by 字段1,字段2….
作用:根据where子句得到结果,对记录按指定的字段进行分组统计


统计函数
count(
|字段名):
字段名 按字段的的值统计每一组的记录个数(不会对字段名中包含null的记录进行统计)
max(字段名):统计指定字段的最大值
min(字段名):统计指定字段的最小值
sum(字段名):取指定字段值的和
avg(字段名):统计每个字段的平均值
多字段分组
group by 字段1,字段2…
提示:
先按第个字段划分大组,再在每个大组中,按第2个字段划分小组,而统计函数得到的结果是对最小组进行的统计
回溯统计:with rollup


【having 子句】
对group by得到的统计结果再进行第2次筛选。
提示:where表达式中,不能出现统计函数

【order by子句】
对最终的结果进行显示顺序上的控制。
语法:order by 字段1 【asc|desc】, 字段2 【asc|desc】,
说明:asc 缺省,升序
desc 降序

【limit 子句】:limit 【offfset,】rows
说明:offset 表示的是偏移量,第1条记录偏移量就0,第2条记录偏移量就是1,依此类推,如果省略表示offset为0
rows 表示的记录的条数。
对最终的结果进行显示行数上的控制。
数据的分页:
与分页相关的因素:
每一页的记录数 rowsPerPage 人为规定的
当前页 curPage 用户点击的页码是几,当前页就是几
业务场景:商品表goods 每一页的记录数是3条(rowsPerPage=3) 用户可以点击1,2,3,4,5….
数据分页的通用的公式:
limit (curPage-1)*rowsperPage,rowsPerPage

联合查询
语法:
(select 语句A)
union 【all|distinct】
(select 语句B)
说明:将A语句得到的结果与B语句得到的结果放在一个表中显示;两条select语句得到字段数要一致
联合查询的作用主要有两方面:
1、对同一个表的不同部分进行不同的查询方式
2、分表存储数据联合查询数据

子查询
1、定义
一个select语句中包含另一个select语句,那么被包含的select语句就是子查询。
2、子查询的分类
①、根据子查询的位置:
where子查询 子查询出现在的where的表达式中
from子查询 子查询出现在的from后面的
②、根据查询出来的结果
标量子查询 1 行1列
列子查询 1列多行
行子查询 1行多列
提示:以上标量、列子查询、行子查询就是where子查询
表子查询 多行多表
提示:以表子查询就是from子查询
3、子查询详解
理解一下where表达式,就是根据字段与值的匹配情况进行记录的筛选


①、标量子查询

②、列子查询

③、行子查询
找老乡

④、表子查询
就from子查询

小节:
对于where子查询,where子查询得到的就是数据,要求大家一定要清楚子查询得到数据是一列一行,还是一列多行,还是一行多列。
所有的子查询都必须使用括号括起来,
只要from子查询需要起个别名。
⑤、exists子查询
exists(查询语句)

4、all、any、some
all、any、some都是用于针对一个集合(多个值)
all 所有
any 每一个,任何一个 some是any的同义词,作用相同
all 表示 >最大的
<all 表示 <最小的
<>all 表示 not in

三、连接查询
子查询 VS 连接查询
子查询虽然涉及查询多个表,但是最终结果的数据只来源一个表。
连接查询就是将多个表的数据连接在一起显示。
1、内连接
①、隐式内连接
语法:select 字段列表 from 表A,表B where 条件
提示:如果多表数据源没有指定筛选条件,那么产生的迪卡尔积。
示例:使用筛选条件

②、显式内连接
语法:select 字段列表 from 表A 【inner】 join 表B where 条件

提示:同连接也称之为等值连接(只有连接条件匹配的才会被保留)
2、外连接
①、左外连接
语法:
select 字段列表 from 表L left join 表R on 连接条件
②、右外连接
语法:select 字段列表 from 表L right join 表R on 连接条件
说明:无论左外连接,还是右外连接,最终结果中的匹配成功的记录全都被保留。
对于匹配不成立:左外连接保存左表的部分,右外连接保存右表的部分
④、using关键字
using是用于指定连接的字段

3、扩展(了解)
①、自然内连接
自然内连接就是为了简化内连接,自然内连接不需要指定连接条件,会自动找两个表中同名的字段进行连接。
语法:select 字段列表 from 表A natural join 表B;
②、自然左外连接
就用于简化左外连接
语法:select 字段列表 from 表L natural left join 表R;
③、自然右外连接
就用于简化左外连接
语法:select 字段列表 from 表L natural right join 表R;
④、交差连接
语法:select 字段列表 from 表A cross join 表B where 条件

修改数据:update 表名 set 字段名=值, 字段名=值, 字段名=值…【where子句】【limit子句】
删除数据:delete from 表名 【where子句】【limit子句】

存储引擎(了解),校验集
存储引擎:驱动数据库软件对数据进行向硬盘中进行读写操作的。
查看存储引擎:show engines;
MyIsam特性:不支持事务安全,不支持外键
InnoDB特性:支持事务安全,支持外键


查看字符集:show charset;
校验集就是某一种字符集的比较规则。
查看校验集:
show collation;
_cs casesensitive 大小写敏感(区分大小写)
_ci caseinsensitive 大小写不敏感(不区分大小写)
_bin 二进制 区分大小写

MySQL中的运算符:
= 此符号在MySQL中即是赋值又是比较
、<、<>、>=、<=、or、and、in\not in、between m and n \ not between m and n
is null 专用于判断null值的
is not null
<=> 安全相等运算符,可以判断null值与非Null值
like 主要用于模糊查询,需要与两个占位符配合使用 %、_
% 表示模糊部分,当前位置及其后的0个或多个字符
_ 表示模糊部分,当前位置的1个字符
not like

列类型——详解
语法:
create table 表名(
字段1 列类型 【列属性】,
字段2 列类型 【列属性】,
……
)【表选项】


数值型
①、整数型
(unsigned)正整数

②、小数型

语法:
float(m,d);
double(m,d)
说明:
m表示所有的位数(包含整数与小数部分)
d表示小数位数
整数位数m-d
对浮点数会有丢失精度,一般很少使用
decimal(m,d)
说明:
m表示所有的倍数(包含整数位与小数位)
d表示小数位
整数位是m-d


字符型

①、定长字符串:char(n);n最大是255
 n表示最多存储的字符的个数,
 当创建表时,设置了字段为char(10),实际存储5个字符,在硬盘中这5个字符实际所占的空间是10个。
②、变长字符串:varchar(n);n最大是65535
集合类型set:set(值列表);
集合类型用于规定当前字段所能取的值的列表,只能在值列表中取1个或多个值。

日期时间型
year表示年 格式:’yyyy’ 例如:’2017’
date表示日期 格式:’yyyy-mm-dd’ 例如:’2017-10-09’
time表示时间 格式:’hh:ii:ss’ 例如:’ 17:02:40’
datetime日期时间 格式:’yyyy-mm-dd hh:ii:ss’ 例如:’2017-10-09 17:02:40’
timestamp时间戳 格式:’yyyy-mm-dd hh:ii:ss’ 例如:’2017-10-09 17:02:40’
timestamp可以记录当前记录被修改的时间

列属性
create table 表名(
字段名 列类型 列属性,
字段名 列类型 列属性
)【表选项】
1、列类型 VS 列属性
列类型限制的一条记录中的某一个字段的取值类型。
列属性是对某个字段在一整列上的约束。
2、null
说明:
当向表中插入数据时,如果没有为某些字段提供值,那么这些字段会使用系统的默认值Null
null很特殊,一般我们不允许表中出现null值
3、not null
用于约束字段的值不允许为Null(不允许MySQL使用自己的默认值null来填充记录)
4、default
default用于自定义默认值,一般与not null联合使用,



5、unique
unique唯一的意思,用于约束当前字段中不能有重复的值出现。
unique的特点:
字段的值不允许重复,但允许为Null值,原因是null值不等于null
6、primary key
Primary key是一种索引
说明:
primary key约束特点是唯一且不允许为null
7、auto_increment
auto_increment是自增长的意思,主要有于解决主键的值的问题,与primary key一同使用,实现主键的值的递增。
auto_increment只能应用给整数类型,而且只能是primary key或unique
8、复合主键(了解)
多个字段共同作用为一个主键。
语法:
primary key(字段1,字段2…);
说明:
只要组成复合主键的两个字段的值同时相同才算重复。
10、备注 comment

修改表结构
alter table 表名 add|drop |modify|change |rename 字段名 列类型 列属性 first|after字段名
修改列类型:change即可以修改字段名也能修改字段类型
修改列类型:modify只能修改字段类型
修改表名:alter table 表名 rename to 新表名;
修改列属性
①、增加列属性
增加非主键列属性:alter table 表名 modify 字段名 列类型 列属性 first|after字段名
增加主键列属性:alter table 表名 add primary key(主键字段)
②、删除属性
删除非主键列属性:alter table 表名 modify 字段名 列类型
删除unique:alter table test_modify drop key 唯一键的索引名;
说明:
默认唯一键的索引名就是字段名
删除主键:alter table 表名 drop primary key;
说明:
如果primary key与auto_increment联合使用,那么在删除primary key之前,要先删除auto_increment属性

高级操作

1、复制表结构
语法:
create table 表B like 表A
说明:
创建一个表B,表的结构与表A完全相同,但不包含其中的数据
2、备份SQL执行结果
语法:
create table 表名 select 语句;
说明:
使用select语句查询到的数据,创建一个表
3、限制更新
语法:
update 表名 set 字段名=值, 字段名=值 【where子句】【limit子句】
说明:
只更改where子句中匹配到的记录中的limit子句所限制的行数。
4、限制删除
语法:
delete from 表名 【where子句】【limit子句】
说明:
只删除where子句中匹配到的记录中的limit子句所限制的行数。
5、批量插入
语法:
insert into 表A【(字段列表)】 select 语句;
说明:
将select语句得到的数据,一次性插入到表A中。
6、蠕虫复制
说明:
在批量插入的基础上,将数据来源表与数据插入的表设置为同一个表。那么这种情况就形象的称之为蠕虫复制。
7、主键冲突
①、冲突更新
语法:
insert into 表名【(字段列表)】 values(值列表) on duplicate key update 字段=值, 字段=值,…
说明:
在向数据表中插入数据时,如果遇到主键或唯一键冲突,那么就执行更新操作。
②、冲突替换
语法:
replace into 表名【(字段列表)】 values(值列表) ;
说明:
在向数据表中插入数据时,如果遇到主键或唯一键冲突,那么就将原记录完全替换掉。
8、清空表
①、delete
delete from 表名;
说明:
如果不加where与limit则会将数据表中所有的数据删除
使用delete删除表中所有的数据时,并不会重建索引(主键并不会重置)
②、truncate
truncate 表名;
说明:
将数据表中所有的记录都删除
使用truncate删除表中所有的数据时,会重建索引(主键会重置)

外键


表B的某个字段的取值,必须是表A主键字段中的1个;而且这种关系不需要人为的控制,是由MySQL自己来约束
表B中被约束的字段就叫外键
表B称之为从表
表A称之为主表
使用A表中的一个列的值来约束B表中的某个字段的取值范围

创建外键,必须先创建主表,再创建从表。
语法:foreign key(外键字段) references 主表(主键字段)
说明:foreign 外的意思
references 参考,参照

外键的约束
①、从表被主表约束
当主表与从表建立外键关系后,从表的外键字段的值必须是主表的主键字段值中的一个。
对从表的外键字段的更新,同样要满足约束。
②、主表被从表约束
不能随意删除主表
主表的记录不能随意更新
③、置空(null)约束与级联约束
默认主表中的记录是不能随意删除或修改,但是实现工作中,此需求是很正常,所以外键又提供了置空(null)约束与级联约束。
on delete set null
置空约束 当主表的记录被删除后,从表中被约束的外键的值设置null
on update cascade
级联约束 当主表的主键字段被修改后,从表中被约束的外键的同时更改为相应的值

删除外键:alert table 表名 drop foreign key 约束名
说明:删除外键需要知道外键的约束名,可以使用show create table 表名来查看

添加外键
注意:如果是一个已经存在的表,而且表中有数据,那么在添加外键之前,两个表中的外键约束的数据一定要满足条件
语法:alter table 表名 add forien key(外键字段) references 主表(主键字段) 【on update cascade】【on delete set null】

数据备份

1、sql备份与还原
①、sql的备份
只备份sql语句。
备份的工具:



运行环境是cmd窗口。
语法:
mysqldump –uroot –p 数据库名【表名】 > 备份文件
②、还原
语法:mysql –uroot –p 数据库名 < 备份文件
2、数据备份
数据备份需要先登陆到mysql
①、数据的备份
语法:select 字段名 from 表名 where 条件 into outfile ‘备份文件’ 【fields选项】【lines选项】
说明:
fields用于设置字段的相关信息
以fields开头
terminated by 设置字段与字段之间的分隔符 默认为tab
enclosed by 设置字段的包裹 默认是空字符’’
esacped by 设置null值使用什么代替 默认\N
lines用于设置记录的相关信息
以lines开头
starting by 设置一行的开始符号
terminated by 设置一行的结束符号 默认\r\n
②、数据的还原
注意:数据还原时表结构一定要有
语法:
load date local infile ‘备份文件’ into table 表名 【fields选项】【lines选项】

用户管理

1、查看用户
msyql的用户信息都保存在mysql数据库的user表中



2、创建用户
语法:
create user ‘登陆名’@’用户的标识’ identified by ‘密码’;
说明:
用户标识分以下几种:
localhost 本机
IP 127.0.0.1 本机
% 不限制
3、授予权限
新创建的用户是没有任何权限的,必须为用户授权。
语法:grant all privileges|权限列表 on 数据库名.表名 to ‘登陆名’@’用户标识’;
4、收回权限
语法:revoke all privileges|权限列表 on 数据库名.表名 from ‘登陆名’@’用户标识’;
5、删除用户
语法:drop user ‘登陆名’@’标识’;
6、重置root密码
①、关闭mysql服务
②、开启服务
使用mysqld.exe工具跳过授权表启动msyql




③、重新开启一个cmd窗口,不需使用用户名就可以登陆mysql

④、修改root用户的密码



⑤、关闭第2步中处于挂起的窗口,并在任务管理器中结束msyqld服务

⑥、正常启动mysql服务程序,使用新密码进行登陆

mysql高级

视图view
1、视图简介
view的意思视窗,窗口的意思,在MySQL中翻译为视图;视图是mysql中的一种特殊的表,视图就是一条SELECT语句执行后返回的结果集
创建语句:
视图是MySQL中的一种特殊的表,但是这种表并不是由创建表的语句所创建,而是由select语句所创建。
表结构:
视图是MySQL中的一种虚拟表,视图的结构是由创建视图的select语句查询出的字段所创建。
表的数据:
MySQL中的视图并没有专属于自己的数据,视图的数据来源于创建视图的select语句所查询的数据表。
2、创建视图
语句:create 【or replace】 【algorithm=算法】 view 视图名 as select语句
说明:
【or replace】 用于替换视图
【algorithm=算法】 用于设置视图的算法


创建视图的那个表就是基表

3、查看视图
语法:show tables;
4、视图操作
视图也是一种表,但是如果是实际的表,那么我就可以进行增、删、改、查。但视图更主要的作用是进行查询。
如果是查询操作,视图与实际的表没有任何的区别。
视图也可以进行增、删、修改操作,但是限制会非常多。
视图的特点:
对基表的数据的任何更改都会即时的反映在视图中。
视图可以分为单表视图与多表视图:
单表视图就是创建视图的select语句只访问了1个表
多表视图就是创建视图的select语句访问了多个表。
个人理解:
视图就是将一个sql语句保存起来,并命名,之后对这个视图的访问,会触发,创建视图的那个select语句的执行。
5、修改视图
语句:create 【or replace】 【algorithm=算法】 view 视图名 as select语句
说明:如果是修改一个已经存在的视图,需要使用or replace即可。
6、删除视图
语法:drop view 视图名;
7、视图算法
①、查看视图算法
show create table 视图名;

②、视图算法分类:
首先必须明确:
与一个视图相关的有两条select语句,其一是创建视图的那个select,其二是查询视图的select;
视图的算法说的就是这两条select语句的执行顺序
temptable 临时算法,当查询一个视图时,先执行创建视图的select语句,将产生的结果保存内存中的一个临时表,之后在这个临时表的基础上再执行查询视图的select语句

merge 合并算法,当查询一个视图时,会将创建视图的select语句与,查询视图的select语句进行合并为一条sql再执行。
undefined 未定义,MySQL会自己决定使用temptable还是merge,绝大多数会选择merge算法

小节:
对视图的理解:就是使用一个类似于表名的来保存一条复杂的select语句。
视图算法:就是两条select语句的执行顺序。

触发器
1、触发器的概念
一类特殊的数据库程序,可以监视某种数据的操作(insert/update/delete),并触发相关的操作(insert/update/delete),保护数据的完整性(就是对当某一个表进行update、delete、insert操作时,会触发一段代码的执行。)
2、触发器的要素
触发事件: insert、update、delete
触发时机: before、after 例如:before update、after update
触发对象: 数据表
范围: 每一行记录
3、创建语法
语法:
create trigger 时机 事件 on 数据表 for each row
begin
所触发执行的代码
end;



4、触发器记录对象
old、new
old与new代表的是orderlist表,所改变的记录的之前与之后的状态。
old new
update 没有修改之前的记录 修改之后的记录
insert null 新增的记录
delete 删除之前的记录 null


5、查看触发器
语法:
show create trigger 触 发器名
语法:
show triggers;
6、删除触发器
语法:
drop trigger 触发器名

事务
1、事务
事务是MySQL的一种机制,主要用于保证使用多条SQL语句,来完成现实中的一件事时,保证结果的一致。
事务操作
①、开启事务
start transaction;
说明:
执行此语句后,任何的sql对数据库的更改,都不会立即反应到数据库中。
②、执行事务中的sql
//完成现实中的事情的多条sql。
③、根据事务中的sql的执行结果进行提交或回滚
提交:commit;
说明:
将事务中的sql对数据库的更改,写到数据库中
回滚:rollback
说明:
将事务中的sql对数据库的更改,全部删除。
提示:
当执行start transaction语句后,再执行commit或rollback那么这个事务就结束了。



脏读(dirty read)



4、回滚点
语法:
savepoint 回滚点名;
说明:
回滚点就是事务执行过程上的一个保存点
语法:
rollbak to 回滚点名;
说明:
只回滚到指定的回滚点

5、事务的特性ACID(了解)
Atomicity 原子性
事务不可再分,可以保证多条sql要么全部成功,要么全部失败。
Consitency 一致性
当事务开始执行时,对硬盘中的数据没有影响。
Isolation 隔离性
多个事务的执行互不影响
Durability 持久性
当事务提交后,影响是永久的。

变量
MySQL主要是用于存储数据,并对数据进行增、删、改、查。但是MySQL也是一种程序语言,也可以定义变量、流程控制、定义函数、定义存储过程。
1、MySQL的系统变量
①、查看预定义的变量
语法:
show variables【 like pattern】
说明:
【like pattern】 用于模糊查询


②、修改系统变量的值
语法:
set 系统变量=值;
说明:
以上系统变量的更改只影响当前客户端
③、全局系统变量的设置
语法:
set global 系统变量=值;
说明:
以上系统变量的更改只影响所有新连接进来的客户端。
2、自定义变量
①、定义
语法:
set @变量名=值;
说明:
为了区分自定义变量与系统变量。自定义变量前需要使用@

②、访问
语法:
select 变量名:
系统变量的访问使用show,但是自定义变量的访问使用select

自定义变量的赋值

③、将字段的值赋值变量

④、局部变量
语法:
declare 变量名 类型 【default 默认值】
说明:
只能用在函数内

函数
1、系统函数
字符串处理函数
LTrim(): 去除左边的空格
RTrim(): 去除右边的空格
Upper(): 返回大写字符。Strtolower.
Lower(): 返回小写字符。strtoupper
Char_length(): 返回字符的个数。
Left(str,len) : 返回串左边指定数目的字符.
Right(str,len): 返回串右边指定数目的字符
concat(str1,str2): 连接子字符串
SubString(str,start[,len]):返回子串的字符,mid()同名函数。(substr)
位置从1开始。
Instr(父串,子串):第一个出现的位置。位置从1开始。没有找到,返回0.类似于
日期时间函数
• now():获取当前时间日期
• Date() :返回日期时间的日期部分.当前日期curdate().
• Time() :返回一个日期的时间部分.当前时间curtime().
• DateDiff() :求两个日期的差
• Year():返回一个日期的年份部分
• Date_add(日期,interval 数字 单位),向日期添加时间间隔
quarter()
month()
day()
数学函数
ABS(x) 返回x的绝对值
CEILING(x) 返回大于x的最小整数值
FLOOR(x) 返回小于x的最大整数值
GREATEST(x1,x2,...,xn)返回集合中最大的值
LEAST(x1,x2,...,xn) 返回集合中最小的值
MOD(x,y) 返回x/y的模(余数)
RAND()返回0到1内的随机值
ROUND(x,y)返回参数x的四舍五入的有y位小数的值
其他函数
Md5():32位加密函数。主要用于对密码字段进行加密
Version():查询版本号。
Datebase():当前选择数据库
2、自定义函数
①、定义
语法:
create function 函数名(变量 类型,变量 类型…) returns 类型
begin
//函数体
return 值;
end;
说明:
函数的定义必须指定返回值的类型
函数体内部必须有返回值,
函数内部不能使用select语句


②、函数的调用
语法:
select 函数名(实参)

③、作用域
分全局作用域与局部作用域
全局作用域:使用set @变量=值,定义的变量其他作用域就是全局作用域
局部作用域:在函数内部使用declear声明的变量就是局部变量,其作用域就是局部作用域
局部变量
语法:
declare 变量名 类型 【default 默认值】
说明:
只能用在函数内
image.png


④、查看函数
语法:
show function status\G
3、流程控制
①、if
语法:
if 表达式 then
//语句体
else
//缺省语句体
end if;
说明:
只有双分支没有多分支
②、while循环
语法:
while 表达式 do
循环体
end while;

存储过程procedure

1、简介:存储过程就是一个特殊的函数。
2、创建存储过程
语法:
create procedure 过程名(方向 变量1 类型,方向 变量2 类型)
begin
//过程代码
end;
说明:
方向 in out inout
从外向里: in可以接收外部传递进来的数据
out不能接收外部传递进来的数据
inout可以接收外部传递的数据
从里向外: in不能将值传递出来
out可以将值传递出来
inout可以将值传送出来



存储过程的调用:
call 过程名(实参);




3、查看存储过程
语法:
show procedure status;

4、删除存储过程
语法:
drop procedure 过程名;

函数
定义语法中必须有returns,函数体也必须有return
函数中不能有select语句
函数的调用使用select
存储过程
定义的语法中形参需要有方向(方向解决的是传递方式)
过程中可以有select语句

过程的调用使用call
存储过程procedure
1、简介
存储过程就是一个特殊的函数。
2、创建存储过程
语法:
create procedure 过程名(方向 变量1 类型,方向 变量2 类型)
begin
//过程代码
end;
说明:
方向 in out inout
从外向里: in可以接收外部传递进来的数据
out不能接收外部传递进来的数据
inout可以接收外部传递的数据
从里向外: in不能将值传递出来
out可以将值传递出来
inout可以将值传送出来
存储过程的调用:
call 过程名(实参);
3、查看存储过程
语法:
show procedure status;
4、删除存储过程
语法:
drop procedure 过程名;
函数
定义语法中必须有returns,函数体也必须有return
函数中不能有select语句
函数的调用使用select
存储过程
定义的语法中形参需要有方向(方向解决的是传递方式)
过程中可以有select语句
过程的调用使用call

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容