描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787514376388丛书名: 数据库深度开发指南系列用书
编辑推荐
《中公版·数据库深度开发指南:MySQL数据库理论与实战》体系科学,条理清晰,语言通俗易懂,讲解深入浅出。本书主要面向的读者为准备使用MySQL的软件测试人员、软件开发人员和系统运维人员。
本书适合各个阶段的读者,对于初学者,可以从基础篇开始学习MySQL基础知识;对于有基础的读者,可以从开发篇中学习一些开发使用技巧;对于经常使用MySQL数据库的读者,也可以在优化、运维篇中学到较为高级的知识。因此,不同层次的读者都能在本书中有所收获。
本书采用双色印刷形式,图文并茂。配套视频讲解等增值服务是本书一大特色,重要实验提供专业讲师的视频讲解,扫描书中二维码即可实现在线学习,操作便捷高效。
内容简介
《中公版·数据库深度开发指南:MySQL数据库理论与实战》本书共分为十八章,包括基础篇、开发篇、优化篇和运维篇四部分内容,涵盖了MySQL知识体系中,从MySQL安装、SQL语句,到基本数据类型和函数以及数据库基本组件的相关知识点,再到面向开发人员和运维人员的SQL优化和备份恢复等内容。本书以由浅入深、循序渐进为原则,对于较难理解的知识点,通过相关实验的操作与分析,力求让读者对MySQL的基本知识点和相关业务应用能有更加全面的学习和掌握。
●基础篇(*章至第六章)
介绍数据库基本概念、MySQL的安装与使用、基本数据类型、常用运算符以及常用函数。
●开发篇(第七章至第十二章)
讲解SQL查询语句在MySQL中的应用,以及开发人员经常用到的数据库基本组件,包括索引、视图、存储过程、存储函数、触发器,*后介绍能保证业务数据完整性和一致性的事务控制与锁。
●优化篇(第十三章至第十五章)
介绍MySQL独有的存储引擎,以及SQL优化和数据库对象优化的常用手段。
●运维篇(第十六章至第十八章)
讲解MySQL运维人员经常面对的用户和安全管理、常用日志,以及确保数据安全备份与恢复的具体操作步骤。
●基础篇(*章至第六章)
介绍数据库基本概念、MySQL的安装与使用、基本数据类型、常用运算符以及常用函数。
●开发篇(第七章至第十二章)
讲解SQL查询语句在MySQL中的应用,以及开发人员经常用到的数据库基本组件,包括索引、视图、存储过程、存储函数、触发器,*后介绍能保证业务数据完整性和一致性的事务控制与锁。
●优化篇(第十三章至第十五章)
介绍MySQL独有的存储引擎,以及SQL优化和数据库对象优化的常用手段。
●运维篇(第十六章至第十八章)
讲解MySQL运维人员经常面对的用户和安全管理、常用日志,以及确保数据安全备份与恢复的具体操作步骤。
目 录
目录
基础篇
1.1数据库基础
1.1.1数据库
1.1.2数据表
1.1.3列及数据类型
1.1.4记录
1.1.5主键
1.2SQL简介
2.1关系型数据库
2.2MySQL起源
2.3MySQL优势
2.4MySQL5.7特性
2.4.1安全性
2.4.2灵活性
2.4.3易用性
2.4.4可用性
2.4.5性能
3.1下载与安装MySQL
3.1.1基于Windows操作系统的下载与安装
3.1.2基于Linux操作系统的下载与安装
3.2使用MySQL
3.2.1操作MySQL数据库
3.2.2操作MySQL数据表
4.1数值类型
4.1.1整数类型
4.1.2近似数值类型
4.1.3位值类型
4.2字符串类型
4.2.1char与varchar类型
4.2.2binary与varbinary类型
4.2.3enum类型
4.2.4set类型
4.3日期和时间类型
4.3.1date、time与datetime类型
4.3.2timestamp类型
4.3.3year类型
5.1算术运算符
5.2比较运算符
5.3逻辑运算符
5.4位运算符
5.5运算符优先级
6.1数值函数
6.2字符串函数
6.3日期和时间函数
6.4流程控制函数
6.5其他常用函数
开发篇
7.1基本查询语句
7.2单表查询
7.2.1查询所有字段
7.2.2查询部分字段
7.2.3使用where语句进行筛选查询
7.2.4使用orderby语句对结果集排序
7.2.5使用groupby语句对结果集分组
7.2.6使用聚集函数查询
7.3多表查询
7.3.1连接查询
7.3.2嵌套子查询
7.3.3集合查询
8.1索引概述
8.2索引类型
8.2.1普通索引与索引
8.2.2单列索引与多列索引
8.2.3全文索引
8.3索引设计原则
8.4创建索引
8.4.1在创建表时创建索引
8.4.2在已创建的表上创建索引
8.5删除索引
9.1视图概述
9.2视图的基本操作
9.2.1创建视图
9.2.2修改视图
9.2.3查看视图
9.2.4更新视图
9.2.5删除视图
10.1存储过程和函数概述
10.2创建存储过程和函数
10.2.1创建存储过程
10.2.2创建存储函数
10.2.3使用变量
10.2.4使用游标
10.2.5使用流程控制
10.3调用存储过程和函数
10.4查看存储过程和函数
10.5修改存储过程和函数
10.6删除存储过程和函数
11.1触发器概述
11.2触发器类型
11.3创建触发器
11.4查看触发器
11.5删除触发器
12.1事务概述
12.2事务隔离级别
12.2.1读未提交(READUNCOMMITTED)
12.2.2读已提交(READCOMMITTED)
12.2.3可重复读(REPEATABLEREAD)
12.2.4可串行化(SERIALIZABLE)
12.3事务控制语句
12.4InnoDB的锁
12.4.1锁的粒度
12.4.2锁的种类
优化篇
13.1存储引擎概述
13.2存储引擎类型
13.3InnoDB存储引擎
13.3.1InnoDB存储结构
13.3.2InnoDB内存结构
13.3.3InnoDB特性
14.1索引对DML语句效率的影响
14.1.1实验准备
14.1.2explain语句
14.1.3实验一:百万记录取1条
14.1.4实验二:百万记录取1000条
14.1.5实验三:百万记录取全部
14.1.6实验四:百万记录更新1条
14.1.7实验五:百万记录更新索引字段
14.1.8实验六:删除百万记录
14.1.9实验七:插入百万记录
14.1.10索引使用总结
14.2SQL语句写法对查询效率的影响
14.2.1避免使用表达式作为查询条件
14.2.2尽量使用in替代or
14.2.3条件列表值连续时使用between替代in
14.2.4无重复记录结果集使用unionall合并
14.2.5有条件使用where子句替代having子句
14.2.6使用like时通配符要放在右侧
14.3表分区对查询效率的影响
14.3.1创建分区表
14.3.2普通表与分区表查询效率对比
15.1数据表设计因素
15.2数据库结构优化
15.2.1数据量因素
15.2.2数据类型因素
15.2.3存储引擎因素
15.3数据对象维护SQL语句
15.3.1checktable语句
15.3.2checksumtable语句
15.3.3repairtable语句
15.3.4analyzetable语句
15.3.5optimizetable语句
运维篇
16.1用户和权限管理
16.1.1用户验证的三个基本要素
16.1.2创建用户
16.1.3设置用户密码
16.1.4重命名用户
16.1.5删除用户
16.1.6权限级别
16.1.7权限类型
16.1.8授权
16.1.9查看用户权限
16.1.10撤销授权
16.1.11授权表
16.1.12用户验证流程
16.1.13查看连接用户进程状态
16.2制定数据安全策略
16.2.1数据库级安全策略
16.2.2操作系统级安全策略
16.2.3网络级安全策略
16.2.4业务级安全策略
17.1日志概述
17.2错误日志
17.2.1查看错误日志的位置
17.2.2查看错误日志的内容
17.3查询日志
17.3.1查看查询日志的位置和状态
17.3.2临时开启查询日志
17.3.3永久开启查询日志
17.4慢查询日志
17.4.1查看慢查询日志的位置和状态
17.4.2临时开启慢查询日志
17.4.3永久开启慢查询日志
17.5二进制日志
17.5.1查看二进制日志的位置和状态
17.5.2开启二进制日志
17.5.3二进制日志的格式
17.5.4查看二进制日志的内容
17.5.5管理二进制日志
17.5.6二进制日志的切换
18.1备份与恢复概述
18.2数据库备份
18.3常用的备份工具
18.3.1物理备份工具
18.3.2逻辑备份工具
18.4mysqldump详解
18.4.1使用mysqldump导出数据
18.4.2mysqldump相关选项
18.4.3mysqldump备份
18.4.4还原mysqldump备份
18.4.5数据库恢复
18.5物理备份冷备实验
18.5.1实验描述
18.5.2建立数据库备份
18.5.3记录备份时日志序号
18.5.4插入测试数据
18.5.5切换日志
18.5.6添加测试用户
18.5.7再次切换日志
18.5.8模拟数据库损坏
18.5.9还原冷备份
18.5.10恢复数据到故障之前状态
18.5.11登录验证恢复结果
18.5.12实验总结
18.6逻辑备份不完全恢复实验
18.6.1实验描述
18.6.2查看当前test库的状态
18.6.3数据库逻辑备份
18.6.4插入测试数据
18.6.5模拟误删数据
18.6.6数据还原
18.6.7数据恢复
18.6.8实验总结
基础篇
1.1数据库基础
1.1.1数据库
1.1.2数据表
1.1.3列及数据类型
1.1.4记录
1.1.5主键
1.2SQL简介
2.1关系型数据库
2.2MySQL起源
2.3MySQL优势
2.4MySQL5.7特性
2.4.1安全性
2.4.2灵活性
2.4.3易用性
2.4.4可用性
2.4.5性能
3.1下载与安装MySQL
3.1.1基于Windows操作系统的下载与安装
3.1.2基于Linux操作系统的下载与安装
3.2使用MySQL
3.2.1操作MySQL数据库
3.2.2操作MySQL数据表
4.1数值类型
4.1.1整数类型
4.1.2近似数值类型
4.1.3位值类型
4.2字符串类型
4.2.1char与varchar类型
4.2.2binary与varbinary类型
4.2.3enum类型
4.2.4set类型
4.3日期和时间类型
4.3.1date、time与datetime类型
4.3.2timestamp类型
4.3.3year类型
5.1算术运算符
5.2比较运算符
5.3逻辑运算符
5.4位运算符
5.5运算符优先级
6.1数值函数
6.2字符串函数
6.3日期和时间函数
6.4流程控制函数
6.5其他常用函数
开发篇
7.1基本查询语句
7.2单表查询
7.2.1查询所有字段
7.2.2查询部分字段
7.2.3使用where语句进行筛选查询
7.2.4使用orderby语句对结果集排序
7.2.5使用groupby语句对结果集分组
7.2.6使用聚集函数查询
7.3多表查询
7.3.1连接查询
7.3.2嵌套子查询
7.3.3集合查询
8.1索引概述
8.2索引类型
8.2.1普通索引与索引
8.2.2单列索引与多列索引
8.2.3全文索引
8.3索引设计原则
8.4创建索引
8.4.1在创建表时创建索引
8.4.2在已创建的表上创建索引
8.5删除索引
9.1视图概述
9.2视图的基本操作
9.2.1创建视图
9.2.2修改视图
9.2.3查看视图
9.2.4更新视图
9.2.5删除视图
10.1存储过程和函数概述
10.2创建存储过程和函数
10.2.1创建存储过程
10.2.2创建存储函数
10.2.3使用变量
10.2.4使用游标
10.2.5使用流程控制
10.3调用存储过程和函数
10.4查看存储过程和函数
10.5修改存储过程和函数
10.6删除存储过程和函数
11.1触发器概述
11.2触发器类型
11.3创建触发器
11.4查看触发器
11.5删除触发器
12.1事务概述
12.2事务隔离级别
12.2.1读未提交(READUNCOMMITTED)
12.2.2读已提交(READCOMMITTED)
12.2.3可重复读(REPEATABLEREAD)
12.2.4可串行化(SERIALIZABLE)
12.3事务控制语句
12.4InnoDB的锁
12.4.1锁的粒度
12.4.2锁的种类
优化篇
13.1存储引擎概述
13.2存储引擎类型
13.3InnoDB存储引擎
13.3.1InnoDB存储结构
13.3.2InnoDB内存结构
13.3.3InnoDB特性
14.1索引对DML语句效率的影响
14.1.1实验准备
14.1.2explain语句
14.1.3实验一:百万记录取1条
14.1.4实验二:百万记录取1000条
14.1.5实验三:百万记录取全部
14.1.6实验四:百万记录更新1条
14.1.7实验五:百万记录更新索引字段
14.1.8实验六:删除百万记录
14.1.9实验七:插入百万记录
14.1.10索引使用总结
14.2SQL语句写法对查询效率的影响
14.2.1避免使用表达式作为查询条件
14.2.2尽量使用in替代or
14.2.3条件列表值连续时使用between替代in
14.2.4无重复记录结果集使用unionall合并
14.2.5有条件使用where子句替代having子句
14.2.6使用like时通配符要放在右侧
14.3表分区对查询效率的影响
14.3.1创建分区表
14.3.2普通表与分区表查询效率对比
15.1数据表设计因素
15.2数据库结构优化
15.2.1数据量因素
15.2.2数据类型因素
15.2.3存储引擎因素
15.3数据对象维护SQL语句
15.3.1checktable语句
15.3.2checksumtable语句
15.3.3repairtable语句
15.3.4analyzetable语句
15.3.5optimizetable语句
运维篇
16.1用户和权限管理
16.1.1用户验证的三个基本要素
16.1.2创建用户
16.1.3设置用户密码
16.1.4重命名用户
16.1.5删除用户
16.1.6权限级别
16.1.7权限类型
16.1.8授权
16.1.9查看用户权限
16.1.10撤销授权
16.1.11授权表
16.1.12用户验证流程
16.1.13查看连接用户进程状态
16.2制定数据安全策略
16.2.1数据库级安全策略
16.2.2操作系统级安全策略
16.2.3网络级安全策略
16.2.4业务级安全策略
17.1日志概述
17.2错误日志
17.2.1查看错误日志的位置
17.2.2查看错误日志的内容
17.3查询日志
17.3.1查看查询日志的位置和状态
17.3.2临时开启查询日志
17.3.3永久开启查询日志
17.4慢查询日志
17.4.1查看慢查询日志的位置和状态
17.4.2临时开启慢查询日志
17.4.3永久开启慢查询日志
17.5二进制日志
17.5.1查看二进制日志的位置和状态
17.5.2开启二进制日志
17.5.3二进制日志的格式
17.5.4查看二进制日志的内容
17.5.5管理二进制日志
17.5.6二进制日志的切换
18.1备份与恢复概述
18.2数据库备份
18.3常用的备份工具
18.3.1物理备份工具
18.3.2逻辑备份工具
18.4mysqldump详解
18.4.1使用mysqldump导出数据
18.4.2mysqldump相关选项
18.4.3mysqldump备份
18.4.4还原mysqldump备份
18.4.5数据库恢复
18.5物理备份冷备实验
18.5.1实验描述
18.5.2建立数据库备份
18.5.3记录备份时日志序号
18.5.4插入测试数据
18.5.5切换日志
18.5.6添加测试用户
18.5.7再次切换日志
18.5.8模拟数据库损坏
18.5.9还原冷备份
18.5.10恢复数据到故障之前状态
18.5.11登录验证恢复结果
18.5.12实验总结
18.6逻辑备份不完全恢复实验
18.6.1实验描述
18.6.2查看当前test库的状态
18.6.3数据库逻辑备份
18.6.4插入测试数据
18.6.5模拟误删数据
18.6.6数据还原
18.6.7数据恢复
18.6.8实验总结
在线试读
章
数据库概述
1.1数据库基础
在现实生活中,当在互联网上登录网站时,需要数据库来验证用户登录信息;当搜索资料时,需要数据库来提供用户所需要的信息;当外出购物刷卡消费时,同样需要数据库来记录用户消费信息……人们可能没有意识到自己一直使用着数据库,但数据库却实实在在地存在于人们生活的方方面面。
1.1.1数据库
数据库(Database)是按照一定的数据结构来组织、存储和管理数据的集合或仓库。为了更简单地理解数据库,可以把它想象成一个电脑硬盘,它只是一个用来存放数据的物理位置,通过这个物理位置可以访问到用户存储的信息。
注意,数据库往往会与数据库管理系统这个概念混淆。因为在实际生活中,人们直接使用数据库的专业术语来表示它们使用的数据库管理软件,这是引起概念混淆的主要原因。数据库管理系统简称为DBMS,数据库简称为DB,在实际生活中并不能直接访问和操作数据库,数据库是通过数据库管理系统来创建、访问和操作的容器。
1.1.2数据表
数据表是存储数据的数据结构,它是某种特定类型数据的结构化清单,用来存储某种特定类型的数据。简单来说,一个数据库中的表可以简单地理解为一种电子表格,所有的数据都是以数据表的形式存储在数据库中。在一个数据库中,每个数据表都有一个用来标识自身的特定名称,通过该名称在数据库中可以地找到使用该名称的数据表。
对应于上文中提到的数据库类似于一个电脑硬盘,那么数据表则可以看作是电脑硬盘中的分区。在将数据放入硬盘的时候,并不是把它随便放到一个地方即可,而是先要选择将它存放在电脑硬盘的哪个分区下,比如C盘或者D盘,这里的C盘或者D盘就相当于数据表。
1.1.3列及数据类型
一个数据表由一个或者多个数据列组成,列是数据表中的某一个字段,它保存着数据表中某一部分特定类型的信息。
理解列的概念可以将数据表想象成一个网格,在这个网格中每一列都保存着一类特定的信息。例如,在员工信息表中,一列存储着员工的工号,一列存储着员工的姓名,而员工地址、联系方式等信息也相应地存储在不同的列中,所有的列信息共同构成了一个完整的员工信息表结构。
在数据表中,每一列都有相对应的数据类型,数据类型为允许该列所存储数据的数据种类。例如,上述的员工信息表,工号要求该列所存储的数据全部为整数类型,姓名要求该列所存储的数据全部为字符串类型。
数据类型限制该列中可存储数据的种类,有利于正确地分类数据,还有利于优化磁盘使用和存储。因此,在创建数据表时必须严格定义每一列的数据类型。
1.1.4记录
记录又称为行,每一个数据表中的数据都是按行存储的,所保存的每条记录都存储在自己所属的指定行中。
如果把数据表想象成一个网格,在这个网格中垂直的列称为表列,那么网格中水平的行则称为表行(记录)。例如,在员工信息表中,一条记录存储着一个员工的所有信息,所有的记录共同组成了这个员工信息表数据。
1.1.5主键
在数据库中,每一个数据表都有一个标识该表的名称,而在数据表中,每一条记录也有一个标识该条记录的特定列(或一组列),这个标识该条记录的特定列称为该数据表的主键。
主键用来标识一条特定的记录,如果没有主键,在数据表中操作这条特定的记录会变得异常艰难。虽然在数据表中并不总是需要主键的,但是大多数据表在设计之初都应该保证每个数据表都有一个(或一组)主键,以便于之后的维护和管理。
主键通常定义在数据表的某一列上,但是在实际设计数据表时,也可以同时将数据表的多列作为主键。在使用多列作为主键时,必须满足以下条件:
①任意两条记录都不具有相同的主键值。
②每条记录都必须具有一个主键值。
③设置为主键的列不允许为NULL。
④所有设置为主键的列值组合必须,单个主键列值可以不。
1.2SQL简介
SQL是结构化查询语言的英文缩写,其英文全称为StructuredQueryLanguage。SQL是一种专门用来访问和处理数据库的标准计算机语言。
设计SQL的初目的是提供专门从数据库中读写数据的简单高效的方法,因此,SQL语句只使用几个特殊的关键字即可简单高效地访问数据库。
此外,众多重要的数据库管理系统都支持SQL语句,因此在学习与使用数据库时,学会使用SQL语句十分重要。
注意,尽管SQL是一门ANSI(AmericanNationalStandardsInstitute,美国国家标准化协会)标准的计算机语言,但仍然存在着许多不同版本。本书中所有SQL都是专门针对MySQL数据库管理系统的,虽然该SQL所使用的语法多数也适用于其他数据库管理系统,但是这些SQL并不是完全可以移植的。
数据库概述
1.1数据库基础
在现实生活中,当在互联网上登录网站时,需要数据库来验证用户登录信息;当搜索资料时,需要数据库来提供用户所需要的信息;当外出购物刷卡消费时,同样需要数据库来记录用户消费信息……人们可能没有意识到自己一直使用着数据库,但数据库却实实在在地存在于人们生活的方方面面。
1.1.1数据库
数据库(Database)是按照一定的数据结构来组织、存储和管理数据的集合或仓库。为了更简单地理解数据库,可以把它想象成一个电脑硬盘,它只是一个用来存放数据的物理位置,通过这个物理位置可以访问到用户存储的信息。
注意,数据库往往会与数据库管理系统这个概念混淆。因为在实际生活中,人们直接使用数据库的专业术语来表示它们使用的数据库管理软件,这是引起概念混淆的主要原因。数据库管理系统简称为DBMS,数据库简称为DB,在实际生活中并不能直接访问和操作数据库,数据库是通过数据库管理系统来创建、访问和操作的容器。
1.1.2数据表
数据表是存储数据的数据结构,它是某种特定类型数据的结构化清单,用来存储某种特定类型的数据。简单来说,一个数据库中的表可以简单地理解为一种电子表格,所有的数据都是以数据表的形式存储在数据库中。在一个数据库中,每个数据表都有一个用来标识自身的特定名称,通过该名称在数据库中可以地找到使用该名称的数据表。
对应于上文中提到的数据库类似于一个电脑硬盘,那么数据表则可以看作是电脑硬盘中的分区。在将数据放入硬盘的时候,并不是把它随便放到一个地方即可,而是先要选择将它存放在电脑硬盘的哪个分区下,比如C盘或者D盘,这里的C盘或者D盘就相当于数据表。
1.1.3列及数据类型
一个数据表由一个或者多个数据列组成,列是数据表中的某一个字段,它保存着数据表中某一部分特定类型的信息。
理解列的概念可以将数据表想象成一个网格,在这个网格中每一列都保存着一类特定的信息。例如,在员工信息表中,一列存储着员工的工号,一列存储着员工的姓名,而员工地址、联系方式等信息也相应地存储在不同的列中,所有的列信息共同构成了一个完整的员工信息表结构。
在数据表中,每一列都有相对应的数据类型,数据类型为允许该列所存储数据的数据种类。例如,上述的员工信息表,工号要求该列所存储的数据全部为整数类型,姓名要求该列所存储的数据全部为字符串类型。
数据类型限制该列中可存储数据的种类,有利于正确地分类数据,还有利于优化磁盘使用和存储。因此,在创建数据表时必须严格定义每一列的数据类型。
1.1.4记录
记录又称为行,每一个数据表中的数据都是按行存储的,所保存的每条记录都存储在自己所属的指定行中。
如果把数据表想象成一个网格,在这个网格中垂直的列称为表列,那么网格中水平的行则称为表行(记录)。例如,在员工信息表中,一条记录存储着一个员工的所有信息,所有的记录共同组成了这个员工信息表数据。
1.1.5主键
在数据库中,每一个数据表都有一个标识该表的名称,而在数据表中,每一条记录也有一个标识该条记录的特定列(或一组列),这个标识该条记录的特定列称为该数据表的主键。
主键用来标识一条特定的记录,如果没有主键,在数据表中操作这条特定的记录会变得异常艰难。虽然在数据表中并不总是需要主键的,但是大多数据表在设计之初都应该保证每个数据表都有一个(或一组)主键,以便于之后的维护和管理。
主键通常定义在数据表的某一列上,但是在实际设计数据表时,也可以同时将数据表的多列作为主键。在使用多列作为主键时,必须满足以下条件:
①任意两条记录都不具有相同的主键值。
②每条记录都必须具有一个主键值。
③设置为主键的列不允许为NULL。
④所有设置为主键的列值组合必须,单个主键列值可以不。
1.2SQL简介
SQL是结构化查询语言的英文缩写,其英文全称为StructuredQueryLanguage。SQL是一种专门用来访问和处理数据库的标准计算机语言。
设计SQL的初目的是提供专门从数据库中读写数据的简单高效的方法,因此,SQL语句只使用几个特殊的关键字即可简单高效地访问数据库。
此外,众多重要的数据库管理系统都支持SQL语句,因此在学习与使用数据库时,学会使用SQL语句十分重要。
注意,尽管SQL是一门ANSI(AmericanNationalStandardsInstitute,美国国家标准化协会)标准的计算机语言,但仍然存在着许多不同版本。本书中所有SQL都是专门针对MySQL数据库管理系统的,虽然该SQL所使用的语法多数也适用于其他数据库管理系统,但是这些SQL并不是完全可以移植的。
评论
还没有评论。