|
MySQL的中文手册。
一、目录。
MySQL中文参考手册
译者:晏子 (clyan@sohu.com) 主页:http://linuxdb.yeah.net
* 0 译者序
* 1 MySQL的一般的信息
o 1.1 什么是MySQL?
o 1.2 关于本手册
+ 1.2.1 本手册中使用的约定
o 1.3 MySQL的历史
o 1.4 MySQL的主要特征
o 1.5 MySQL稳定性?
o 1.6 顺应2000年
o 1.7 SQL一般信息和教程
o 1.8 有用的MySQL相关链接
* 2 MySQL 邮件列表及如何提问或报告错误
o 2.1 MySQL邮件列表
o 2.2 提问或报告错误
o 2.3 怎样报告错误或问题
o 2.4 在邮件列表上回答问题的指南
* 3 MySQL的许可证和技术支持
o 3.1 MySQL的许可证政策
o 3.2 MySQL 使用的版权
+ 3.2.1 可能的未来版权改变
o 3.3 MySQL商业性分发
o 3.4 许可证实例
+ 3.4.1 销售使用 MySQL的产品
+ 3.4.2 销售MySQL相关的服务
+ 3.4.3 ISP MySQL服务
+ 3.4.4 运营一个使用MySQL的Web服务器
o 3.5 MySQL的许可证和技术支持费用
+ 3.5.1 付款信息
+ 3.5.2 联系信息
o 3.6 商业性支持的类型
+ 3.6.1 基本的电子邮件支持
+ 3.6.2 扩展的电子邮件支持
+ 3.6.3 登录支持
+ 3.6.4 扩展的登录支持
* 4 安装 MySQL
o 4.1 怎样获得MySQL
o 4.2 MySQL支持的操作系统
o 4.3 使用MySQL哪个版本
o 4.4 怎样和何时发布更新版本
o 4.5 安装布局
o 4.6 安装MySQL二进制代码分发
+ 4.6.1 Linux RPM注意事项
+ 4.6.2 构造客户程序
+ 4.6.3 系统特定的问题
# 4.6.3.1 Linux 注意事项
# 4.6.3.2 HP-UX 注意事项
o 4.7 安装 MySQL源代码分发
+ 4.7.1 快速安装概述
+ 4.7.2 运用补丁
+ 4.7.3 典型的configure选项
o 4.8 编译问题?
o 4.9 MIT-pthreads 注意事项
o 4.10 Perl 安装说明
+ 4.10.1 在Unix操作系统上安装 Perl
+ 4.10.2 在 Win32上安装 ActiveState Perl
+ 4.10.3 在 Win32 上安装 MySQL Perl 分发
+ 4.10.4 使用 Perl DBI/DBD接口遇到的问题
o 4.11 系统特定的问题
+ 4.11.1 Solaris注意事项
+ 4.11.2 Solaris 2.7 注意事项
+ 4.11.3 Solaris x86 注意事项
+ 4.11.4 SunOS 4 注意事项
+ 4.11.5 Linux (所有的Linux版本)注意事项
# 4.11.5.1 Linux-x86 注意事项
# 4.11.5.2 RedHat 5.0 注意事项
# 4.11.5.3 RedHat 5.1 注意事项
# 4.11.5.4 Linux-SPARC 注意事项
# 4.11.5.5 Linux-Alpha 注意事项
# 4.11.5.6 MkLinux 注意事项
# 4.11.5.7 Qube2 Linux 注意事项
+ 4.11.6 Alpha-DEC-Unix 注意事项
+ 4.11.7 Alpha-DEC-OSF1 注意事项
+ 4.11.8 SGI-Irix 注意事项
+ 4.11.9 FreeBSD 注意事项
+ 4.11.10 NetBSD 注意事项
+ 4.11.11 BSD/OS 注意事项
# 4.11.11.1 BSD/OS 2.x 注意事项
# 4.11.11.2 BSD/OS 3.x 注意事项
# 4.11.11.3 BSD/OS 4.x 注意事项
+ 4.11.12 SCO 注意事项
+ 4.11.13 SCO Unixware 7.0 注意事项
+ 4.11.14 IBM-AIX 注意事项
+ 4.11.15 HP-UX 注意事项
o 4.12 Win32 注意事项
+ 4.12.1 在 Win32 上安装 MySQL
+ 4.12.2 在 Win95 /Win98上启动 MySQL
+ 4.12.3 在 NT 上启动 MySQL
+ 4.12.4 在 Win32 上运行 MySQL
+ 4.12.5 用 SSH 从 Win32 连接一个远程MySQL
+ 4.12.6 MySQL-Win32与Unix MySQL 比较
o 4.13 OS/2 注意事项
o 4.14 TcX 二进制代码
o 4.15 安装后期(post-installation)的设置与测试
+ 4.15.1 运行mysql_install_db 的问题
+ 4.15.2 启动 MySQL 服务器的问题
+ 4.15.3 自动启动和停止 MySQL
+ 4.15.4 选项文件
o 4.16 升级和降级(downgrading)时有什么特别要做的事情吗?
+ 4.16.1 从一个 3.22 版本升级到 3.23
+ 4.16.2 从一个 3.21 版本升级到 3.22
+ 4.16.3 从一个 3.20 版本升级到 3.21
+ 4.16.4 升级到其他的体系结构
* 5 MySQL 与标准的兼容性?
o 5.1 MySQL对ANSI SQL92 的扩充
o 5.2 以ANSI模式运行 MySQL
o 5.3 MySQL相比ANSI SQL92的差别
o 5.4 MySQL 缺乏的功能
+ 5.4.1 子选择(Sub-selects)
+ 5.4.2 SELECT INTO TABLE
+ 5.4.3 事务(Transactions)
+ 5.4.4 存储过程和触发器
+ 5.4.5 外键(Foreign Keys)
# 5.4.5.1 不使用外键的理由
+ 5.4.6 视图(Views)
+ 5.4.7 '--'作为一个 注解的开始
o 5.5 MySQL 遵循什么标准?
o 5.6 怎样处理没有提交/回卷(COMMIT / ROLLBACK)
* 6 MySQL 存取权限系统
o 6.1 权限系统做什么
o 6.2 MySQL用户名和口令
o 6.3 与MySQL服务器连接
o 6.4 使你的口令安全
o 6.5 MySQL 提供的权限
o 6.6 权限系统工作原理
o 6.7 存取控制,阶段1:连接证实
o 6.8 存取控制,阶段2:请求证实
o 6.9 权限更改何时生效
o 6.10 建立初始的 MySQL权限
o 6.11 向MySQL增加新用户权限
o 6.12 怎样设置口令
o 6.13 存取拒绝(Access Denied)错误的原因
o 6.14 怎样使MySQL安全以对抗解密高手(cracker)
* 7 MySQL 语言参考
o 7.1 文字:怎样写字符串和数字
+ 7.1.1 字符串
+ 7.1.2 数字
+ 7.1.3 十六进制值
+ 7.1.4 NULL值
+ 7.1.5 数据库,表,索引,列和别名的命名
# 7.1.5.1 名字的大小写敏感性
o 7.2 用户变量
o 7.3 列类型
+ 7.3.1 列类型的存储要求
+ 7.3.5 数字类型
+ 7.3.6 日期和时间类型
# 7.3.6.1 问题和日期类型
# 7.3.6.2 DATETIME,DATE和TIMESTAMP类型
# 7.3.6.3 TIME类型
# 7.3.6.4 YEAR类型
+ 7.3.7 字符串类型
# 7.3.7.1 CHAR和VARCHAR类型
# 7.3.7.2 BLOB和TEXT类型
# 7.3.7.3 ENUM类型
# 7.3.7.4 SET类型
+ 7.3.8 为列选择正确的类型
+ 7.3.9 列索引
+ 7.3.10 多列索引
+ 7.3.11 使用来自其他数据库引擎的列类型
o 7.4 用在SELECT和WHERE子句的函数
+ 7.4.1 分组函数
+ 7.4.2 常用的算术运算
+ 7.4.3 位函数
+ 7.4.4 逻辑运算
+ 7.4.5 比较运算符
+ 7.4.6 字符串比较函数
+ 7.4.7 类型转换运算符
+ 7.4.8 控制流函数
+ 7.4.9 数学函数
+ 7.4.10 字符串函数
+ 7.4.11 日期和时间函数
+ 7.4.12 其他函数
+ 7.4.13 与GROUP BY子句一起使用的函数
o 7.5 CREATE DATABASE (创建数据库)句法
o 7.6 DROP DATABASE (抛弃数据库)句法
o 7.7 CREATE TABLE (创建表)句法
+ 7.7.1 隐含(silent)的列指定变化
o 7.8 ALTER TABLE (改变表)句法
o 7.9 OPTIMIZE TABLE (优化表) 句法
o 7.10 DROP TABLE (抛弃表)句法
o 7.11 DELETE (删除)句法
o 7.12 SELECT (精选)句法
o 7.13 JOIN (联接)句法
o 7.14 INSERT (插入)句法
o 7.15 REPLACE (替换)句法
o 7.16 LOAD DATA INFILE (装载数据到文件)句法
o 7.17 UPDATE (更新)句法
o 7.18 USE (使用)句法
o 7.19 FLUSH (清除缓存)句法
o 7.20 KILL (杀灭)句法
o 7.21 SHOW (显示)句法(得到关于表,列等的信息)
o 7.22 EXPLAIN (解释)句法(得到关于SELECT的信息)
o 7.23 DESCRIBE (描述)句法(得到列的信息)
o 7.24 LOCK TABLES/UNLOCK TABLES (锁定表/解锁表)句法
o 7.25 SET OPTION (设置选项)句法
o 7.26 GRANT (授权)和REVOKE (撤回)句法
o 7.27 CREATE INDEX (创建索引)句法
o 7.28 DROP INDEX (抛弃索引)句法
o 7.29 注释句法
o 7.30 CREATE FUNCTION/DROP FUNCTION (创建函数/抛弃函数)句法
o 7.31 MySQL对保留字很挑剔吗?
* 8 MySQL 教程
o 8.1 联接和断开服务器
o 8.2 输入查询
o 8.3 常用查询的例子
+ 8.3.1 列的最大值
+ 8.3.2 拥有某个列的最大值的行
+ 8.3.3 列的最大值:按组:只有值
+ 8.3.4 拥有某个字段的组间最大值的行
+ 8.3.5 使用外键
o 8.4 创建并使用一个数据库
+ 8.4.1 创建并选用一个数据库
+ 8.4.2 创建一个数据库表
+ 8.4.3 将数据装入数据库表
+ 8.4.4 从一个数据库表检索信息
# 8.4.4.1 选择所有数据
# 8.4.4.2 选择特定行
# 8.4.4.3 选择特定列
# 8.4.4.4 排序行
# 8.4.4.5 日期计算
# 8.4.4.6 NULL值操作
# 8.4.4.7 模式匹配
# 8.4.4.8 行计数
+ 8.4.5 使用多个数据库表
o 8.5 获得数据库和表的信息
o 8.6 以批处理模式使用mysql
o 8.7 从"双胞项目"中查询
+ 8.7.1 找出所有非独处的双胞胎
+ 8.7.2 显示关于双胞胎近况的表
* 9 MySQL 服务器功能
o 9.1 MySQL 支持哪些语言?
+ 9.1.1 用于数据和排序的字符集
+ 9.1.2 增加一个新的字符集
+ 9.1.3 多字节字符支持
o 9.2 更新日志
o 9.3 MySQL数据库表可以有多大?
o 9.4 MySQL数据库表类型
* 10 从 MySQL 得到最大的性能
o 10.1 优化概述
o 10.2 系统/编译时和启动参数的调节
+ 10.2.1 编译和链接如何影响 MySQL 的速度
+ 10.2.2 磁盘问题
# 10.2.2.1 为数据库和表格使用符号链接
+ 10.2.3 调节服务器参数
+ 10.2.4 MySQL 怎样打开和关闭数据库表
+ 10.2.5 在同一个数据库中创建大量数据库表的缺点
+ 10.2.6 为什么有这么多打开的表?
+ 10.2.7 MySQL 怎样使用内存
+ 10.2.8 MySQL 怎样锁定数据库表
+ 10.2.9 数据库表级锁定的问题
o 10.3 使你的数据尽可能小
o 10.4 MySQL 索引的使用
o 10.5 存取或更新数据的查询速度
+ 10.5.1 估计查询性能
+ 10.5.2 SELECT 查询的速度
+ 10.5.3 MySQL 怎样优化WHERE子句
+ 10.5.4 MySQL 怎样优化LEFT JOIN
+ 10.5.5 MySQL 怎样优化LIMIT
+ 10.5.6 INSERT查询的速度
+ 10.5.7 UPDATE查询的速度
+ 10.5.8 DELETE查询的速度
o 10.6 选择一种表类型
+ 10.6.1 静态(定长)表的特点
+ 10.6.2 动态表的特点
+ 10.6.3 压缩表的特点
+ 10.6.4 内存(In-memory table)表的特点
o 10.7 其他优化技巧
o 10.8 使用你自己的基准测试
o 10.9 设计选择
o 10.10 MySQL 设计局限/折衷
o 10.11 可移植性
o 10.12 我们已将MySQL用在何处?
* 11 MySQL 基准套件
* 12 MySQL 实用程序
o 12.1 各种 MySQL 程序概述
o 12.2 管理一个 MySQL 服务器
o 12.3 从 MySQL 数据库和表中倒出(dump)结构和数据
o 12.4 从文本文件导入数据
o 12.5 MySQL 压缩只读表生成器
* 13 维护 MySQL 安装
o 13.1 使用myisamchk进行表维护和崩溃恢复
+ 13.1.1 myisamchk的调用语法
+ 13.1.2 myisamchk的内存使用
o 13.2 13.2 建立一个数据库表维护规范
o 13.3 获得关于一个表的信息
o 13.4 使用myisamchk进行崩溃恢复
+ 13.4.1 怎样检查表的出错
+ 13.4.2 怎样修复表
+ 13.4.3 表优化
o 13.5 日志文件维护
* 14 为MySQL增加新函数
o 14.1 增加一个新的用户定义函数
+ 14.1.1 UDF调用顺序
+ 14.1.2 参数处理
+ 14.1.3 返回值和出错处理
+ 14.1.4 编译并安装用户定义函数
o 14.2 增加一个新的原生(native)函数
* 15 为MySQL增加新过程
o 15.1 analyse过程
o 15.2 编写一个过程
* 16 MySQL对 ODBC 支持
o 16.1 MyODBC 支持的操作系统
o 16.2 怎样报告 MyODBC的问题
o 16.3 已知可用 MyODBC一起工作的程序
o 16.4 怎样填写 ODBC 管理程序的各种域
o 16.5 怎样在ODBC中获得一个AUTO_INCREMENT列的值
o 16.6 报告 MyODBC 的问题
* 17 与一些常用程序一起使用MySQL
o 17.1 与 Apache一起使用 MySQL
* 18 问题和常见的错误
o 18.1 如果 MySQL总是崩溃怎么办
o 18.2 使用 MySQL 时一些常见错误
+ 18.2.1 MySQL server has gone away错误
+ 18.2.2 Can't connect to [local] MySQL server错误
+ 18.2.3 Host '...' is blocked错误
+ 18.2.4 Out of memory错误
+ 18.2.5 Packet too large错误
+ 18.2.6 The table is full错误
+ 18.2.7 Commands out of sync in client错误
+ 18.2.8 Ignoring user错误
+ 18.2.9 Table 'xxx' doesn't exist错误
o 18.3 MySQL 怎样处理一个溢出的磁盘
o 18.4 怎样从一个文本文件运行SQL命令
o 18.5 MySQL 在哪儿存储临时文件
o 18.6 怎样保护"/tmp/mysql.sock"不被删除
o 18.7 Access denied 出错
o 18.8 怎样作为一个一般用户运行 MySQL
o 18.9 怎样重新设置一个忘记的口令
o 18.10 文件许可权限问题
o 18.11 文件没找到
o 18.12 使用DATE列的问题
o 18.13 时区问题
o 18.14 在搜索中的大小写敏感性
o 18.15 NULL值问题
o 18.16 alias问题
o 18.17 从相关的表中删除行
o 18.18 解决没有匹配行的问题
o 18.19 ALTER TABLE问题
o 18.20 怎样改变一个表中列的次序
* 19 解决MySQL 一些常见的问题
o 19.1 数据库复制
o 19.2 数据库备份
o 19.3 在同一台机器上运行多个 MySQL 服务器
* 20 MySQL 客户工具和 API
o 20.1 MySQL C API
o 20.2 C API数据类型
o 20.3 C API函数概述
o 20.4 C API函数描述
+ 20.4.1 mysql_affected_rows ()
+ 20.4.2 mysql_close ()
+ 20.4.3 mysql_connect ()
+ 20.4.4 mysql_change_user ()
+ 20.4.5 mysql_create_db ()
+ 20.4.6 mysql_data_seek ()
+ 20.4.7 mysql_debug ()
+ 20.4.8 mysql_drop_db ()
+ 20.4.9 mysql_dump_debug_info ()
+ 20.4.10 mysql_eof ()
+ 20.4.11 mysql_errno ()
+ 20.4.12 mysql_error ()
+ 20.4.13 mysql_escape_string ()
+ 20.4.14 mysql_fetch_field ()
+ 20.4.15 mysql_fetch_fields ()
+ 20.4.16 mysql_fetch_field_direct ()
+ 20.4.17 mysql_fetch_lengths ()
+ 20.4.18 mysql_fetch_row ()
+ 20.4.19 mysql_field_count ()
+ 20.4.20 mysql_field_seek ()
+ 20.4.21 mysql_field_tell ()
+ 20.4.22 mysql_free_result ()
+ 20.4.23 mysql_get_client_info ()
+ 20.4.24 mysql_get_host_info ()
+ 20.4.25 mysql_get_proto_info ()
+ 20.4.26 mysql_get_server_info ()
+ 20.4.27 mysql_info ()
+ 20.4.28 mysql_init ()
+ 20.4.29 mysql_insert_id ()
+ 20.4.30 mysql_kill ()
+ 20.4.31 mysql_list_dbs ()
+ 20.4.32 mysql_list_fields ()
+ 20.4.33 mysql_list_processes ()
+ 20.4.34 mysql_list_tables ()
+ 20.4.35 mysql_num_fields ()
+ 20.4.36 mysql_num_rows ()
+ 20.4.37 mysql_options ()
+ 20.4.38 mysql_ping ()
+ 20.4.39 mysql_query ()
+ 20.4.40 mysql_real_connect ()
+ 20.4.41 mysql_real_query ()
+ 20.4.42 mysql_reload ()
+ 20.4.43 mysql_row_seek ()
+ 20.4.44 mysql_row_tell ()
+ 20.4.45 mysql_select_db ()
+ 20.4.46 mysql_shutdown ()
+ 20.4.47 mysql_stat ()
+ 20.4.48 mysql_store_result ()
+ 20.4.49 mysql_thread_id ()
+ 20.4.50 mysql_use_result ()
+ 20.4.51 为什么在mysql_query()返回成功后mysql_store_result()有时返回NULL?
+ 20.4.52 我能从查询得到什么结果?
+ 20.4.53 我怎样才能获得最后插入的行的唯一ID?
+ 20.4.54 链接 C API的问题
+ 20.4.55 怎样制作一个线程安全(thread-safe)的客户
o 20.5 MySQL Perl API
+ 20.5.1 DBI与DBD::mysql
+ 20.5.2 DBI接口
+ 20.5.3 更多的DBI/DBD信息
o 20.6 MySQL Eiffel 包装
o 20.7 MySQL Java 连接(JDBC)
o 20.8 MySQL PHP API
o 20.9 MySQL C++ API
o 20.10 MySQL Python API
o 20.11 MySQL TCL API
* 21 怎样对比MySQL与其他数据库
o 21.1 怎样对比MySQL和mSQL
+ 21.1.1 怎样将mSQL工具转换到MySQL
+ 21.1.2 mSQL和MySQL的 客户机/服务器通讯协议有何不同
+ 21.1.3 mSQL 2.0 SQL句法与MySQL有何不同
o 21.2 怎样对比MySQL与PostgreSQL
* A 一些 MySQL 用户
* B 贡献的程序
* C MySQL贡献者
* D MySQL 变迁的历史记录
* E MySQL中已知的错误和设计缺限
* F 我们想要在未来加入到MySQL 的计划表( TODO )
* G 对移植到其他系统的说明
* H MySQL 正则表达式句法的描述
* I 什么是 Unireg?
* J 针对非微软操作系统的 MySQL 服务器许可证
* K 针对微软操作系统的 MySQL 许可证
* SQL命令,类型和函数索引
* 概念索引
一、MySQL的一般信息:
MySQL中文参考手册
译者:晏子 (clyan@sohu.com) 主页:http://linuxdb.yeah.net
第一章,前一章,下一章, 最后一章, 目录.
1 MySQL 的一般信息
这是MySQL参考手册;它记载了MySQL版本3.23.7-alpha。
MySQL 是一个快速、多线程、多用户和强壮的SQL数据库服务器。
对Unix和 OS/2 平台,MySQL基本上是免费的;但对微软平台,你在30 天的试用期后必须获得一个MySQL 许可证。详见第三节 MySQL许可证和技术支持。
MySQL 主页提供有关MySQL的最新信息。
对于MySQL能力的讨论,详见1.4 MySQL 的主要特征。
对于安装指南,见4 安装 MySQL。对于有关移植MySQL到新机器或操作系统的技巧,参见G 对移植到其他系统的说明。
有关从 3.21 版升级的信息,详见4.16.2 从一个 3.21 版本升级到 3.22 。
MySQL的入门教程,见8 MySQL 教程。
SQL和基准信息的例子,见基准目录(在分发中的'sql-bench'目录)。
对于新特征和错误修复一个历史记录,见D MySQL的变迁。
对于当前已知错误和功能缺陷的一张列表,见E MySQL已知错误和设计缺陷。
未来计划,见F 我们想要在未来加入到MySQL 的计划表( TODO )。
这个计划的所有贡献者的名单,见C MySQL 的贡献者。
重要:
将臭虫(错误)报告、问提和建议发到邮件列表(原文未提供)。
对源代码分发,mysqlbug 脚本可在‘scripts’目录下找到。 对二进制的分发,mysqlbug可在‘bin’目录下找到。
如果你有任何关于这本手册的增补或修正的任何建议,请将它们发给手册小组(docs@mysql.com )。
1.1 什么是 MySQL?
MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。例如,你能用SQL语言为一个网站检索产品信息及存储顾客信息,同时MySQL也足够快和灵活以允许你存储记录文件和图像。
MySQL 主要目标是快速、健壮和易用。最初是因为我们需要这样一个SQL服务器,它能处理与任何可不昂贵硬件平台上提供数据库的厂家在一个数量级上的大型数据库,但速度更快,MySQL就开发出来。自1996年以来,我们一直都在使用MySQL,其环境有超过 40 个数据库,包含 10,000个表,其中500多个表超过7百万行,这大约有100 个吉字节(GB)的关键应用数据。
MySQL建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管MySQL仍在开发中,但它已经提供一个丰富和极其有用的功能集。
MySQL的官方发音是“My Ess Que Ell”(不是 MY-SEQUEL )。
1.2 关于本手册
目前这本手册有Texinfo、普通文本、Info、HTML、PostScript和 PDF 等格式的版本。因为它们的长度,PostScript和 PDF 版本没有包括在主要的MySQL分发中,但是可从http://www.mysql.com 获得单独的下载。
主要的文档是Texinfo文件, HTML版本自动地用一个texi2html改进版本生成。普通文本和Info版本用makeinfo生成。 Postscript版本由texi2dvi和dvips生成。PDF 版本用pdftex生成。
本手册由David Axmark, Michael (Monty) Widenius, Paul DuBois and Kim Aldale维护。 而其他的贡献者,见C MySQL贡献者。
1.2.1 本手册中使用的约定
这本手册使用了一定文字格式的约定:
constant / 固定宽度
固定宽度字体用于命令名字和选择、SQL语句、数据库、表和列命名、C 和 Perl 代码、环境变量。例如:“为了了解mysqladmin如何工作,用--help选项调用它”。
'文件名'
有包围引号的固定宽度字体用于文件名和路径。例如:“发行版本被安装在'/usr/local/'目录下”。
'c'
有包围引号的固定宽度字体也用于指明字符序列。例如:“要指定一个通配符,使用'%'字符”。
斜体
斜体的字体被用于强调,like this 。
粗体
粗体用于存取权限名字(例如,“不要轻易授权process权限”)并表达特别强调。
当命令显示出准备由一个特定的程序执行时,程序由命令所显示的提示符指出。例如,shell> 表明你从你的登录外壳执行一个命令,而mysql>表明你从mysql客户执行命令:
shell> 在这键入一个shell命令
mysql> 在这里键入一个mysql命令
shell命令用 Bourne shell语法显示。如果你正在使用csh风格的外壳,你可能需要用略微不同的方式发出命令。例如,设置一个环境变量和运行一个命令的序列在 Bourne shell语法看起来像这样:
shell> VARNAME=value some_command
对于csh,你将执行这样的序列:
shell> setenv VARNAME value
shell> some_command
数据库、表和列名字经常必须被代入命令中。为表明这种代入是必要的,本手册使用db_name、tbl_name和col_name。例如,你可能看到象这样的语句:
mysql> SELECT col_name FROM db_name.tbl_name;
这意味着如果你想输入类似的语句,你将提供你自己数据库、表和列的名字,也许像这样:
mysql> SELECT author_name FROM biblio_db.author_list;
SQL语句可以写成大写或小写的。当本手册显示SQL语句时,如果讨论这些关键字,大写被用于特定的关键字(强调它们)而小写被用于语句的其他部分。因此你可能在讨论SELECT语句时看到如下显示:
mysql> SELECT count(*) FROM tbl_name;
另一方面,在讨论COUNT()函数时,语句将写成这样:
mysql> select COUNT(*) from tbl_name;
如果不有意地特别强调,所有的关键字一律写成大写。
在句法描述中,方括号('['和']')被用来表示任选的词或子句:
DROP TABLE [IF EXISTS] tbl_name
当一个语法元素由很多选择组成时,各选择用垂直线分开('|')。当可能从一组选择中选择一个成员时,选择在方括号内被列出。当必须从一组选择中选择一个成员时,选择在花括号内被列出('{'和'}'):
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
{DESCRIBE | DESC} tbl_name {col_name | wild}
1.3 MySQL 的历史
我们曾经开始打算利用mSQL用我们自己的快速底层(ISAM)实用程序连接我们的数据库表,然而,在一些测试以后我们得到出结论:mSQL对我们的需求来说不够快速和灵活。这导致了一个连接我们数据库的新SQL接口,但它几乎有与mSQL相同的应用编程接口。选择这个应用编程接口以方便第三方的代码移植。
MySQL名字的由来不是非常清楚。我们的基目录和很多的库和工具具有前缀“my”已超过10年历史,然而,Monty的女儿(年轻几岁的)也被命名"my"。因此其中哪一个原因给MySQL起了这个名字仍然是一个谜,甚至对我们。
1.4 MySQL 的主要特征
下表描述MySQL一些重要的特征:
* 使用核心线程的完全多线程。这意味着它能很容易地利用多CPU(如果有)。
* C 、C++、 Eiffel 、 Java、 Perl、 PHP、Python、和 TCL API。见20 MySQL 客户工具和 API。
* 可运行在不同的平台上,见4.2 MySQL支持的操作系统。
* 多种列类型:1、 2、 3、4、和 8 字节长度的有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、SET和ENUM类型。 见7.3 列类型。
* 利用一个优化的一遍扫描多重联结(one-sweep multi-join)非常快速地进行联结(join)。
* 在查询的SELECT和WHERE部分支持全部运算符和函数,例如:
mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name
WHERE income/dependents > 10000 AND age > 30;
* 通过一个高度优化的类库实现SQL函数库并且像他们能达到的一样快速,通常在查询初始化后不应该有任何内存分配。
* 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数( COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、 MAX()和MIN() )。
* 支持ANSI SQL的LEFT OUTER JOIN和ODBC语法。
* 你可以在同一查询中混用来自不同数据库的表。(与版本 3.22一样 )。
* 一个非常灵活且安全的权限和口令系统,并且它允许基于主机的认证。口令是安全的,因为当与一个服务器连接时,所有的口令传送被加密。
* ODBC for Windiws 95。所有的 ODBC 2 . 5 函数和其他许多函数。例如,你可以用Access连接你的 MySQL服务器。见16 MySQL ODBC 支持。
* 具备索引压缩的快速B树磁盘表。
* 每个表允许有16个索引。每个索引可以由1~16个列或列的一部分组成。最大索引长度是 256 个字节(在编译MySQL时,它可以改变)。一个索引可以使用一个CHAR或VARCHAR字段的前缀。
* 定长和变长记录。
* 用作临时表的内存散列表。
* 大数据库处理。我们正在对某些包含 50,000,000 个记录的数据库使用MySQL。
* 所有列都有缺省值,你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的缺省值。
* 为了可移植性使用 GNU Automake , Autoconf 和libtool。
* 用C和C++编写,并用大量不同的编译器测试。
* 一个非常快速的基于线程的内存分配系统。
* 没有内存漏洞。用一个商用内存漏洞监测程序测试过(purify)。
* 包括myisamchk,一个检查、优化和修复数据库表的快速实用程序,详见13 维护 MySQL安装。
* 全面支持ISO-8859-1 Latin1 字符集。例如,斯堪的纳维亚的字符 @ringaccent{a}, @"a and @"o 在表和列名字被允许。
* 所有数据以 ISO-8859-1 Latin1 格式保存。所有正常的字符串比较是忽略大小写的。
* 根据 ISO-8859-1 Latin1 字符集进行排序(目前瑞典语的方式)。通过在源代码中增加排序顺序数组可以改变它。为了理解一个更高级的排序例子,看一看捷克语的排序代码。MySQL支持可在编译时指定的很多不同的字符集。
* 表和列的别名符合 SQL92 标准。
* DELETE、INSERT、REPLACE和UPDATE 返回有多少行被改变(受影响)。
* 函数名不会与表或列名冲突。例如ABS是一个有效的列名字。对函数调用的唯一限制是函数名与随后的“(”不能有空格。详见7.31 MySQL对保留字很挑剔吗?。
* 所有MySQL程序可以用选项--help或-?获得联机帮助。
* 服务器能为客户提供多种语言的出错消息,详见9.1 MySQL支持哪些语言?。
* 客户端使用TCP/IP 连接或Unix套接字(socket)或NT下的命名管道连接MySQL。
* MySQL特有的SHOW命令可用来检索数据库、表和索引的信息,EXPLAIN命令可用来确定优化器如何解决一个查询。
1.5 MySQL的稳定性?
本小节回答这样的问题:“MySQL的稳定程度?”和 “我能在本项目中依赖MySQL吗?”。这里我们将试图澄清一些问题并且回答似乎很多人关心的更重要的问题。本节已经与从邮件列表(它在报导错误是很活跃的)收集了的信息综合在一起。
对TcX,MySQL在我们自1996中期开始的计划中运行没有发生任何问题。当MySQL被更公开地发布时,我们注意到了有一些 “未测试代码”片断很快地被不同于我们的查询方式的新用户发现。每个新版本比前一个都有更少的可移植性问题(尽管每个发行有许多新功能),并且我们希望有可能把下一个版本之一标记为“稳定”的。
每个MySQL的发行都是可用的,并且只有当用户使用从“灰色地带”来的代码时才有问题,当然,不知情的用户不能知道灰色地带是什么;本小节尝试揭示我们目前已知的东西。这里的描述涉及MySQL 3. 22.x 版本。所有已知和报告的错误都会在最新的版本被更正,除了在错误小节中列出的与“设计n”有关的错误。详见E MySQL已知的错误和设计缺陷。
MySQL以多层结构和不同的独立模块编写,这些模块列举在下面以表明它们中的每一个是如何很好地被测试过:
ISAM表处理器--稳定
它管理所有在MySQL 3.22和早期版本中的数据的存储和检索。在所有MySQL版本中,代码中已经没有一个单独(报告的)错误。得到一个损坏的数据库表的唯一已知方法是在一个更新中途杀死服务器,即使这样也不大可能破坏任何数据而不能挽救,因为所有数据在每个查询之间被倒入(flush)到磁盘,而且从来没有一个有关由于MySQL中的错误而丢失数据的错误报告。
MyISAM 表处理器-- Beta
这是 MySQL 3.23的新功能,它大部分是基于ISAM表代码但有很多新的有用的功能。
语法处理器和词法分析器 --稳定
很长时间没有一个在这个系统中的错误报告。
C 客户代码--稳定
没有已知的问题。在早期的 3. 20版本中,在发送/接收缓冲器的大小上有一些限制。 3.21.x后,现在缓冲器的大小是动态的,可到一个24M的缺省值。
标准客户程序--稳定
这些包括mysql、mysqladmin和mysqlshow、mysqldump及mysqlimport。
基本结构式查询语言--稳定
基本SQL函数系统、字符串类和动态内存处理,本系统中未见单独报告的错误。
查询优化程序--稳定
范围优化程序-- Gamma
Join优化器--稳定
锁定-- Gamma
这是非常依赖于系统的,在某些系统上,用标准操作系统锁定(fcntl())有很大问题,在这些情况下,你应该用选项--skip-locking运行MySQL守护程序。当使用NFS挂载的文件系统,已知在一些 Linux 系统上和SunOS上出现问题。
Linux 线程-- Gamma
唯一发现的问题式fcntl()调用,它通过使用mysqld的--skip-locking选项解决。一些人已经报告了0.5版中的锁定问题。
Solaris 2.5 + pthreads --稳定
我们在我们的开发工作中使用。
MIT-pthreads (其他系统)-- Gamma
自从 3.20.15版以来,没有报告的错误,而且从3.20.16开始没有已知的错误。在一些系统上,在一些操作是相当慢时(在每查询之间有 1/20秒的睡眠 )有一个“功能失效”。当然,MIT-pthreads 可能使任何事情慢一点,但是基于索引的SELECT语句通常在一个时帧内完成,因此不应该有一个mutex 锁定/线程的把戏。
其他线程实现 -- Alpha - Beta
移植到其他系统仍然是很新的并且可能有错误,可能是在MySQL中,但是最通常的是线程实现本身。
LOAD DATA ... ,INSERT ... SELECT --稳定
一些人已经认为他们在这里发现了错误,但是这些经常多是误解。请在报告问题前检查手册!
ALTER TABLE --稳定
在 3.22.12中有小的改变。
DBD --稳定
现在由 Jochen Wiedmann 维护了。
mysqlaccess --稳定
由 Yves Carlier 编写并维护。
GRANT -- Gamma
MySQL 3.22.12.做了很大改变。
MyODBC (使用 ODBC SDK 2.5 )-- Gamma
它与一些程序似乎工作得很好。
TcX 为付费客户提供电子邮件的支持,但是MySQL邮件列表通常提供常见问题的答案,错误通常马上用一个补丁修补,对严重的错误,几乎总是有新的版本发行。
1.6 顺应2000年(Year 2000 compliance)
MySQL本身己没有2000年有问题( Y2K ):
* MySQL使用Unix时间函数并且在2069年前没有日期问题, 所有2位年份被认为在1970年到2069年的范围,这意味着如果在一个year类型的列中存储的01,MySQL把它当作2001。
* 所有MySQL日期函数存储在一个文件'sql/time.cc'中,并且很仔细地编码保证是2000年安全的 。
* MySQL 3.22 和以后的版本,新的YEAR类型的列能在一个字节中存储0年和1901年到2155年,并用使用2或4位显示它们。
你可以用一种不是Y2K-safe的方式使用 MySQL应用程序来深入该问题。例如,许多老的应用程序使用2位数字(它有二义性)而非4位数字存储或操作年份,这个问题可能与使用诸如00或99作为“丢失的”值的提示的应用程序混淆起来。
很不幸,这些问题可能很难修复,因为不同的应用程序可能由不同程序员编写,其中每一个可能使用了不同的约定和日期处理函数。
这里是简单的示范,显示MySQL在 2030 年之前没有任何日期问题。
mysql> DROP TABLE IF EXISTS y2k;
mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp);
mysql> INSERT INTO y2k VALUES ("1998-12-31","1998-12-31 23:59:59",19981231235959);
mysql> INSERT INTO y2k VALUES ("1999-01-01","1999-01-01 00:00:00",19990101000000);
mysql> INSERT INTO y2k VALUES ("1999-09-09","1999-09-09 23:59:59",19990909235959);
mysql> INSERT INTO y2k VALUES ("2000-01-01","2000-01-01 00:00:00",20000101000000);
mysql> INSERT INTO y2k VALUES ("2000-02-28","2000-02-28 00:00:00",20000228000000);
mysql> INSERT INTO y2k VALUES ("2000-02-29","2000-02-29 00:00:00",20000229000000);
mysql> INSERT INTO y2k VALUES ("2000-03-01","2000-03-01 00:00:00",20000301000000);
mysql> INSERT INTO y2k VALUES ("2000-12-31","2000-12-31 23:59:59",20001231235959);
mysql> INSERT INTO y2k VALUES ("2001-01-01","2001-01-01 00:00:00",20010101000000);
mysql> INSERT INTO y2k VALUES ("2004-12-31","2004-12-31 23:59:59",20041231235959);
mysql> INSERT INTO y2k VALUES ("2005-01-01","2005-01-01 00:00:00",20050101000000);
mysql> INSERT INTO y2k VALUES ("2030-01-01","2030-01-01 00:00:00",20300101000000);
mysql> INSERT INTO y2k VALUES ("2050-01-01","2050-01-01 00:00:00",20500101000000);
mysql> SELECT * FROM y2k;
+------------+---------------------+----------------+
| date | date_time | time_stamp |
+------------+---------------------+----------------+
| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |
| 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |
| 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |
| 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |
| 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |
| 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |
| 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |
| 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |
| 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |
| 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |
| 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |
| 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |
| 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 |
+------------+---------------------+----------------+
13 rows in set (0.00 sec)
这表示DATE和DATETIME类型将不会有未来日期的任何问题(它们处理日期到 9999 )。
TIMESTAMP类型被用来存储当前时间,有一个仅2030-01-01的上限。TIMESTAMP在32位的机器上(有符号值)有一个从1970到2030的范围,在64位机器上它处理时间可达2106(无符号值)。
尽管MySQL是顺应Y2K的,但提供无二义性的输入是你的责任。对于MySQL处理二义性日期的输入(包含2位数字年份)的规则,详见7.3.6.1 Y2K 问题和日期类型。
1.7 SQL一般信息和教程
在MySQL邮件列表上,这本书被多人推荐:
Judith S. Bowman, Sandra L. Emerson and Marcy Darnovsky
The Practical SQL Handbook: Using Structured Query Language
Second Edition
Addison-Wesley
ISBN 0-201-62623-3
http://www.awl.com
这本书也接受了 MySQL 用户的一些建议:
Martin Gruber
Understanding SQL
ISBN 0-89588-644-8
Publisher Sybex 510 523 8233
Alameda, CA USA
一本SQL语言教程可在 http://www.geocities.com/SiliconValley/Vista/2207/sql1.html 找到。
SQL in 21 Tagen (用德语写的网上书籍) http://www.mut.de/leseecke/buecher/sql/inhalt.htm 。
1.8 有用的MySQL相关链接
1.8.1 教程
* A beginner's tutoral of how to start using MySQL
* http://www.analysisandsolutions.com/code/mybasic.htm 新手如何在一台Windows 机器上安装和设置MySQL。
* 很多MySQL教程
* 建立一个基于 MySQL的网站
* MySQL- perl 教程
* PHP/MySQL 教程
1.8.2 Perl相关链接
* MySQL 的Perl DBI FAQ
1.8.3 MySQL 讨论论坛
* 使用MySQL实例 (check Top 20)
1.8.4 支持 MySQL 的商业应用
* SupportWizard; Interactive helpdesk on the web (This product includes a licensed copy of MySQL)
* Right Now Web; Web automation for customer service
* Bazaar; Interactive Discussion Forums with web interface
* PhoneSweepT 是世界的第一个商业电话扫描仪.近年来的很多侵入不是通过因特网,而是通过非法的拨号调制解调器. PhoneSweep 让你通过循环地将电话发到你的公司控制的每个号码上来发现这些调制解调器, PhoneSweep有一个内置的专家系统,能识别出超过 250 种不同类型的遥远存取程序,包括Carbon CopyT 、pcANYWHERET 和 Windows NT RAS .所有信息保存在SQL数据库,最后产生一份详细易懂的报告,说明你公司内那个拨号调制解调器的那项服务被刺探。
1.8.5 SQL客户程序
* 微软Windows 平台上MySQL编辑器/实用程序
* KDE MySQL 客户
* Kiosk:一个用于数据库管理的 MySQL客户 用 Perl编写,将成为Bazaar的一部分。
1.8.6 支持MySQL的Web 开发工具
* PHP :一种服务器端的嵌入HTML的脚本语言
* Midgard 应用服务器:基于 MySQL 和 PHP强大的网站开发环境
* SmartWorker 是一个Web应用开发平台
* XSP: e(X)tendible (s)erver (p)ages :是一个用Java 编写的嵌入 HTML的标签语言(以前 XTAGS出名)
* dbServ:是对Web服务器的扩充,它将到数据库输出集成进你的 HTML编码。你可以在你的输出使用任何 HTML函数,只有客户端能阻止你。它作为独立的服务器或作为 Java servlet 运行。
* Chili!Soft 平台无关的ASP
* MySQL + PHP demos
* ForwardSQL:操作的MySQL数据库的 HTML 接口
* WWW-SQL:显示数据库信息
* Minivend :Web购物车
* HeiTML:是HTML的服务器端扩充,同时又是一种第四代语言语言
* Metahtml:一种WWW应用程序的动态编程语言
* VelocityGen for Perl and TCL
* Hawkeye 因特网服务器套件
* Linux网络数据库连接
* WDBI:是作为一个很好支持MySQL数据库的通用前端的Web浏览器
* WebGroove 脚本: HTML编译器和服务器端脚本语言
* 一种服务器端网站脚本语言
* 怎样在 Solaris 上用Coldfusion使用MySQL
* Calistra 的 ODBC MySQL管理器
* Webmerger:这个CGI工具解释文件并且生成基于一套简单标签的动态输出,通过 ODBC 提供MySQL和PostgreSQL的Ready-to-run 驱动程序。
* PHPclub:PHP 的技巧
* MySQL 和 Perl 脚本
* Widgetchuck :网站工具和小配件
* AdCycle:广告管理软件
1.8.7 用 MySQL 支持的数据库设计工具
* "Dezign for databases" 是使用一个实体关系图表的数据库开发工具( ERD ).
1.8.8 使用MySQL工具的Web服务器
* 一个 Apache 认证模块
* The Roxen Challenger Web server
1.8.9 对其他程序的扩充
* 一个有源代码的MySQL的 Delphi 接口. 由 Matthias Fichtner 编写。
* TmySQL:一个通过Delphi使用MySQL的库
* Delphi TDataset部件
* 支持BIND(Internel域名服务器)
* 使用 MySQL 的 Sendmail扩充
1.8.10 通过其他程序使用MySQL
* 通过Access使用 MySQL
1.8.11 ODBC有关的链接
* 流行的 iODBC 驱动程序( libiodbc )现在以开放源代码获得
* FreeODBC 主页
1.8.12 API有关的链接
* www.jppp.com:为MySQL部分实现了TDataset兼容的部件。
* qpopmysql:一个允许MySQL数据库进行 POP3 认证补丁。还有一个到Paul Khavkine的Procmail补丁的连接,允许任何MTA向MySQL数据库中的用户投递信件。
* 针对Active X的Visual Basic 类生成器
* Macintosh 的客户库
* Free Pascal的MySQL绑定
* SCMDB:SCMDB 是SCM的一个插件,SCM移植 mysql的C语言库到概念框架(scheme)。利用这个库,框架开发者能连接到一个mySQL数据库并且在他们的程序钟使用嵌入式SQL。
1.8.13 其它MySQLx有关的链接
* Registry of Web providers who support MySQL
* Links about using MySQL / MySQL in Japan/Asia
* Commercial Web defect tracking system
* PTS: Project Tracking System
* Job and software tracking system
* ExportSQL: A script to export data from Access95+
* SAL (Scientific Applications on Linux) MySQL entry
* A consulting company which mentions MySQL in the right company
* PMP Computer Solutions. Database developers using MySQL and mSQL
* Airborne Early Warning Association
* MySQL UDF Registry
* Y2K tester
1.8.14 SQL和数据库接口
* KMySQL:KMySQL 是主要支持MySQL的KDE数据库库护程序。
* JDBC 数据库存取应用程序接口
* mSQL TCL 补丁
* EasySQL :一个类ODBC驱动程序管理器
* SQL数据库的一个 REXX 接口
* TCL 接口
1.8.15 使用MySQL的例子
* Little6 Inc An online contract and job finding site that is powered by MySQL, PHP3 and Linux.
* DELECis A tool which makes it very easy to create an automatically generated table documentation. They have used MySQL as an example.
* Steve Fambro Uses MySQL and webmerger. There is an employee database, and a license plate database with all of the registered Utah vehicles (over 1.2 million). The License plate field is indexed.....so the *searches* are instantaneous.
* World Records A search engine for information about music that uses MySQL and PHP.
* A Contact Database using MySQL and PHP
* Web based interface and Community Calender with PHP
* Perl package to generate html from a SQL table structure and for generating SQL statements from an html form.
* Basic telephone database using DBI/DBD.
* Installing new Perl modules that require locally installed modules
* JDBC examples by Daniel K. Schneider
* SQL BNF
* Object Oriented Concepts Inc; CORBA applications with examples in source
* DBWiz; Includes an example of how to manage own cursors in VB
* Pluribus Pluribus, is a free search engine that learns to improve the quality of its results over time. Pluribus works by recording which pages a user prefers among those returned for a query. A user votes for a page by selecting it; Pluribus then uses that knowledge to improve the quality of the results when someone else submits the same (or similar) query. Uses PHP and MySQL.
* Stopbit A technology news site using MySQL and PHP
* Example scripts at Jokes2000
* FutureForum Web Discussion Software
* http://www.linuxsupportline.com/~kalendar/ KDE based calendar manager The calendar manager has both single user (file based) and multi user (MySQL database) support.
* Example of storing/retrieving images with MySQL and CGI
* Online shopping cart system
* Old Photo Album The album is a collaborative popular history of photography project that generates all pages from data stored in a MySQL database. Pages are dynamically generated through a php3 interface to the database content. Users contribute images and descriptions. Contributed images are stored on the web server to avoid storing them in the database as BLOBs. All other information is stored in on the shared MySQL server.
1.8.16 一般的数据库链接
* Database Jump Site
* Homepage of the webdb-l (Web Databases) mailing list.
* Perl DBI/DBD modules homepage
* Cygwin tools. UNIX on top of Windows
* dbasecentral.com; Development and distribution of powerful and easy-to-use database applications and systems.
* Tek-Tips Forums Tek-Tips Forums are 800+ independent peer-to-peer non-commercial support forums for Computer Professionals. Features include automatic e-mail notification of responses, a links library, and member confidentiality guaranteed.
也有很多网页使用 MySQL。详见A 一些 MySQL 用户。将任何新增发送到这张表中,并在某处加上 MySQL 标识(在一个“使用工具”的页面或类似的地方)。
|
|