MySQL学习总结

MySQL学习总结

 

前言

春节期间看了一本mysql书《MySQL数据库应用从入门到精通》

觉得这本书相对简单、基础、实用、全面,我们大多数人喜欢搞一些高深的东西,而忽视一些简单基础的东西,在工作当中我们犯错的地方往往是那些简单基础的地方,有的时候一些基础的DDL、DML并不一定是信手拈来,有些概念和用法也并不一定掌握的很准确,还需要百度的帮助。

下面简单的总结些容易犯错或者是容易模糊的概念和用法分享给大家,抽时间整理了下 以便后续review,目前完成了两篇《基础篇》《操作应用篇》,还有一篇《数据库管理篇》主要是安全、日志、性能、维护的知识。后续整理完补发给大家,希望大家能从中受益一点点,也希望大家多分享,共同切磋、共同进步。

第1篇 MySQL数据库基础篇

1. 概念

1. 数据库(DataBase,DB:是指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。

2. 数据库管理系统(DataBase Management System,DBMS:是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。当前比较流行和常用的数据库管理系统有Oracle、MySQL、SQL Server和DB2等。

3. 数据库系统(DataBase System,DBS:是指在计算机系统中引入数据库后的系统,通常由计算机硬件、软件、数据库管理系统和数据管理员组成。

 

在通常情况下,经常会用数据库来表示它们使用的数据库软件。这经常会引起混淆,确切地说,数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的容器。

 

2. 数据库管理系统提供的功能

数据定义语义(Data Definition Language,DDL:数据库管理系统提供了数据定义语言定义数据库涉及各种对象,定义数据的完整性约束,保密限制等约束。

数据操作语言(Data Manipulation Language,DML:数据库管理系统提供了数据操作语言实现对数据的操作。基本的数据操作有两类:检索(查询)和更新(插入、删除和更新)。

数据控制语言(Data Control Language,DCL:数据库管理系统提供了数据控制语言实现对数据库的控制,包含数据完整性控制、数据安全性控制和数据库的恢复等。

什么是 SQL其发音为字母S-Q-L或sequel [ˈsikwəl],是Structure QueryLanguage(结构化查询语言)的缩写,是目前广泛使用的关系数据库标准语言。

 

3. 安装和配置

MySQL基于客户端---服务器(C\S)的数据库管理系统,即服务器软件和客户端软件。

 

服务器软件是负责所有数据访问和处理的一个软件,而关于数据添加、删除等所有请求都来自于客户端软件。

ü  服务器端软件为MySQL数据库管理系统,可以在本地计算机上或者具有访问权限的远程服务器上安装该软件。

ü  客户端软件为可以操作MySQL服务器的软件。

 

5.MySQL的版本

目前MySQL数据库按照用户群分为社区版(Community Server)和企业版(Enterprise)

 

从MySQL版本5开始,开始支持触发器、师徒、存储过程等数据库对象。

常见软件版本:

ü  GA(General Availablity):官方推崇广泛使用的版本。

ü  RC(Release Candidate):候选版本的意思,该版本深思最接近正式版的版本。

ü  Alpha和Bean都属于测试中版本,其中Alpha是指内侧版本,Bean是指公测版本。

 

注意:如果MySQL安装在服务器上,一定要选择“Add Firewall exception for this port”复选框,这样就可以在同一网络内的用户可以访问该端口;

 

如果MySQL安装在服务器上,需要选择“Enable root access from remove machines”复选框来设置可以让远程计算机通过用户root来登陆MySQL。

 

6.MySQL目录说明

l  Bin文件夹:存放可执行文件。

l  Include文件夹:存放头文件。

l  Lib文件夹:存放库文件。

l  Share文件夹:存放字符集、语言等信息。

 

各个.ini文件的含义如下:

my.ini文件:MySQL软件正在使用的配置文件。

l  my-huge.ini文件:当MySQL软件为超大型数据库时时用的配置文件。

l  my-innodb-heavy-4G.ini:当MySQL软件的存储引擎为InnoDB,而且内存不小于4GB时使用的配置文件。

l  my-large.ini:当MySQL软件为大型数据库时使用的配置文件。

l  my-medium.ini:当MySQL软件为中型数据库时使用的配置文件。

l  my-small.ini:当MySQL软件为小型数据库时使用的配置文件。

l  my-template.ini:配置文件模板。

 

在DOS窗口查看window是系统已经启动的服务命令:

net start

net start MySQL  启动

net stop MySQL  停止

 

DOS窗口连接MySQL

mysql –h 127.0.0.1 –u root –p

 

执行上面命令时,如果出现 mysql 不是内部或外部命令,也不是可运行的程序或批处理文件。

说明在安装时没有勾选“Include Bin Directory in windows PATH”复选框。

可以在通过设置环境变量path来完成,变量值为MySQL安装的目录到\bin目录;

 

提示:如果是免安装版的也可以设置成为windows服务,自己查找下资料吧,也是很简单。

My.ini中添加[WindowsMySQLServer]

Server=” C:\\mysql\\bin\\mysqld.exe”

运行中:C:\\mysql\\bin\\mysqld.exe–install

 

 

第2篇 MySQL数据库操作和应用篇

1.数据库和数据库对象

数据库是一种可以通过某种方式存储数据库对象的容器。

 

各个系统数据库作用:

l  information_schema:主要存储了系统中的一些数据库对象信息,例如用户表信息、列信息、权限信息、字符集信息和分区信息等。

l  performance_schema:主要存储数据库服务器性能参数。

l  mysql:主要存储了系统的用户权限信息。

l  test:该数据库为MySQL数据库管理系统自动创建的测试数据库,任何用户都可以使用。

 

所谓数据库对象是存储、管理和使用数据的不同结构形式,主要包含表、视图、存储过程、函数、触发器和事件等。

 

2.存储引擎

在MySQL中查看数据库的存储引擎:

ü  show engines;   或者 showengines \G  或者  show engines \g

ü  show variables like ‘have%’;  查看所支持的存储引擎。

ü  show variables like ‘storage_engine%’;  查询默认存储引擎。

 

注:在具体执行SQL语句中,可以用“;”、“\g”和“\G”符号表示语句结束。

以“;”、“\g”结束符作用一样,而“\G”符号除了表示语句结束外,还可以使得结果显示更美观,相当于格式化的作用。

 

MySQL 5.5支持9种存储引擎,分别为FEDERATED、MRG_MYISAM、MyISAM、BLACKHOLE、CSV、MEMORY、ARCHIVE、InnoDB和PERFORMANCE_SCHEMA。

 

主要介绍MyISAM、InnoDb和MEMORY三种存储引擎特性的对比:

l  MyISAM:不支持事物、也不支持外键,所以访问速度比较快。因此对事物完整性没有要求并以访问为主的应用适合使用该存储引擎。

l  InnoDB:支持具有提交、回滚和崩溃恢复能力的事物,所以比MyISAM存储引擎占用更多的磁盘空间。因此当需要进行频繁的更新、删除操作,同时还对事物的完整性要求比较高,需要实现并发控制,此时适合使用该存储引擎。

l  MEMORY:使用内存来存储数据,因此访问速度快,但没有安全保障。如果应用中涉及数据比较小,需要进行快速的访问,则适合使用该存储引擎。

 

3.数据类型

浮点数类型

l  FLOAT(4字节)

l  DOUBLE(8字节)

当存储小数数据,两者皆可,但需要精确到小数点后10位以上,就需要选择DOUBLE类型。

定点数类型

l  DEC(M,D)    

l  DECIMAL(M,D)

字节M+2  最大和最小值取值范围与DOUBLE一样。但是有效取值范围由MD来决定。

如果存储小数数据,除了可以选择FLOATDOUBLE类型外,还可选择DECDECIMAL类型,当要求小数数据精确度非常高时,则可选择DECDECIMAL类型,它们的精度比DOUBLE类型还要高。

 

位类型

l  BIT(M)字节是M,M的取值范围为1---8,该类型的存储空间是根据精度决定的。

 

日期和时间类型

l  表示年月日,一般使用DATE类型。(4字节)

l  表示年月日时分秒,DATETIME类型。(8字节)

l  需要经常插入或者更新日期为当前系统时间,TIMESTAMP类型。(4字节)

l  时分秒,TIME类型。(3字节)

l  年份,YEAR类型。因为该类型比DATE类型占用更少的空间。(1字节)

注:要根据实际应用来选择满足需求的最小存储的日期类型。

ü  如果只需要存储“年份”,则可以选择存储字节为1的YEAR类型。

ü  如果要存储年月日时分秒,并且年份的取值可能比较久远,最好使用DATETIME类型而不是TIMESTAMP类型,因为前者比后者所表示的日期范围要长一些。

ü  如果存储的日期需要让不同时区的用户使用,则可以使用TIMESTAMP类型,因为只有该类型日期能够跟实际时区相对应。

字符串类型

l  CHAR(M)

l  VARCHAR(M)

VARCHAR类型的长度是可变得,范围0---65535。

如果需要存储少量字符串,则可以选择CHAR和VARCHAR类型,至于选择哪个?需要判断所存储字符串长度是否经常变换,如果经常变化则可以选择VARCHAR类型,否则选择CHAR类型。

 

4.表的操作

表是一种很重要的数据库对象,是组成数据库的基本元素,由若干个字段组成,主要用来实现存储数据记录。

表中的数据库对象包含

l  列(Column) 也叫属性列,创建表时,必须指定列的名字和数据类型。

l  索引(Index) 指根据指定的数据库表列建立起来的顺序,提供快速访问数据的途径且可监督表的数据,使其索引所指向的列中的数据不重复。

l  触发器(Triger)是指用户定义的事物命令的集合。

查看表结构语句

l  DESCRIBLE/DESC table_name;  查看表定义

l  show create table table_name \G 查看表详细定义

增加字段

1.        在表的最后一个位置增加字段

alter table table_name add 属性名 属性类型;

2.        在表的第一个位置增加字段

Alter table table_name add 属性名 属性类型 first

3.        在表指定字段之后增加字段

Alter table table_name add 属性名 属性类型 after 属性名;

删除字段

4.        Alter table table_name drop 属性名;

修改字段

5.        Alter table table_name modify 属性名数据类型;

6.        修改字段的名字:alter table table_name change 旧属性名 新属性名 旧数据类型;

 

7.        同时修改字段的名字和属性:alter table table_name change 旧属性名 新属性名 新数据类型;

8.        修改字段的顺序:alter table table_name modify 属性名1 数据类型 first|after 属性名2;

5.索引操作

根据索引的存储类型,分为B型树索引(BTREE)和哈希索引(HASH)。

注:InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型索引,默认为前者索引。

查看帮助文档,MySQL支持6种索引,普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。

一般下面情况适合创建索引:

l  经常被查询的字段,即在where子句中出现的字段。

l  在分组的字段,即在groupby子句中出现的字段。

l  存在依赖关系的子表和父表之间的联合查询,即主键或外键字段。

l  设置唯一完整性约束的字段。

一般下面情况不适合创建索引:

l  在查询中很少被使用的字段。

l  拥有许多重复值的字段。

 

创建索引

1.      创建表时创建普通索引:

Create table table_name(

属性名  数据类型,

…………

普通索引:Index|key[索引名] (属性名1 (长度)   ASC|DESC)

唯一索引:uniqueindex|key [索引名] (属性名1 (长度)   ASC|DESC)

全文索引:fulltext index|key [索引名] (属性名1 (长度)   ASC|DESC) ;  engine=MyISAM

);

注:只能在存储引擎MyISAM的数据库表上创建全文索引,在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,则以区分大小写的搜索方式执行。

 

2.       在已存在的表上创建普通索引:

Create index 索引名 on 表名属性名 (长度)  ASC|DESC

3.      通过SQL语句ALTER TABLE创建普通索引:

Alter table table_name add index|key 索引名 属性名(长度)  ASC|DESC

注:在创建索引时,可以指定索引的长度。这是因为不同存储引擎定义了表的最大索引数和最大索引长度。MySQL所支持的存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。

 

查看索引

l  查看表中的索引是否创建成功:Show create table table_name \G;

l  查看表中索引是否被启用:explainselect * from table_name where 属性名=1;

 

 

6.视图操作

视图:本质上是一种虚拟表,其内容与真实表相似,包含一系列带有名称的列和行数据。但是,视图并不是在数据库中以存储的数据值形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。

 

视图的特点:

l  视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。

l  视图是由基本表(实表)产生的表(虚表)。

l  视图的建立和删除不影响基本表。

l  对视图内容的更新(添加、删除和修改)直接影响基本表。

l  当视图来自多个基本表时,不允许添加和删除数据。

注:MySQL数据库管理系统从5.0.1版本开始提供视图新特性。

 

创建视图

Create viewview_name  as  查询语句;

 

查看视图

l  进入数据库view,查看该数据库里所有表名和视图名。

Use view ;

Show tables;

l  查看视图详细信息

Show table status [from db_name] [like ‘pattern’]

Show table status from view \G    返回表示表和视图各种信息的各种字段。

Show table status FROM view LIKE “view_name” \G  查看指定视图的详细信息。

l  查看视图定义信息

Show create view view_name

l  查看视图设计信息

DESCRIBE | DESC view_name

l  通过系统表查看视图信息

系统数据库information_schema 中存在一个包含视图信息的表格views,可以通过查看表格views来查看所有视图的相关信息。

Use information_schema;

Select * from views where table_name=’view_name’ \G

 

修改视图

l  Use view ;

Create or replace view view_name as 查询语句; 此法先删除原视图在重新创建

l  Alter 语句修改视图

Alter view view_name as 查询语句

7.触发器操作

l  创建有一条执行语句的触发器

Create triggertrigger_name

            BEFORE|AFTER trigger_EVENT

               ON TABLE_NAME FOR EACHROW  trigger_STMT

Trigger_EVENT 包括 insert、update、delete;

l  创建包含多条执行语句的触发器

Create  trigger  trigger_name

BEFORE|AFTER   trigger_EVENT

     ON TABLE_NAME   FOR EACH ROW

          BEGIN

          Trigger_STMT

          END

在关键字BEGIN和END之间为所要执行的多个执行语句的内容,语句之间用分号隔开。

 

注:在MySQL软件中,一般情况下用“;”符号作为语句的结束符号,可是在创建触发器的时候,需要用到“;”符号作为执行语句的结束符号。为了解决该问题,可以使用关键字DELIMITER语句,例如“DELIMITER$$”,可以用来实现将结束符合设置成“$$”。

 

DELIMITER $$

CREATE TRIGGER  tri_diarytime2

    AFTER  INSERT

         ON  t_dept  FOR EACH ROW

               BEGIN

                   INSER INTO t_diaryVALUES(null, ‘t_dept’,now());

                            INSERINTO t_diary VALUES(null, ‘t_dept’,now());

       END

       $$

DELIMITER ;

 

上述语句中首先通过“DELIMITER $$”语句设置结束符号为“$$”,然后在关键字BEGIN和END之间编写了执行语句列表,最后通过“DELIMITER;”语句将结束符号还原成默认结束符号“;”。

 

查看触发器

l  通过 SHOWTRIGGERS语句查看触发器

Show triggers \G

l  通过查看系统表triggers实现查看触发器

于系统数据库information_schema中存在一个存储所有触发器信息的系统表triggers。

USE information_schema;

Select * from triggers \G  查询系统表triggers中的所有记录

SELECT * FORM triggers WHERE  TRIGGER_NAME=’tri_diarytime2’  \G  查询具体触发器对象。

 

9.     表查询数据记录

注:在具体使用关键字IN时,查询的集合中如果存在NULL,则不会影响查询;如果使用关键字NOT IN,查询的集合中如果存在NULL,则不会有任何的查询结果。

 

SELECT ename FROM  t_employee  WHERE empno  IN (1,2,3,4,NULL);  查询有结果集

 

SELECT ename FROM  t_employee  WHERE empno  NOT  IN (1,2,3,4,NULL);没有查询结果集。

 

LIKE 关键字支持的通配符如下:

l  “_”通配符,该通配符值能匹配但个字符。

l  “%”通配符,该通配符值可以匹配任意长度的字符串,即可以是0个字符,1个字符,也可以很多个字符。

LIKEA%  和 LIKE a%   查询结果是一样的,MySQL软件不仅对于关键字不区分大小写,对于字段数据记录也不区分大小写。

对于LIKE关键字,如果匹配“%%”则表示查询所有数据记录。

 

排序数据记录查询

MySQL软件中关键字ORDER BY 默认的排序顺序为升序。

注:在MySQL软件中,如果字段的值为空值(NULL),则该值为最小值,因此在降序排序中将最后显示(即最后一行);在升序排序中则将最先显示(即第一行)。

 

多字段排序

具体运行过程中,首先按照第一个字段进行排序,如果遇到值相同的字段则会按照第二个字段进行排序,依次进行类推。

 

限制数据记录查询数量

SELECT field1  field2 fieldn   FROM table_name WHERE  CONDITION  LIMIT OFFSET_START, ROW_COUNT

关键字LIMIT来限制数据查询结果数量,其中参数OFFSET_START表示数据记录的起始偏移量,参数ROW_COUNT表示显示的行数。

对于MySQL软件提供的关键字LIMIT,如果不指定初始位置,默认值为0,表示从第一条记录开始显示。

 

 

统计函数和分组数据记录查询

l  COUNT(*)使用方式:对表中记录统计,不管表字段中包含的是NULL值还是非NULL值。

l  COUNT(field)使用方式:指定字段的记录进行统计,统计时忽略NULL值,但不忽略值为0的数据记录。

l  AVG(field)使用方式:平均值计算,忽略NULL值,但是没有忽略0数据记录。

l  SUM(field)使用方式:计算指定字段值之和,忽略NULL值,不忽略值为0的记录。

l  MAX(field)、MIN(field):忽略NULL值,不忽略值为0的记录。

注:MySQL中统计函数,如果所操作的表中没有任何数据记录,则COUNT()函数会返回数据0,而AVG()、SUM()、MAX()、MIN()函数则会返回NULL。

在具体进行分组查询时,分组所依据的字段上的值一定要具有重复值,否则将没有任何实际意义。

 

分组数据查询----实现统计功能分组查询

MySQL软件如果只实现简单的分组查询,是没有任何实际意义的。因为关键字GROUP BY单独使用时,默认查询出每个分组中随机一条记录,具有很大的不确定性。。分组关键字建议与统计函数一起使用。

想显示分组中的字段,可以通过函数GROUP_CONCAT()来实现。

SELECT GROUP_CONCAT(field)

 FROM  table_name 

      WHERE  CONDITION

      GROUP  BY field

 

分组数据查询------实现HAVING字句限定分组查询

 

SELECT function(field)

 FROM  table_name 

      WHERE  CONDITION

      GROUP  BY field1,field2,……..fieldn

      HAVING  CONDITION;  ----- (AVG(sal)>2000)

 

多表数据记录查询

l  UNION :查询结果集直接合并,并去掉重复数据记录。

l  UNION ALL :查询结果集直接合并,没有去掉重复数据记录。

为什么使用子查询

例如:SELECT * FROM t_dept t, t_emp e WHERE t.deptno = e.deptno ;

首先会对两个表进行笛卡儿积操作,然后在选取符合匹配条件的数据记录。进行笛卡儿积操作时,会生成连个数据表数据记录数的乘积条数据记录,如果这两张表的数据记录比较大,则在进行笛卡儿积操作时会造成死机。

对于有经验的用户,首先会通过统计函数查看所操作表笛卡儿积后的数据记录数,然后才会进行多表查询。

 

 

因此多表查询一般会经过如下步骤:

ü  通过统计函数(COUNT())查询所关联表笛卡儿积后的数据记录数,具体SQL语句如下:

SELECT COUNT(*) FROM t_dept , t_emp  ;

ü  如果查询到的数据记录数MySQL软件可以接受,然后才进行多表连接查询,否则就应该考虑通过其他方式来实现。

为了解决查询到笛卡儿积后的数据记录数远远大于MySQL软件可接受的范围,MySQL提供了子查询来实现多表查询。

所谓子查询,就是在一个查询中嵌套了其他的若干查询,即在一个SELECT查询语句的WHERE或FROM子句中包含另一个SELECT查询语句。理论上子查询可以出现在查询语句的任意位置,但实际开发中,子查询经常出现在WHERE和FROM子句中。

l  WHERE子句中的子查询:该位置处的子查询一般返回单行单列、多行单列、单行多列数据记录。

l  FROM子句中的子查询:该位置处的子查询一般返回多行多列数据记录,可以当做一张临时表。

注:此处关于笛卡儿积、多表操作等不多介绍了,自己找找相关资料吧。

 

10.             MySQL运算符

l  算术运算符;

加(+)、减(-)、乘(*)、除(/ (DIV))、除(% (MOD));

注:所有的算术运算符都可以同时运算多个操作数,但是除运算符(/和DIV)和求模运算符(%和MOD)的操作数最好是两个。在MySQL中对于除和模操作,如果除数为0将是非法运算,返回结果为NULL。·

l  比较运算符;

1.       等于:=(< = >):判断数值、字符串和表达式等是否相等。如果相等则返回1;否则返回0。依据字符的ASCII码来进行判断。= 不能操作NULL值,< = > 可以操作NULL。  SELECT  NULL < = > NULL , NULL = NULL ; 结果返回 1 、NULL。

2.       不等于:!=(<>):判断不相等,如果不相等则返回1,否则返回0。这两个比较运算符不能操作NULL(空值)。

3.       “>”、“>=”、“<”、“<=”比较运算符主要判断数值、字符串和表达式等的相关比较,如果表达式成立则返回1,否则将返回0。不能操作NULL。

4.       实现特殊功能比较运算符:MySQL支持的模式字符

^ :匹配字符串的开始部分。

$ :匹配字符串的结束部分。

. :匹配字符串中的任意一个字符。

* :匹配字符,包含0个和1个。

+ :匹配字符,包含1个。

[字符集合] :匹配字符集合中的任意一个字符。

[^字符集合] :匹配字符集合外的任意一个字符。

字符串{N} :字符串出现N次。

字符串{M,N}:字符串出现至少M次,最多N次。

l  逻辑运算符;

AND(&&):与;

OR(||):或;

NOT(!):非;

XOR:亦或;

l  位运算符;

&:按位与;

|:按位或;

~:按位取反;

^:按位亦或;

<<:按位左移;

>>:按位右移;

11.             MySQL常用函数

l  字符串函数:处理字符串;

l  数值函数:处理数字;

l  日期函数:处理日期和时间;

EXTRACT();获取指定值的函数:EXTRACT(type  FROM date)

SELECT NOW() 当前日期和时间,

EXTRACT(YEAR  FROM NOW()) 年,

EXTRACT(MONTH  FROM NOW()) 月,

EXTRACT(DAY  FROM NOW()) 日,

EXTRACT(HOUR  FORM NOW())小时 ,

EXTRACT(MINUTE  FROM NOW()) 分,

EXTRACT(SECOND  FROM NOW())秒 ;

l  系统信息函数:获取MySQL软件的系统信息;

SELECT  VERSION() 版本号,  DATABASE() 数据库名,  USER () 用户名;

 

注:此章节函数很多,就不一一列举说明了,也不难自己遇到了查下资料就好了。

 

12.             存储过程和函数的操作

存储过程和函数可以简单的理解为一条或多条SQL语句的集合,查看帮助文档可以发现,存储过程和函数就是事件经过编译并存储在数据库中的一段SQL语句集合。

存储过程和函数的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。而存储过程和函数的执行,则需要手工调用存储过程和函数的名字并需要制定相应的参数。

存储过程和函数的区别:函数必须有返回值,而存储过程则没有。存储过程的参数类型远远多于函数参数类型。

 

 

存储过程和函数优点:

l  允许标准组件式编程,提高了SQL语句的重用性、共享性和可移植性。

l  能够实现较快的执行速度,能够减少网络流量。

l  可以被作为一种安全机制来利用。

缺陷:

l  编写比单句SQL语句复杂,需要用户具有更高的技能和更丰富的经验。

l  需要创建这些数据库对象的权限。

 

创建存储过程和函数

l  存储过程:CREATE  PROCEDURE procedure_name ([procedure_paramter[,…..]])

[characteristic…]  routine_body

l  函数:CREATE  FUNCTION function_name ([function_paramter[,…..]])

[characteristic…]  routine_body

 

Characteristic 存储过程或函数的特性,routine_body参数表示存储过程或函数的SQL语句代码,可以用BEGIN…END来标志SQL语句的开始和结束。

 

创建存储过程示例:

DELIMITER $$

CREATE PROCEDURE   proce_employee_sal()

COMMENT ‘查询所有雇员的工资’

BEGIN

SELECT  sal

FROM  t_employee;

END $$

DELIMITER ;

 

创建函数示例:

DELIMITER $$

CREATE  FUNCTION   func_employee_sal(empnoINT(11))

RETURNS DOUBLE(10,2)

COMMENT ‘查询所有雇员的工资’

BEGIN

         RETURN (SELECT  sal

FROM  t_employee

WHEREt_employee.empno=empno);

END $$

DELIMITER ;

 

注:关于存储过程和函数的表达式在这里就不介绍了。

 

使用光标(游标)

 MySQL软件的查询语句可以返回多条记录结果,那么在表达式中如何遍历这些记录结果呢?MySQL软件提供了光标(游标)来实现。

l  声明光标

DECLARE  cursor_nameCURSOR FOR select_statement  ;

l  打开光标

OPEN cursor_name 

l  使用光标

FETCH cursor_name   INTO  var_name  [,var_name] …

l  关闭光标

CLOSE   cursor_name

 

示例:

1.      声明:DECLARE  cursor_employee  CURSOR  FOR  SELECT sal  FROM  t_employee;

2.      打开:OPEN  cursor_employee ;

3.      执行:FETCH  cursor_employee  INTO  employee_sal  ;

4.      关闭:CLOSE  cursor_employee ;

 

查询存储过程和函数(三种方式)

l  存储过程状态信息:SHOW  PROCEDURE STATUS  [ LIKE ‘proce_employee_sal]  \G

函数状态信息:SHOW  FUNCTION  STATUS [ LIKE ‘proce_employee_sal]  \G

l  查看系统表information_schema.routines  详细信息

USE information_schema ;

SELECT  * FROM  routines \G

SELECT  * FROM ROUTINES  WHERE  SPECIFIC_NAME = ‘proce_employee_sal ’ \G

l  SHOW  CREATE  PROCEDURE 查看定义信息

存储过程:SHOW  CREATE  PROCEDURE proce_name \G

函数:SHOW  CREATE  FUNCTION func_name \G

修改

ALTER关键字

删除

  DROP关键字

来自自己的qq空间,转到CSDN

MySQL学习总结_第1张图片

你可能感兴趣的:(mysql)