MySQL社区

标题: MySQL数据库应用从入门到精通 - 中铁出版社(转载) [打印本页]

作者: loveme    时间: 2012-12-12 11:22
标题: MySQL数据库应用从入门到精通 - 中铁出版社(转载)
内容简介:
      
        本书从数据库的基础、SQL语句开发、数据库管理和维护3个方面对MySQL进行了详细的介绍,其中每一部分都独立成篇。本书内容实用,覆盖广泛,讲解由浅入深、循序渐进,适合于各个层次的读者。
本书共分为3篇。其中第一篇为MySQL数据库基础篇,内容包括数据库涉及到的基本概念、MySQL数据库的安装与配置。第二篇为标准SQL语句编程和应用篇,内容包括操作数据库对象、操作表对象、操作索引对象、操作视图对象、操作触发器对象和操作数据。第三篇为MySQL数据库管理篇,内容包括MySQL数据库的用户管理和权限管理、MySQL数据库的日志管理、MySQL数据库的性能优化和PowerDesigner数据库设计软件。
本书注重理论与实际开发相结合,书中的每个技术点都配备了具体的实例,适合所有的MySQL数据库初学者快速入门、同时也适合MySQL数据库管理员和想全面学习MySQL数据库技术的人员。

mysql.zip (3.18 MB, 下载次数: 7681)

作者: loveme    时间: 2012-12-12 11:23
目      录
第一篇  MySQL数据库基础篇
第1章  数据库概述
1.1  关于数据库的基本概念
1.1.1  数据管理技术的发展阶段
1.1.2  数据库系统阶段涉及到概念
1.1.3  数据库技术经历的阶段
1.1.4  数据库管理系统提供的功能
1.1.5  什么是SQL
1.2  MySQL数据库管理系统
1.2.1  MySQL概述
1.2.2  常见数据库管理系统
1.2.3  为什么要使用MySQL数据库
1.3  小结
第2章  MySQL安装和配置
2.1  下载和安装MySQL软件
2.1.1  基于客户端—服务器(C/S)的数据库管理系统
2.1.2  MySQL的各种版本
2.1.3  下载MySQL软件
2.1.4  安装MySOL软件
2.1.5  图形化配置数据库服务器MySOL
2.1.6  手工配置数据库服务器MySOL
2.1.7  卸载MySOL软件
2.2  关于MySQL软件的常用操作
2.2.1  通过图形界面启动和关闭MySQL服务
2.2.2  通过DOS窗口启动和关闭MySQL服务
2.3  MySQL官方客户端软件
2.3.1  命令行客户端软件——MySQL Command Line Client
2.3.2  通过DOS窗口连接MySQL软件
2.3.3  下载MySQL-Workbench客户端软件
2.3.4  安装MySQL-Workbench客户端软件
2.3.5  使用MySQL-Workbench客户端软件
2.4  MySQL常用图形化管理软件——SQLyog软件
2.4.1  下载SQLyog软件
2.4.2  安装SQLyog客户端软件
2.4.3  通过SQLyog客户端软件登录MySQL软件
2.5  使用免安装的MySQL软件
2.6  小结
第二篇  标准SQL语言编程和应用篇
第3章  操作MySQL数据库
3.1  数据库和数据库对象
3.2  数据库相关操作——创建数据库
3.2.1  创建数据库的语法形式
3.2.2  通过工具来创建数据库
3.3  数据库相关操作——查看和选择数据库
3.3.1  查看数据库
3.3.2  选择数据库
3.4  数据库相关操作——删除数据库
3.4.1  删除数据库的语法形式
3.4.2  通过工具来删除数据库
3.5  小结
第4章  MySQL数据库中存储引擎和数据类型
4.1  认识存储引擎
4.1.1  MySQL 5.5所支持的存储引擎
4.1.2  操作默认存储引擎
4.1.3  选择存储引擎
4.2  数据类型
4.2.1  整数类型
4.2.2  浮点数类型、定点数类型和位类型
4.2.3  日期和时间类型
4.2.4  字符串类型
4.3  小结
第5章  操作表
5.1  表的基本概念
5.2  创建表
5.2.1  创建表的语法形式
5.2.2  通过SQLyog客户端软件来创建表
5.3  查看表结构
5.3.1  DESCRIBE语句查看表定义
5.3.2  SHOW CREATE TABLE语句查看表详细定义
5.3.3  通过SQLyog软件来查看表信息
5.4  删除表
5.4.1  删除表的语法形式
5.4.2  通过SQLyog软件删除表
5.5  修改表
5.5.1  修改表名
5.5.2  增加字段
5.5.3  删除字段
5.5.4  修改字段
5.6  通过SQLyog客户端软件修改表
5.6.1  修改表名
5.6.2  增加字段
5.6.3  删除字段
5.6.4  修改字段
5.7  操作表的约束
5.7.1  MySQL支持的完整性约束
5.7.2  设置非空约束(NOT NULL,NK)
5.7.3  设置字段的默认值(DEFAULT)
5.7.4  设置唯一约束(UNIQUE,UK)
5.7.5  设置主键约束(PRIMARY KEY,PK)
5.7.6  设置字段值自动增加(AUTO_INCREMENT)
5.7.7  设置外键约束(FOREIGN KEY,FK)
5.8  小结
第6章  操作索引
6.1  为什么使用索引
6.2  创建和查看索引
6.2.1  创建和查看普通索引
6.2.2  创建和查看唯一索引
6.2.3  创建和查看全文索引
6.2.4  创建和查看多列索引
6.2.5  通过SQLyog客户端软件来创建索引
6.3  删除索引
6.3.1  删除索引的语法形式
6.3.2  通过SQLyog软件删除索引
6.4  小结
第7章  操作视图
7.1  为什么使用视图
7.2  创建视图
7.2.1  创建视图的语法形式
7.2.2  通过SQLyog软件创建视图
7.2.3  创建各种视图
7.3  查看视图
7.3.1  SHOW TABLES语句查看视图名
7.3.2  SHOW TABLE STATUS语句查看视图详细信息
7.3.3  SHOW CREATE VIEW语句查看视图定义信息
7.3.4  DESCRIBE|DESC语句查看视图设计信息
7.3.5  通过系统表查看视图信息
7.3.6  SQLyog查看视图信息
7.4  删除视图
7.4.1  删除视图的语法形式
7.4.2  通过SQLyog软件删除视图
7.5  修改视图
7.5.1  CREATE OR REPLACE VIEW语句修改视图
7.5.2  ALTER语句修改视图
7.5.3  通过SQLyog软件修改视图
7.6  利用视图操作基本表
7.6.1  检索(查询)数据
7.6.2  利用视图操作基本表数据
7.7  小结
第8章  操作触发器
8.1  为什么使用触发器
8.2  创建触发器
8.2.1  创建有一条执行语句的触发器
8.2.2  创建包含多条执行语句的触发器
4.2.2  通过SQLyog客户端软件来创建触发器
8.3  查看触发器
8.3.1  通过SHOW TRIGGERS语句查看触发器
8.3.2  通过查看系统表triggers实现查看触发器
8.3.3  通过SQLyog客户端软件来查看触发器
8.4  删除触发器
8.4.1  通过DROP TRIGGER语句删除触发器
8.4.2  通过工具来删除触发器
8.5  小结
第9章  操作数据
9.1  插入数据记录
9.1.1  插入完整数据记录
9.2.2  插入数据记录一部分
9.2.3  插入多条数据记录
9.1.4  插入查询结果
9.1.5  通过工具来插入数据记录
9.2  更新数据记录
9.2.1  更新特定数据记录
9.2.2  更新所有数据记录
9.2.3  通过工具来更新数据记录
9.3  删除数据记录
9.3.1  删除特定数据记录
9.3.2  删除所有数据记录
9.2.3  通过工具来删除数据记录
9.4  小结
第10章  单表查询数据记录
10.1  简单数据记录查询
10.1.1  简单数据查询
10.1.2  避免重复数据查询——DISTINCT
10.1.3  实现数学四则运算数据查询
10.1.4  设置显示格式数据查询
10.2  条件数据记录查询
10.2.1  带有关系运算符和逻辑运算符的条件数据查询
10.2.2  带BETWEEN AND关键字的范围查询
10.2.3  带IS NULL关键字的空值查询
10.2.4  带IN关键字的集合查询
10.2.5  带LIKE关键字的模糊查询
10.3  排序数据记录查询
10.3.1  按照单字段排序
10.3.2  按照多字段排序
10.4  限制数据记录查询数量
10.4.1  不指定初始位置
10.4.2  指定初始位置
10.5  统计函数和分组数据记录查询
10.5.1  MySQL支持的统计函数
10.5.2  关于统计函数注意点
10.5.3  分组数据查询——简单分组查询
10.5.4  分组数据查询——实现统计功能分组查询
10.5.5  分组数据查询——实现多个字段分组查询
10.5.6  分组数据查询——实现HAVING子句限定分组查询
10.6  小结
第11章  多表数据记录查询
11.1  关系数据操作
11.1.1  并(UNION)
11.1.2  笛卡尔积(CARTESIAN PRODUCT)
11.1.3  内连接(INNER JOIN)
11.1.4  外连接(OUTER JOIN)
11.2  内连接查询
11.2.1  自连接
11.2.2  等值连接
11.2.3  不等连接
11.3  外连接查询
11.3.1  左外连接
11.3.2  右外连接
11.4  合并查询数据记录
11.5  子查询
11.5.1  为什么使用子查询
11.5.2  返回结果为单行单列和单行多列子查询
11.5.3  返回结果为多行单列子查询
11.5.4  返回结果为多行多列子查询
11.6  小结
第12章  使用MySQL运算符
12.1  为什么要使用运算符
12.2  使用算术运算符
12.3  使用比较运算符
12.3.1  常用比较运算符
12.3.2  实现特殊功能比较运算符
12.4  使用逻辑运算符
12.5  使用位运算符
12.6  小结
第13章  使用MySQL常用函数
13.1  使用字符串函数
13.1.1  合并字符串函数CONCAT()和CONCAT_WS()
13.1.2  比较字符串大小函数STRCMP()
13.1.3  获取字符串长度函数LENGTH()和字符数函数CHAR_LENGTH()
13.1.4  实现字母大小写转换函数UPPER()和字符数函数LOWER()
13.1.5  查找字符串
13.1.6  从现有字符串中截取子字符串
13.1.7  去除字符串的首尾空格
13.1.8  替换字符串
13.2  使用数值函数
13.2.1  获取随机数
13.2.2  获取整数的函数
13.2.3  截取数值函数
13.2.4  四舍五入函数
13.3  使用日期和时间函数
13.3.1  获取当前日期和时间的函数
13.3.2  通过各种方式显示日期和时间
13.3.3  获取日期和时间各部分值
13.3.4  计算日期和时间的函数
13.4  使用系统信息函数
13.4.1  获取MySQL系统信息
13.4.2  获取AUTO_INCREMENT约束的最后ID值
13.4.3  其他函数
13.5  小结
第14章  操作存储过程和函数
14.1  为什么使用存储过程和函数
14.2  创建储存过程和函数
14.2.1  创建储存过程语法形式
14.2.2  创建函数语法形式
14.2.3  创建简单的储存过程和函数
14.2.4  通过工具来创建存储过程和函数
14.3  关于存储过程和函数的表达式
14.3.1  操作变量
14.3.2  操作条件
14.3.3  使用光标
14.3.4  使用流程控制
14.4  查看储存过程和函数
14.4.1  通过SHOW PROCEDURE STATUS语句查看储存过程状态信息
14.4.2  通过SHOW FUNCTION STATUS语句查看函数状态信息
14.4.3  通过查看系统表information_schema.routines实现查看储存过程和函数的信息
14.4.4  通过SHOW CREATE PROCEDURE语句查看储存过程定义信息
14.4.5  通过SHOW CREATE FUNCTION语句查看函数定义信息
14.4.6  通过工具来查看储存过程和函数
14.5  修改存储过程和函数
14.5.1  修改存储过程
14.5.2  修改函数
14.6  删除储存过程和函数
14.6.1  通过DROP语句删除储存过程
14.6.2  通过DROP FUNCTION语句删除函数
14.6.3  通过工具来删除储存过程和函数
14.7  小结
第三篇  MySQL数据库管理篇
第15章  MySQL安全性机制
15.1  MySQL软件所提供的权限
15.1.1  系统表mysql.user
15.1.2  系统表mysql.db和mysql.host
15.1.3  其他权限表
15.2  MySQL软件所提供的用户机制
15.2.1  登录和退出MySQL软件的完整命令
15.2.2  创建普通用户账户
15.2.3  利用拥有超级权限用户root修改用户账户密码
15.2.4  利用拥有超级权限用户root修改普通用户账户密码
15.2.5  删除普通用户账户
15.3  权限管理
15.3.1  对用户进行授权
15.3.2  查看用户所拥有权限
15.3.3  收回用户所拥有权限
15.4  小结
第16章  MySQL日志管理
16.1  MySQL软件所支持的日志
16.2  操作二进制日志
16.2.1  启动二进制日志
16.2.2  查看二进制日志
16.2.3  停止二进制日志
16.2.4  删除二进制日志
16.3  操作错误日志
16.3.1  启动错误日志
16.3.2  查看错误日志
16.3.3  删除错误日志
16.4  操作查询日志
16.4.1  启动查询日志
16.4.2  查看查询日志
16.4.3  删除查询日志
16.5  小结
第17章  MySQL数据库维护和性能提高
17.1  MySQL数据库维护
17.1.1  通过复制数据文件实现数据备份
17.1.2  通过命令mysqldump实现数据备份
17.1.3  通过复制数据文件实现数据还原
17.1.4  通过命令mysql实现数据还原
17.1.5  实现数据库中表导出成文本文件
17.1.6  实现文本文件导入到数据库表
17.1.7  数据库迁移
17.2  通过SQLyog客户端软件实现数据库维护
17.2.1  通过SQLyog客户端软件进行备份操作
17.2.2  通过SQLyog客户端软件进行还原操作
17.2.3  通过SQLyog客户端软件进行导出操作
17.2.4  通过SQLyog客户端软件进行导入操作
17.3  MySQL数据库性能优化
17.4  小结
第18章  使用PowerDesigner进行数据库设计
18.1  下载和安装PowerDesigner软件
18.1.1  下载PowerDesigner软件
18.1.2  安装PowerDesiger软件
18.2  使用PowerDesigner软件进行数据库设计
18.2.1  利用PowerDesigner软件设计概念数据模型
18.2.2  利用PowerDesigner软件设计物理数据模型
18.2.3  利用PowerDesigner软件创建数据库脚本
18.3  小结


作者: loveme    时间: 2012-12-12 11:25
第6章  操作索引
在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而本章所要介绍的数据库对象索引则是一种有效组合数据的方式。通过索引对象,可以快速查询到数据库对象表中的特定记录,是一种提高性能的最常用对象。
一个索引会包含表中按照一定顺序排序的一列或多列字段。索引的操作包含创建索引、修改索引和删除索引,这些操作是MySQL软件中最基本、最重要的操作。
通过本节的学习,可以掌握在数据库中操作索引,内容包含:
        索引的相关概念;
        索引的基本操作:创建、查看和删除。

作者: loveme    时间: 2012-12-12 13:23
6.1  为什么使用索引
数据库对象索引其实与书的目录非常类似,主要是为了提高从表中检索数据的速度。由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构(B-树或哈希表)中,通过MySQL可以快速有效地查找与键值相关联的字段。根据索引的存储类型,可以将索引分为B型树索引(BTREE)和哈希索引(HASH)。
注意:InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型索引,默认为前者索引。
数据库对象索引的出现,除了可以提供数据库管理系统的查找速度,而且还可以保证字段的唯一性,从而实现数据库表的完整性。查看帮助文档,可以发现MySQL支持6种索引,它们分别为普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。
索引的创建有利有弊,创建索引可以提高查询速度,但过多的创建索引则会占据许多的磁盘空间。因此在创建索引之前,必须权衡利弊。
一般下面情况下适合创建索引:
        经常被查询的字段,即在WHERE子句中出现的字段。
        在分组的字段,即在GROUP BY子句中出现的字段。
        存在依赖关系的子表和父表之间的联合查询,即主键或外键字段。
        设置唯一完整性约束的字段。
一般下面情况下不适合创建索引:
        在查询中很少被使用的字段。
        拥有许多重复值的字段。

作者: loveme    时间: 2012-12-12 13:26
6.2  创建和查看索引
索引的操作包括创建索引、查看索引和删除索引。所谓创建索引,就是在表的一个字段或多个字段上建立索引,本节将详细介绍如何创建索引。在MySQL中,可以通过三种方式来创建索引,分别为创建表时创建索引、在已经存在的表上创建索引和通过SQL语句ALTER TABLE来创建索引。
6.2.1  创建和查看普通索引
所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。
1、创建表时创建普通索引
查看帮助文档发现,在MySQL数据库管理系统中创建普通索引通过SQL语句INDEX来实现,其语法形式如下:
CREATE TABLE table_name (
        属性名 数据类型,
        属性名 数据类型,
        ……
        属性名 数据类型,
        INDEX|KEY 【索引名】(属性名1 【(长度)】 【ASC|DESC】)

);
上述语句中INDEX或KEY参数用来指定字段为索引,“索引名”参数用来指定所创建索引名,“属性名1”参数用来指定索引所关联的字段的名称,“长度”参数用来指定索引的长度,“ASC”参数用来指定为升序排序,“DESC”参数用来指定为降序排序。
注意:在创建索引时,可以指定索引的长度。这是因为不同存储引擎定义了表的最大索引数和最大索引长度。
MySQL所支持的存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。个别存储引擎会支持更多的索引数和更大的索引长度。
【实例6-1】执行SQL语句INDEX,在数据库company中,于表t_dept的deptno字段上创建索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,具体SQL语句如下:
USE company;
(2)执行SQL语句INDEX,在创建表t_dept时,于字段deptno上创建索引,具体SQL语句如下:
CREATE TABLE t_dept(
        deptno INT,
        dname VARCHAR(20),
        loc VARCHAR(40),
        INDEX index_deptno(deptno)
);
【代码说明】在上述语句中,创建表t_dept的同时设置了关于字段deptno的索引对象index_deptno。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_deptno索引,其所关联的字段为deptno。
(4)为了校验数据库表t_dept中索引是否被使用,执行SQL语句EXPLAIN,具体SQL语句内容如下:
EXPLAIN
        SELECT * FROM t_dept WHERE deptno=1;
【代码说明】在上述语句中,通过关键字EXPLAIN来校验关于字段deptno的索引对象是否被启用。
执行结果显示,由于possible_keys和key字段处的值都为所创建的索引名index_deptno,
则说明该索引已经存在,而且已经开始启用。
作者: loveme    时间: 2012-12-12 13:28
2、在已经存在的表上创建普通索引
查看帮助文档发现,在MySQL数据库管理系统中创建普通索引除了通过SQL语句INDEX来实现外,还可以通过SQL语句CREATE INDEX来实现,其语法形式如下:
CREATE INDEX 索引名
        ON 表名(属性名 【(长度)】 【ASC|DESC】)
上述语句中CREATE INDEX关键字表示用来创建索引,“索引名”参数用来指定所创建索引名,ON关键字用来指定所要创建索引的表名称。至于其他内容跟“创建表时创建普通索引”的语法一致。
【实例6-2】执行SQL语句INDEX,在数据库company中,于表t_dept的deptno字段上创建索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;

DESC t_dept;
(2)执行SQL语句CREATE INDEX,于表t_dept中创建关联字段deptno的普通索引对象index_deptno,具体SQL语句如下:
CREATE INDEX index_deptno
        ON t_dept (deptno)
【代码说明】上述语句中创建了关联表t_dept中字段deptno的索引index_deptno。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_deptno索引,其所关联的字段为deptno。
3、通过SQL语句ALTER TABLE创建普通索引
除了上述两种方式来创建普通索引外,在MySQL数据库管理系统中创建普通索引还可以通过SQL语句ALTER来实现,其语法形式如下:
ALTER TABLE table_name
        ADD INDEX|KEY 索引名(属性名 【(长度)】 【ASC|DESC】)
上述语句中INDEX或KEY关键字用来指定创建普通索引,“索引名”参数用来指定所创建索引名,“属性名”参数用来指定索引所关联的字段的名称,“长度”参数用来指定索引的长度,“ASC”参数用来指定为升序排序,“DESC”参数用来指定为降序排序。
【实例6-3】执行SQL语句ALTER TABLE,在数据库company中,于表t_dept的deptno字段上创建普通索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;

DESC t_dept;
(2)执行SQL语句ALTER TABLE,于表t_dept中创建关联字段deptno的普通索引对象index_deptno,具体SQL语句如下:
ALTER TABLE t_dept
        ADD INDEX index_deptno(deptno);
【代码说明】上述语句中创建了关联表t_dept中字段deptno的普通索引index_deptno。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_deptno索引,其所关联的字段为deptno。
作者: loveme    时间: 2012-12-12 13:29
6.2.2  创建和查看唯一索引
所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速的查询某条记录。在MySQL中,根据创建索引方式,可以分为自动索引和手动索引。
所谓自动索引,是指在数据库表里设置完整性约束时,该表会被系统自动创建索引。所谓手动索引,是指手动在表上创建索引。当设置表中的某个字段设置主键或唯一完整性约束时,系统就会自动创建关联该字段的唯一索引。
1、创建表时创建唯一索引
查看帮助文档发现,在MySQL数据库管理系统中创建唯一索引通过SQL语句UNIQUE INDEX来实现,其语法形式如下:
CREATE TABLE table_name (
        属性名 数据类型,
        属性名 数据类型,
        ……
        属性名 数据类型,
        UNIQUE INDEX|KEY 【索引名】(属性名1 【(长度)】 【ASC|DESC】)
);
上述语句中比创建普通索引多了一个SQL关键字UNIQUE,其中UNIQUE INDEX或UNIQUE KEY表示创建唯一索引。
【实例6-4】执行SQL语句UNIQUE INDEX,在数据库company中,于表t_dept的deptno字段上创建唯一索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,具体SQL语句如下:
USE company;
(2)执行SQL语句UNIQUE INDEX,在创建表t_dept时,于字段deptno上创建唯一索引,具体SQL语句如下:
CREATE TABLE t_dept(
        deptno INT UNIQUE,
        dname VARCHAR(20),
        loc VARCHAR(40),
        UNIQUE INDEX index_deptno(deptno)
);
【代码说明】在上述语句中,创建表t_dept的同时设置了关于字段deptno的唯一索引对象index_deptno。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_deptno唯一索引,其所关联的字段为deptno。
(4)为了校验数据库表t_dept中索引是否被使用,执行SQL语句EXPLAIN,具体SQL语句内容如下:
EXPLAIN
        SELECT * FROM t_dept WHERE deptno=10 \G
执行结果显示,possible_keys和key字段处的值都为所创建的索引名index_deptno,则说明该索引已经存在,而且已经开始启用。
作者: loveme    时间: 2012-12-12 13:30
2、在已经存在的表上创建唯一索引
查看帮助文档发现,在MySQL数据库管理系统中创建唯一索引除了通过SQL语句UNIQUE INDEX来实现外,还可以通过SQL语句CREATE UNIQUE INDEX来实现,其语法形式如下:
CREATE UNIQUE INDEX 索引名
        ON 表名(属性名 【(长度)】 【ASC|DESC】)
上述语句中CREATE UNIQUE INDEX关键字表示用来创建唯一索引。
【实例6-5】执行SQL语句INDEX,在数据库company中已经创建好的表t_dept上,创建关联字段deptno的唯一索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;

DESC t_dept;
(2)执行SQL语句CREATE UNIQUE INDEX,于表t_dept中创建关联字段deptno的唯一索引对象index_deptno,具体SQL语句如下:
CREATE UNIQUE INDEX index_deptno
        ON t_dept (deptno);
【代码说明】上述语句中创建了关联表t_dept中字段deptno的唯一索引index_deptno。
【运行效果】执行上面的SQL语句
(3)为了校验数据库表t_dept中唯一索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_deptno唯一索引,其所关联的字段为deptno。
作者: loveme    时间: 2012-12-12 13:31
3、通过SQL语句ALTER TABLE创建唯一索引
除了上述两种方式来创建唯一索引外,在MySQL数据库管理系统中创建唯一索引还可以通过SQL语句ALTER来实现,其语法形式如下:
ALTER TABLE table_name
        ADD  UNIQUE INDEX|KEY 索引名(属性名 【(长度)】 【ASC|DESC】)
上述语句中UNIQUE INDEX或KEY关键字用来指定创建唯一索引,“索引名”参数用来指定所创建索引名,“属性名”参数用来指定索引所关联的字段的名称,“长度”参数用来指定索引的长度,“ASC”参数用来指定为升序排序,“DESC”参数用来指定为降序排序。
【实例6-6】执行SQL语句ALTER TABLE,在数据库company中,于表t_dept的deptno字段上创建唯一索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;

DESC t_dept;
(2)执行SQL语句ALTER TABLE,于表t_dept中创建关联字段deptno的唯一索引对象index_deptno,具体SQL语句如下:
ALTER TABLE t_dept
        ADD UNIQUE INDEX index_deptno(deptno);
【代码说明】上述语句中创建了关联表t_dept中字段deptno的唯一索引index_deptno。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
【运行效果】执行上面的SQL语句
执行结果显示,已经于数据库表t_dept上创建了一个名为index_deptno索引,其所关联的字段为deptno。
作者: loveme    时间: 2012-12-12 13:33
6.2.3  创建和查看全文索引
全文索引主要关联在数据类型为CHAR、VARCHAR和TEXT的字段上,以便于能够更加快速的查询数据量较大的字符串类型的字段。
MySQL从3.23.23版本开始支持全文索引,只能在存储引擎为MyISAM的数据库表上创建全文索引。在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,则以区分大小写的搜索方式执行。
1、创建表时创建全文索引
查看帮助文档发现,在MySQL数据库管理系统中创建全文索引通过SQL语句FULLTEXT INDEX来实现,其语法形式如下:
CREATE TABLE table_name (
        属性名 数据类型,
        属性名 数据类型,
        ……
        属性名 数据类型,
        FULLTEXT INDEX|KEY 【索引名】(属性名1 【(长度)】 【ASC|DESC】)
);
上述语句中比创建普通索引多了一个SQL关键字FULLTEXT,其中FULLTEXT INDEX或FULLTEXT KEY表示创建全文索引。
【实例6-7】执行SQL语句FULLTEXT INDEX,在数据库company中,于表t_dept的loc字段上创建全文索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,具体SQL语句如下:
USE company;
(2)执行SQL语句FULLTEXT INDEX,在创建表t_dept时,于字段loc上创建全文索引,具体SQL语句如下:
CREATE TABLE t_dept(
        deptno INT,
        dname VARCHAR(20),
        loc VARCHAR(40),
        FULLTEXT INDEX index_loc(loc)
) ENGINE=MyISAM;
【代码说明】上述语句中创建了关联表t_dept中字段loc的全文索引index_loc。
(3)为了校验数据库表t_dept中全文索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_loc全文索引,其所关联的字段为loc。
(4)为了校验数据库表t_dept中索引是否被使用,执行SQL语句EXPLAIN,具体SQL语句内容如下:
EXPLAIN
        SELECT * FROM t_dept WHERE dname=’cjgong’;
执行结果显示,possible_keys和key字段处的值都为所创建的索引名index_dname_loc,则说明该索引已经存在,而且已经开始启用。
作者: loveme    时间: 2012-12-12 13:35
2、在已经存在的表上创建全文索引
查看帮助文档发现,在MySQL数据库管理系统中创建全文索引除了通过SQL语句FULLTEXT INDEX来实现外,还可以通过SQL语句CREATE FULLTEXT INDEX来实现,其语法形式如下:
CREATE FULLTEXT INDEX 索引名
        ON 表名(属性名 【(长度)】 【ASC|DESC】)
上述语句中CREATE FULLTEXT INDEX关键字表示用来创建全文索引。
【实例6-8】执行SQL语句INDEX,在数据库company中已经创建好的表t_dept上,创建关联字段loc的全文索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;
然后查看已经存在表t_dept的定义信息,具体SQL语句如下:
DESC t_dept;
(2)执行SQL语句CREATE FULLTEXT INDEX,于表t_dept中创建关联字段loc的全文索引对象index_deptno,具体SQL语句如下:
CREATE FULLTEXT INDEX index_loc
        ON t_dept (loc);
【代码说明】上述语句中创建了关联表t_dept中字段loc的全文索引index_loc。
(3)为了校验数据库表t_dept中全文索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_loc全文索引,其所关联的字段为loc。
3、通过SQL语句ALTER TABLE创建唯全文索引
除了上述两种方式来创建全文索引外,在MySQL数据库管理系统中创建全文索引还可以通过SQL语句ALTER来实现,其语法形式如下:
ALTER TABLE table_name
        ADD FULLTEXT INDEX|KEY 索引名(属性名 【(长度)】 【ASC|DESC】)
上述语句中FULLTEXT INDEX或KEY关键字用来指定创建全文索引,“索引名”参数用来指定所创建索引名,“属性名”参数用来指定索引所关联的字段的名称,“长度”参数用来指定索引的长度,“ASC”参数用来指定为升序排序,“DESC”参数用来指定为降序排序。
【实例6-9】执行SQL语句ALTER TABLE,在数据库company中,于表t_dept的loc字段上创建全文索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;

DESC t_dept
(2)执行SQL语句ALTER TABLE,于表t_dept中创建关联字段loc的全文索引对象index_loc,具体SQL语句如下:
ALTER TABLE t_dept
        ADD FULLTEXT INDEX index_loc(loc);
【代码说明】上述语句中创建了关联表t_dept中字段loc的全文索引index_loc。
【运行效果】执行上面的SQL语句,其结果如图6.35所示。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_loc索引,其所关联的字段为loc。
作者: loveme    时间: 2012-12-12 13:37
6.2.4  创建和查看多列索引
所谓多列索引,就是指在创建索引时,所关联的字段不是一个字段,而是多个字段。虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中第一个字段,多列索引才会被使用。
1、创建表时创建多列索引
查看帮助文档发现,在MySQL数据库管理系统中创建全文索引通过SQL语句INDEX来实现,其语法形式如下:
CREATE TABLE table_name (
        属性名 数据类型,
        属性名 数据类型,
        ……
        属性名 数据类型,
        INDEX|KEY  【索引名】  (属性名1 【(长度)】 【ASC|DESC】,
                                                   ……
                                                   属性名n 【(长度)】 【ASC|DESC】)
);
上述语句创建索时,所关联的字段至少大于一个字段。
【实例6-10】执行SQL语句INDEX,在数据库company中,于表t_dept的dname和loc字段上创建多列索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,具体SQL语句如下:
USE company;
(2)执行SQL语句INDEX,在创建表t_dept时,于dname和loc字段上上创建多列索引,具体SQL语句如下:
CREATE TABLE t_dept(
        deptno INT,
        dname VARCHAR(20),
        loc VARCHAR(40),
        KEY index_dname_loc(dname,loc)
);
【代码说明】在上述语句中,创建表t_dept的同时设置了关于字段deptno和loc的多列索引对象index_dname_loc。
(3)为了校验数据库表t_dept中多列索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_dname_loc多列索引,其所关联的字段为dname和loc。
(4)为了校验数据库表t_dept中索引是否被使用,执行SQL语句EXPLAIN,具体SQL语句内容如下:
EXPLAIN
        SELECT * FROM t_dept WHERE dname=’cjgong’;
执行结果显示,possible_keys和key字段处的值都为所创建的索引名index_dname_loc,则说明该索引已经存在,而且已经开始启用。
作者: loveme    时间: 2012-12-12 13:40
2、在已经存在的表上创建多列索引
查看帮助文档发现,在MySQL数据库管理系统中创建全文索引除了可以在创建表时实现外,还可以为已经存在的表设置全文索引,其语法形式如下:
CREATE INDEX 索引名
        ON 表名(属性名 【(长度)】 【ASC|DESC】,
                        ……
                        属性名n 【(长度)】 【ASC|DESC】

上述语句中比创建普通索引多关联了几个字段。
【实例6-11】执行SQL语句CREATE INDEX,在数据库company中,于表t_dept的dname和loc字段上创建多列索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;
然后查看已经存在表t_dept的定义信息,具体SQL语句如下:
DESC t_dept;
2)执行SQL语句CREATE INDEX,于表t_dept中创建关联字段dname和loc的多列索引对象index_dname_loc,具体SQL语句如下:
CREATE INDEX index_dname_loc
        ON t_dept (dname,loc);
上述语句中创建了关联表t_dept中字段dname和loc的多列索引index_dname_loc。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_dname_loc多列索引,其所关联的字段为dname和loc。
作者: loveme    时间: 2012-12-12 13:41
3、通过SQL语句ALTER TABLE创建多列索引
除了上述两种方式来创建多列索引外,在MySQL数据库管理系统中创建多列索引还可以通过SQL语句ALTER来实现,其语法形式如下:
ALTER TABLE table_name
        ADD  INDEX|KEY 索引名(属性名 【(长度)】 【ASC|DESC】,
                                        ……
                                        属性名n 【(长度)】 【ASC|DESC】

上述语句中INDEX或KEY关键字用来指定创建索引,由于所涉及到字段为多个,所以为创建多列索引。
【实例6-12】执行SQL语句ALTER TABLE,在数据库company中,于表t_dept的deptno字段上创建多列索引。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句DESC查看该数据库中已经存在的表t_dept信息,具体SQL语句如下:
USE company;
然后查看已经存在表t_dept的定义信息,具体SQL语句如下:
DESC t_dept;
(2)执行SQL语句CREATE INDEX,于表t_dept中创建关联字段dname和loc的多列索引对象index_dname_loc,具体SQL语句如下:
ALTER TABLE t_dept
        ADD INDEX index_dname_loc(dname,loc);
上述语句中创建了关联表t_dept中字段dname和loc的多列索引index_dname_loc。
【运行效果】执行上面的SQL语句,其结果如图6.47所示。
(3)为了校验数据库表t_dept中索引是否创建成功,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,已经于数据库表t_dept上创建了一个名为index_dname_loc多列索引,其所关联的字段为dname和loc。
作者: loveme    时间: 2012-12-12 13:45
6.2.5  通过SQLyog客户端软件来创建索引
在学习MySQL数据库阶段,可以通过MySQL数据库服务器自带的工具“MySQL Command Line Client”来创建索引,该工具可以帮助大家尽快掌握关于创建索引的语法。但是在数据库开发阶段,用户一般通过客户端软件SQLyog来创建索引。
下面将通过一个具体的实例来说明如何通过MySQL客户端软件SQLyog创建表。
【实例6-13】于数据库company里,为数据库表对象t_dept创建各种类型的索引。具体步骤如下:
(1)首先连接数据库管理系统,然后单击“company>表>t_dept>索引”节点前的加号,进入关于数据库company里表t_dept的索引节点中
(2)在“对象资源管理器”窗口中,右键单击“索引”节点,然后选择“创建索引”命令则会打开“t_dept”窗口。该窗口中主要分成两部分,上面部分为表的详细信息,下面部分可以设置索引对象的信息。
(3)如果想创建普通索引对象index_deptno,。当确认所填写的信息无误后,单击“保存”按钮就会出现确认对话框,在该对话框中单击“确定”按钮就可以实现该索引对象的创建。
(4)然后于“对象资源管理器”窗口中选择“company>表>t_dept>索引”节点,然后单击刷新按钮,则会在“索引”节点显示索引对象index_deptno
(5)如果想创建唯一索引对象index_deptno,。当确认所填写的信息无误后,单击“保存”按钮就会出现确认对话框 在该对话框中单击“确定”按钮就可以实现该索引对象的创建。
(6)然后于“对象资源管理器”窗口中选择“company>表>t_dept>索引”节点,然后单击刷新按钮,则会在“索引”节点显示索引对象index_deptno
(7)如果想创建全文索引对象index_loc。当确认所填写的信息无误后,单击“保存”按钮就会出现确认对话框,在该对话框中单击“确定”按钮就可以实现该索引对象的创建
(8)然后于“对象资源管理器”窗口中选择“company>表>t_dept>索引”节点,然后单击刷新按钮,则会在“索引”节点显示索引对象index_loc
(9)如果想创建多列索引对象index_dname_loc。当确认所填写的信息无误后,单击“保存”按钮就会出现确认对话框,在该对话框中单击“确定”按钮就可以实现该索引对象的创建。
(10)然后于“对象资源管理器”窗口中选择“company>表>t_dept>索引”节点,然后单击刷新按钮,则会在“索引”节点显示索引对象index_dname_loc
通过上述步骤,可以在数据库company里为表对象t_dept创建各种索引对象。对于SQLyog工具,除了可以通过以上步骤(向导方式)创建各种索引外,还可以在“询问”窗口中输入创建索引的SQL语句,然后单击工具栏中的“执行查询”( )按钮则可以实现索引的创建

作者: loveme    时间: 2012-12-12 13:47
6.3  删除索引
索引的操作包括创建索引、查看索引和删除索引。所谓删除索引,就是删除表中已经创建的索引。之所以要删除索引,是由于这些索引会降低表的更新速度,影响数据库的性能,本节将详细介绍如何删除索引。
6.3.1  删除索引的语法形式
查看帮助文档发现,在MySQL数据库管理系统中删除索引通过SQL语DROP IINDEX来实现,其语法形式如下:
DROP INDEX index_name
        ON table_name
上述语句中index_name参数表示所要删除索引名字,table_name参数表示所要删除索引所在的表对象。
【实例6-14】执行SQL语句DROP INDEX,于数据库company里删除表对象t_dept中的索引对象index_dname_loc。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,并通过SQL语句SHOW CREATE TABLE查看该数据库中表t_dept信息,具体SQL语句如下:
USE company;
然后查看已经存在表t_dept的定义信息,具体SQL语句如下:
SHOW CREATE TABLE t_dept \G
(2)为了校验数据库表t_dept中索引是否被使用,执行SQL语句EXPLAIN,具体SQL语句内容如下:
EXPLAIN
        SELECT * FROM t_dept WHERE dname=’cjgong’;
(3)执行SQL语句DROP INDEX,删除索引对象index_dname_loc,具体SQL语句如下:
DROP INDEX index_dname_loc
        ON t_dept;
(4)为了校验数据库company中是否还存在索引对象index_dname_loc,执行SQL语句SHOW CREATE TABLE,具体SQL语句内容如下:
SHOW CREATE TABLE t_dept \G
执行结果显示,t_dept表已经不存在索引对象index_dname_loc。
作者: loveme    时间: 2012-12-12 13:48
6.3.2  通过SQLyog软件删除索引
在客户端软件SQLyog中,不仅可以通过在“询问”窗口中执行DROP INDEX语句来删除索引,而且还可以通过向导来实现,具体步骤如下:
(1)在“对象资源管理器”窗口中,单击“company>表>t_dept>索引”节点前的加号,然后右键单击“index_dname_loc”节点,从弹出的快捷菜单中选择“删除索引”命令
(2)当单击“删除索引”命令时,就会弹出对话框来确定是否删除索引。当单击“是”按钮后,这时“对象资源管理器”窗口里“company>表>t_dept”中的索引节点里就没有任何索引对象
通过上述步骤,就可以成功删除索引对象。

作者: loveme    时间: 2012-12-12 13:49
6.4  小结
本章主要介绍在MySQL软件关于索引的操作,分别从数据库对象索引的基本概念和操作两方面介绍。其中前者主要介绍为什么要使用索引对象。而后者主要介绍了创建索引操作、查看索引操作和删除索引操作,详细讲解了普通索引、唯一索引、全文索引和多列索引等各种类型索引的相关操作。为了让读者掌握这些操作,分别通过SQL语句和SQLyog客户端软件这两种方式来介绍。
通过对本章的学习,读者不仅会掌握数据库对象索引的基本概念,而且还会熟练掌握索引的各种操作。

作者: loveme    时间: 2012-12-12 13:50
第8章  操作触发器
在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而本章所要介绍的数据库对象触发器则用来实现由一些表事件触发的某个操作,是与数据库对象表关联最紧密的数据库对象之一。在数据库系统中,当执行表事件时,则会激活触发器从而执行其包含的操作。
触发器的操作包含创建触发器、查看触发器和删除触发器,这些操作同样也是数据库管理中最基本、最重要的操作。
通过本节的学习,可以掌握在数据库中操作触发器,内容包含:
        触发器的相关概念;
        触发器的基本操作:创建、查看和删除。

作者: loveme    时间: 2012-12-12 13:50
8.1  为什么使用触发器
触发器(TRIGGER)是MySQL的数据库对象之一,该对象与编程语言中的函数非常类似都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。
那么为什么要使用数据库对象触发器呢?在具体开发项目时,经常会遇到如下实例:
        在学生中表拥有字段学生名字,字段学生总数,每当添加一条关于学生记录时,学生的总数就必须同时改变。
        在顾客信息表中拥有字段顾客名字,字段顾客的电话和字段顾客的地址缩写,每当添加一条关于顾客记录时,都需要检查电话号码格式是否正确,顾客地址缩写是否正确。
上述实例虽然所需实现的业务逻辑不同,但是它们也有共同之处,即都需要在表发生更改时,自动进行一些的处理。这时就可以使用触发器数据库对象,例如对于第一个实例,可以创建一个触发器对象,每次添加一条学生记录时,就执行一次计算学生总数的操作,这样就可以保证每次添加一条学生记录后,学生总数与学生记录数一致。查看帮助文档,可以发现MySQL软件在触发如下语句时,就会自动执行所设置的操作:
        DELETE语句,
        INSERT语句,
        UPDATE语句。
其他SQL语句则不会激活触发器。在具体应用中,之所以会经常使用触发器数据库对象,是由于该对象能够加强数据库表中数据的完整性约束和业务规则等。从MySQL 5软件开始才开始支持触发器数据库对象,所以本书的内容适用于MySQL 5或更高级之后的版本。
在SQLyog客户端工具的“对象资源管理器”中,每个数据库节点下都拥有一个树形路径结构。其实每个具体数据库节点下的每个子节点中都会存在数据库对象触发器。

作者: loveme    时间: 2012-12-12 13:52
8.2  创建触发器
触发器的操作包括创建触发器、查看触发器、以及删除触发器。本节将详细介绍如何创建触发器。按照激活触发器时所执行的语句数目,可以将触发器分为“一个执行语句的触发器”和“多个执行语句的触发器”。
8.2.1  创建有一条执行语句的触发器
查看帮助文档发现,在MySQL中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下:
CREATE TRIGGER TRIGGER_NAME
        BEFORE|AFTER TRIGGER_EVENT
                ON TABLE_NAME FOR EACH ROW TRIGGER_STMT
上述语句中TRIGGER_NAME参数表上所要创建的触发器名字,在具体创建触发器时,触发器标识符不能与已经存在的触发器重复。除了上述要求外,推崇触发器名命名(标识符)为trigger_xxx或者tri_xxx;BEFORE和AFTER参数指定了触发器执行的时间,其中前者指在触发器事件之前执行触发器语句,后者指在触发器事件之后执行触发器语句;TRIGGER_EVENT参数表示触发事件,即触发器执行条件,包含DELETE、INSERT和UPDATE语句;TABLE_NAME参数表示触发事件操的表的名字;FOR EACH ROW参数表示任何一条记录上的操作满足触发事件都会触发该触发器;TRIGGER_STMT参数表示激活触发器后被执行的语句。
下面将通过一个具体的实例来说明如何创建触发器。
【实例8-1】执行SQL语句CREATE TRIGGER,在数据库company中存在两个表对象:部门表(t_dept)和日记表(t_diary),创建触发器实现当向部门表中插入记录时,就会在插入之前向日记表中插入当前时间,具体步骤如下:
(1)执行SQL语句DESC,查看数据库company中部门表(t_dept)和日记表(t_diary)的信息,具体SQL语句如下:
DESC t_dept;

DESC t_diary;
(2)执行SQL语句CREATE TRIGGER,创建触发器tri_diarytime,具体SQL语句如下:
CREATE TRIGGER tri_diarytime
        BEFORE INSERT
                ON t_dept FOR EACH ROW
                        INSERT INTO t_diary VALUES(NULL,'t_dept',now());
【代码说明】上述语句中创建了触发器tri_diarytime,当向部门表中插入任意一条记录时,就会在插入操作之前向表t_diary中插入当前时间记录。
(3)为了校验数据库company中触发器tri_diarytime的功能,可以向表t_dept中插入一条记录,然后查看表t_diary中是否执行插入当前时间操作。具体SQL语句如下:
INSERT INTO t_dept VALUES(1,'cjgongdept','ShangXi');
SELECT *
        FROM t_diary;
【代码说明】上述语句中首先向表t_dept中插入一条数据记录,然后查看表t_diary中数据记录。
执行结果显示,在向表t_dept中插记录之前,会向表t_diary中插入当前时间,从而可以发现tri_diarytime触发器创建成功。
(4)对于初级用户,当创建触发器时,经常会发生如图8.7所示的错误。之所以不能正确创建触发器“tri_diarytime”,是因为该触发器已经存在。

作者: loveme    时间: 2012-12-12 13:53

8.2.2  创建包含多条执行语句的触发器
查看帮助文档发现,在MySQL中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下:
CREATE TRIGGER TRIGGER_NAME
        BEFORE|AFTER TRIGGER_EVENT
                ON TABLE_NAME FOR EACH ROW
                        BEGIN
                        TRIGGER_STMT
                        END
上述语句中比“只有一条执行语句的触发器”语法多出来了关键字BEGIN和END,在这两个关键字之间为所要执行的多个执行语句的内容,执行语句之间用分号隔开。
在MySQL软件中,一般情况下用“;”符号作为语句的结束符号,可是在创建触发器的时候,需要用到了“;”符号作为执行语句的结束符号。为了解决该问题,可以使用关键字DELIMITER语句,例如“DELIMITER$$”,可以用来实现将结束符号设置成“$$”。
下面将通过一个具体的实例来说明如何创建包含多条执行语句的触发器。
【实例8-2】执行SQL语句CREATE TRIGGER,在数据库company中存在两个表对象:部门表(t_dept)和日记表(t_diary),创建触发器实现当向部门表中插入记录时,就会在插入之后向日记表中插入两条记录,具体步骤如下:
(1)执行SQL语句DESC,查看数据库company中部门表(t_dept)和日记表(t_diary)的信息,具体SQL语句如下:
DESC t_dept;

DESC t_diary;
(2)执行SQL语句CREATE TRIGGER,创建触发器tri_diarytime2,具体SQL语句如下:
DELIMITER $$
CREATE TRIGGER tri_diarytime2
        AFTER INSERT
                ON t_dept FOR EACH ROW
                        BEGIN
                                INSERT INTO t_diary VALUES(NULL,'t_dept',now());
                                INSERT INTO t_diary VALUES(NULL,'t_dept',now());
                        END
                        $$
DELIMITER ;
【代码说明】上述语句中首先通过“DELIMITER $$”语句设置结束符号为“$$”,然后在关键字BEGIN和END之间编写了执行语句列表,最后通过“DELIMITER ;”语句将结束符号还原成默认结束符号“;”。
(3)为了校验数据库company中触发器tri_diarytime2的功能,可以向表t_dept中插入一条记录,然后查看表t_diary中是否执行插入当前时间操作。具体SQL语句如下:
INSERT INTO t_dept VALUES(2,'cjgongdept','ShangXi');
SELECT * FROM t_diary;
【代码说明】上述语句中首先向表t_dept中插入一条数据记录,然后查看表t_diary中数据记录。
执行结果显示,在向表t_dept中插记录之后,会向表tri_diarytime中插入两条记录,从而可以发现tri_diarytime2触发器创建成功。
作者: loveme    时间: 2012-12-12 13:57
4.2.2  通过SQLyog客户端软件来创建触发器
通过MySQL数据库服务器自带的工具“MySQL Command Line Client”来创建触发器,虽然高效、灵活,但是对于初级用户比较困难,需要掌握SQL语句。在具体实践中,用户可以通过客户端软件SQLyog来创建触发器。
下面将通过一个具体的实例来说明如何通过客户端软件SQLyog创建触发器。
【实例8-3】同实例【8-2】一样,于数据库company中创建触发器对象tri_diarytime2。
(1)首先连接数据库服务器,在“对象资源管理器”窗口中将显示MySQL数据库管理系统中所有的数据库,其中数据库company中存在两个表:表示部门的表t_dept和表示日记表t_diary;同时触发器节点里已经存在一个触发器tri_diarytime
(2)右键单击“对象资源管理器”窗口中“触发器”节点,在出现的菜单选择“创建触发/器”命令则会打开“Create Trigger”对话框。
(3)在出现的“Create Trigger”对话框中,设置“输入新触发器名称”文本框名为tri_diarytime2,然后单击“创建”按钮则会创建触发器tri_diarytime2
(4)当数据库触发器tri_diarytime2创建成功后,在出现关于触发器设计模板的“tri_diarytime2”窗口
(5)在“tri_diarytime2”设计模板窗口中,然后单击工具栏中的“执行查询”( )按钮,进行执行SQL语句。
(6)当数据库创建成功后,不仅会在“信息”窗口显示相关信息,而且当单击工具栏中的“刷新对象浏览器”( )按钮,会在“对象资源管理器”窗口中显示出新建的数据库
通过上述步骤,则可以在SQLyog客户端工具中于company数据库中创建触发器tri_diarytime2成功。
作者: loveme    时间: 2012-12-12 13:58
8.3  查看触发器
触发器的操作包括创建触发器、查看触发器、以及删除触发器。本节将详细介绍如何查看触发器。在MySQL软件中可以通过两种方式来查看触发器,分别为通过SHOW TRIGGERS语句实现和通过查看系统表triggers实现。
8.3.1  通过SHOW TRIGGERS语句查看触发器
对于初级用户,当创建触发器时,除了经常会发生“ERROR 1359 (HY000): Trigger already exists”错误之外
之所以不能正确创建触发器“tri_diarytime2”,除了是因为该触发器已经存在外还。还因为在MySQL软件中,一个表在相同触发时间的相同触发时间,只能创建一个触发器。因此对于有经验的用户,当在创建触发器之前,需要查看MySQL软件中是否已经存在该标识符的触发器和触发器的相关事件。
那么如何查看MySQL软件中已经存在的触发器呢?查看帮助文档可以发现,在MySQL软件中查看已经存在触发器通过SQL语句SHOW TRIGGERS来实现,其语法形式如下:
SHOW TRIGGERS \G
通过执行SQL结果可以发现,执行完“SHOW TRIGGERS”语句后,会显示一个列表。在该列表中,会显示出所有触发器的信息。其中Trigger参数表示触发器的名称;Event参数表示触发器的激活事件;Table参数表示触发器对象触发事件所操作的表;Statement参数表示触发器激活时所执行的语句;Timing参数表示触发器所执行的时间;其他参数不重要,现阶段不需要掌握。

作者: loveme    时间: 2012-12-12 13:59
8.3.2  通过查看系统表triggers实现查看触发器
在MySQL软件中,于系统数据库information_schema中存在一个存储所有触发器信息的系统表triggers,因此查询该表格的记录也可以实现查看触发器功能。关于系统表triggers的表结构
通过系统表triggers的结构,可以发现该表会提供触发器的所有详细信息。
【实例8-4】执行SQL语句SELECT,查询数据库company中触发器对象,具体步骤如下:
(1)执行SQL语句USE,选择数据库information_schema,具体SQL语句如下:
USE information_schema;
(2)执行SQL语句SELECT,查看系统表triggers中的所有记录,具体SQL语句如下:
SELECT * FROM triggers \G
【代码说明】关于查询语句的具体语法后面章节会详细介绍。
(3)执行结果显示了MySQL软件中所有的触发器对象的详细信息,除了显示所有触发器对象外,还可以查询指定触发器的详细信息,具体SQL语句如下:
SELECT * FROM triggers WHERE TRIGGER_NAME=’tri_diarytime2’ \G
【代码说明】关于查询语句的具体语法后面章节会详细介绍。
执行结果显示了所指定触发器对象tri_diarytime2的详细信息,跟前面的方式相比,使用起来更加方便、灵活。
对于MySQL软件用户来说,很少使用语句“SHOW TRIGGERS”和语句“SELECT * FROM triggers \G”来查询触发器的详细信息,因为在MySQL软件中,随着时间的推移,数据库对象触发器肯定会增多,如果查询所有触发器的详细信息,将显示许多许多的信息,不便于找到所需的触发器的信息。


作者: loveme    时间: 2012-12-12 13:59
8.3.3  通过SQLyog客户端软件来查看触发器
通过MySQL数据库服务器自带的工具“MySQL Command Line Client”来查看触发器,虽然高效、灵活,但是对于初级用户比较困难,需要掌握SQL语句。在具体实践中,用户可以通过MySQL客户端软件SQLyog来查看触发器。
对于MySQL客户端软件SQLyog,除了可以在“询问”对话框中执行“SHOW TRIGGERS”语句和SELECT语句来实现查询触发器详细信息外,还可以通过操作“对象资源管理器”来实现。具体步骤如下:
(1)首先连接数据库服务器,在“对象资源管理器”窗口中将显示MySQL数据库管理系统中所有的数据库,单击数据库company节点,将显示属于该数据库的所有数据库对象,具体信息如图8.25所示。
(2)单击数据库company中的“触发器”节点,将显示关于该数据库的所有触发器对象(tri_diarytime和tri_diarytime2)
(3)如果想查看触发器tri_diarytime的定义信息,只需要在“对象资源管理器”窗口中右键选择该触发器对象,然后在出现的菜单命令中选择“改变触发器”命令(如图8.27所示),则会出现关于该触发器对象定义信息的窗口
通过上述步骤,则可以在SQLyog客户端工具中查看触发器对象和这些对象的定义信息。

作者: loveme    时间: 2012-12-12 14:00
8.4  删除触发器
触发器的操作包括创建触发器、查看触发器、以及删除触发器。本节将详细介绍如何删除触发器。在MySQL软件中可以通过两种方式来删除触发器,分别为通过DROP TRIGGER语句和通过工具来实现删除触发器。
8.4.1  通过DROP TRIGGER语句删除触发器
查看帮助文档可以发现,在MySQL中删除触发器通过SQL语句DROP TRIGGER来实现,其语法形式如下:
DROP TRIGGER trigger_name
上述语句中,trigger_name参数表示所要删除的触发器名称。
【实例8-5】执行SQL语句DDROP TRIGGER删除触发器,于company数据库中删除触发器对象tri_diarytime。具体步骤如下:
(1)执行SQL语句USE,选择数据库company,具体语句如下:
USE company
(2)选择进入数据库company后,执行SQL语句DROP TRIGGER,删除名为tri_diarytime的视图对象,具体SQL语句如下:
DROP TRIGGER tri_diarytime
【代码说明】上述SQL语句中通过关键字DROP TRIGGER实现删除触发器功能。
(3)为了检验数据库view中是否还存在触发器对象tri_diarytime,执行SQL语句SHOW TRIGGERS,具体SQL语句内容如下:
SHOW TRIGGERS \G
执行结果显示,没有任何触发器对象,则表示删除视图tri_diarytime成功。
作者: loveme    时间: 2012-12-12 14:01
8.4.2  通过工具来删除触发器
在客户端软件SQLyog中,不仅可以通过在“询问”窗口中执行DROP TRIGGER语句来删除触发器,而且还可以通过向导来实现,具体步骤如下:
(1)在“对象资源管理器”窗口中,单击数据库company中“触发器”节点前的加号,然后右键单击“tri_diarytime”节点,从弹出的快捷菜单中选择“删除触发器”命令
(2)当通过右键单击“删除触发器”命令时,就会弹出对话框来确定是否删除触发器,如图8.33所示。当单击“是”按钮后,这时“对象资源管理器”窗口数据库company中“触发器”里就没有任何触发器对象
通过上述步骤,就可以在SQLyog软件中成功删除触发器对象。
作者: loveme    时间: 2012-12-12 14:02
8.5  小结
本节介绍在MySQL数据库管理系统中关于触发器的操作,主要包含触发器的创建、触发器的查看、以及触发器删除的操作。在具体介绍这些操作时,除了详细介绍针对触发器的SQL语句外,而且还介绍了客户端软件SQLyog针对触发器的这些操作。
通过对本章的学习,读者不仅会掌握数据库对象触发器的基本概念,而且还会对触发器进行各种熟练操作。


作者: Libra    时间: 2012-12-18 13:56
下载了,谢谢分享,顶一个~
作者: Libra    时间: 2012-12-18 13:59
这本书不全,只有6和8章,希望楼主能分享其他篇章,谢谢,呵呵~
作者: smxwww    时间: 2013-3-1 22:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: tootti    时间: 2013-3-19 17:00
只有2章
作者: pfffk    时间: 2013-3-21 15:05
感谢分享。Thanks

作者: tlmx    时间: 2013-3-26 16:06
这本书对于我这个新手是值得看的。谢谢
作者: zorro123    时间: 2013-3-27 19:30
正需要谢谢楼主分享啊
作者: wlanmaster    时间: 2013-4-9 09:22
就是在找这么基础的入门教材啊!!!
作者: xiaozhaoying    时间: 2013-6-11 14:50
这个好,谢谢楼主分享!

作者: sunfreeman    时间: 2013-6-14 16:42
附件只有样章,不完整哦
作者: 裕华科技    时间: 2013-6-16 15:40
lz不厚道,只有2章也不明说
作者: 一闭一睁    时间: 2013-11-29 14:43
不全啊!!!!!!!!!!!
作者: 传奇晓敏    时间: 2014-5-8 13:56
楼主,其他去哪找?指条明路
作者: coffeetea01    时间: 2014-8-5 18:18
压缩包里面的不完整。。
作者: Glory    时间: 2014-9-18 17:43
很不错,支持一下。
作者: hecj    时间: 2014-10-27 16:34
好书好书
作者: hecj    时间: 2014-10-27 16:36
怎么才能获得贡献值,,想要下载这本书吖吖{:soso_e109:}
作者: heheh    时间: 2014-11-11 19:00

很好,感謝分享
作者: 896244376    时间: 2014-11-14 11:27
学习学习,谢谢分享
作者: 约定    时间: 2014-11-25 17:36
支持一下,积分不足无法下载
作者: shiwolinfan    时间: 2014-11-26 14:40
已下载 谢谢楼主
作者: shiwolinfan    时间: 2014-11-26 14:42
只有第六章和第八章的意思么
作者: pingan    时间: 2015-1-4 13:37
学习一下

作者: pingan    时间: 2015-1-4 13:37
怎么才能获得贡献值,,想要下载这本书吖吖
作者: pingan    时间: 2015-1-4 13:38
怎么才能获得贡献值,,
作者: gwylx    时间: 2015-1-9 08:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: shunzi    时间: 2015-1-10 14:53
谢谢分享!收藏了。

作者: jiannanchun    时间: 2015-1-16 15:45
不错,学习下!
作者: candybaby333    时间: 2015-3-2 09:16
为什么只有第六和第八章啊?
作者: jaywanglevelup    时间: 2015-3-11 19:13
感谢楼主分享。收下了。谢谢!!
作者: apm70    时间: 2015-3-15 11:14
多谢楼主分享,希望把剩余的章节也传上来,谢谢!
作者: vanlin    时间: 2015-3-16 17:31
必须要顶一下,,不然没有分了。
作者: 为梦狂野    时间: 2015-3-25 22:04
loveme 发表于 2012-12-12 13:48
6.3.2  通过SQLyog软件删除索引
在客户端软件SQLyog中,不仅可以通过在“询问”窗口中执行DROP INDEX语句 ...

谢谢楼主分享,要是免费就更好了

作者: laowapianer    时间: 2015-3-26 18:16
{:soso_e179:}
作者: hbwh2002    时间: 2015-4-1 20:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: luyanfang    时间: 2015-4-2 17:41
没个电子版啥的?
作者: 丁典    时间: 2015-4-9 16:08
只有两个章节啊?怎么回事
作者: zhouwm    时间: 2015-4-17 18:26
ddddddddddddddddddddddddddddd
作者: 夏了5夏天    时间: 2015-4-21 14:06
怎么只有两章,这不是骗分么!
作者: will7    时间: 2015-5-7 07:07
新人学习中
作者: yincchen    时间: 2015-5-10 23:06
haode,xialaixuexixia

作者: startno    时间: 2015-5-11 11:29
不是全本呀,只有部分内容
作者: xiatianyun    时间: 2015-5-28 10:55
只有第6章和第八章。
作者: 紫风    时间: 2015-6-10 10:21
dingdingdingdingding
作者: 晴颺    时间: 2015-6-11 10:52
下载学习下,谢谢分享。
作者: amysqlclubz    时间: 2015-6-19 17:27
谢谢楼主,只是威望不够啊,下载不了。
作者: amysqlclubz    时间: 2015-6-19 17:29
楼主不厚道,下载的文档只是其中的几章嘛。
作者: hbwp2008    时间: 2015-6-21 19:55
ZZZZZZZZZZZZZZZZZ
作者: will7    时间: 2015-6-23 20:21
谢谢楼主
作者: zhangjisir    时间: 2015-7-8 11:56
这个资料一直再找,正要学MYSQL,正准备买书了,终于被我找到了
作者: qing    时间: 2015-7-13 16:04
谢谢分享啊~~感觉十分有用
作者: Walker    时间: 2015-7-20 19:51
已下载,谢谢楼主分享~
作者: jackyfevre    时间: 2015-7-23 13:40
非常好的书,支持一下
作者: jackyfevre    时间: 2015-7-23 13:45
准备用一个月的时间把这本书啃下来
作者: 开启MySQL之旅    时间: 2015-7-30 16:31
感谢分享,从第6张索引开始学起
作者: caesar_wind    时间: 2015-8-10 18:57
正好需要,多谢!
作者: caesar_wind    时间: 2015-8-10 19:02
只有几章,内容不全啊,浪费感情
作者: hatahuangs    时间: 2015-8-16 00:14
下载了,谢谢分享,顶一个~

作者: busyjie    时间: 2015-9-14 15:52
谢谢分享~~~~
拿走了
作者: 浮世的安慰    时间: 2016-10-22 19:45
谢谢






欢迎光临 MySQL社区 (http://www.mysqlpub.com/) Powered by Discuz! X3.2