无论是运维, 开发, 测试, 还是架构师, 数据库技术是一个必备加薪神器, 那么, 一直说学习数据库, 学 MySQL, 到底是要学习它的哪些东西呢?
01 如何快速掌握 MySQL?
培养兴趣
兴趣是最好的老师, 不论学习什么知识, 兴趣都可以极大地提高学习效率. 当然学习 MySQL 5.6 也不例外.
夯实基础
计算机领域的技术非常强调基础, 刚开始学习可能还认识不到这一点, 随着技术应用的深 入, 只有有着扎实的基础功底, 才能在技术的道路上走得更快, 更远. 对于 MySQL 的学习来说, SQL 语句是其中最为基础的部分, 很多操作都是通过 SQL 语句来实现的. 所以在学习的过程中, 读者要多编写 SQL 语句, 对于同一个功能, 使用不同的实现语句来完成, 从而深刻理解其不同之处.
及时学习新知识
正确, 有效地利用搜索引擎, 可以搜索到很多关于 MySQL 5.6 的相关知识. 同时, 参考别 人解决问题的思路, 也可以吸取别人的经验, 及时获取最新的技术资料.
多实践操作
数据库系统具有极强的操作性, 需要多动手上机操作. 在实际操作的过程中才能发现问题, 并思考解决问题的方法和思路, 只有这样才能提高实战的操作能力.
02 如何选择服务器的类型?
MySQL 服务器配置窗口中各个参数的含义如下.
[Server Configuration Type] 该选项用于设置服务器的类型. 单击该选项右侧的向下按钮, 即可看到包括 3 个选项.
3 个选项的具体含义如下:
Development Machine(开发机器): 该选项代表典型个人用桌面工作站. 假定机器上运行 着多个桌面应用程序. 将 MySQL 服务器配置成使用最少的系统资源.
Server Machine (服务器): 该选项代表服务器, MySQL 服务器可以同其它应用程序一起 运行, 例如 FTP,email 和 web 服务器. MySQL 服务器配置成使用适当比例的系统资源.
DedicatedMySQL Server Machine (专用 MySQL 服务器): 该选项代表只运行 MySQL 服务的服务器. 假定运行没有运行其它应用程序. MySQL 服务器配置成使用所有可用系统资源. 作为初学者, 建议选择 [DevelopmentMachine] (开发者机器) 选项, 这样占用系统的资源 比较少.
03 如何选择存储引擎
不同存储引擎都有各自的特点, 以适应不同的需求, 如下表所示. 为了做出选择:
首先需 要考虑每一个存储引擎提供了哪些不同的功能. 如果要提供提交, 回滚和崩溃恢复能力的事务安全 (ACID 兼容) 能力, 并要求实现并发控 制, InnoDB 是个很好的选择. 如果数据表主要用来插入和查询记录, 则 MyISAM 引擎能提供较 高的处理效率; 如果只是临时存放数据, 数据量不大, 并且不需要较高的数据安全性, 可以选择将数据保存在内存中的 Memory 引擎, MySQL 中使用该引擎作为临时表, 存放查询的中间结果. 如果只有 INSERT 和 SELECT 操作, 可以选择 Archive 引擎, Archive 存储引擎支持高并发的插 入操作, 但是本身并不是事务安全的. Archive 存储引擎非常适合存储归档数据, 如记录日志信 息可以使用 Archive 引擎.
使用哪一种引擎要根据需要灵活选择, 一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求.
使用合适的存储引擎, 将会提高整个数据库的性能.
04 如何查看默认存储引擎?
使用 SHOW ENGINES 语句查看系统中所有的存储引擎, 其中包括默认的存储引擎. 可以看出来当前数据库系统中有五种存储引擎, 默认是 MyISAM. 还可以使用一种直接的方法查看默认存储引擎. 执行结果直接显示了当前默认的存储引擎为 MyISAM.
05 表删除操作须谨慎
表删除操作将把表的定义和表中的数据一起删除, 并且 MySQL 在执行删除操作时, 不会有 任何的确认信息提示, 因此执行删除操时, 应当慎重. 在删除表前, 最好对表中的数据进行备份, 这样当操作失误时, 可以对数据进行恢复, 以免造成无法挽回的后果.
同样的, 在使用 ALTER TABLE 进行表的基本修改操作时, 在执行操作过程之前, 也应该 确保对数据进行完整的备份, 因为数据库的改变是无法撤销的, 如果添加了一个不需要的字段, 可以将其删除; 相同的, 如果删除了一个需要的列, 该列下面的所有数据都将会丢失.
06 每个表中都要有一个主键吗?
并不是每一个表中都需要主键, 一般的, 如果多个表之间进行连接操作时, 需要用到主键. 因此并不需要为每个表建立主键, 而且有些情况最好不使用主键.
07 每个表都可以任意选择存储引擎吗?
外键约束 (FOREIGN KEY) 不能跨引擎使用. MySQL 支持多种存储引擎, 每一个表都可 以指定一个不同的存储引擎, 但是要注意: 外键约束是用来保证数据的参照完整性, 如果表之间 需要关联外键, 却指定了不同的存储引擎, 这些表之间是不能创建外键约束的. 所以说, 存储引 擎的选择也不完全是随意的.
08 带 AUTO_INCREMENT 字段值是从 1 开始吗?
默认的, 在 MySQL 中, AUTO_INCREMENT 的初始值是 1, 每新增一条记录, 字段值自动加 1. 设置自增属性 (AUTO_INCREMENT) 的时候, 还可以指定第一条插入记录的自增字段的 值, 这样新插入的记录的自增字段值从初始值开始递增, 如在 tb_emp8 中插入第一条记录, 同时 指定 id 值为 5, 则以后插入的记录的 id 值就会从 6 开始往上增加. 添加唯一性的主键约束时, 往往需要设置字段自动增加属性.
09 TIMESTAMP 与 DATATIME 两者的区别
TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外, 还有一个最大的区别就是: DATETIME 在存储日期数据时, 按实际输入的格式存储, 即输入什么就存储什么, 与时区无关; 而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的, 存储时对当前时区进行转换, 检索时再转换回当前时区. 即查询时, 根据当前时区的不同, 显示的时间值是不同的.
10 选择数据类型的方法和技巧
MySQL 提供了大量的数据类型, 为了优化存储, 提高数据库性能, 在任何情况下均应使用 最精确的类型. 即在所有可以表示该列值的类型中, 该类型使用的存储最少.
整数和浮点数
如果不需要小数部分, 则使用整数来保存数据; 如果需要表示小数部分, 则使用浮点数类 型. 对于浮点数据列, 存入的数值会对该列定义的小数位进行四舍五入. 例如如果列的值的范 围为 199999, 若使用整数, 则 MEDIUMINT UNSIGNED 是最好的类型; 若需要存储小数, 则 使用 FLOAT 类型. 浮点类型包括 FLOAT 和 DOUBLE 类型. DOUBLE 类型精度比 FLOAT 类型高, 因此, 如要求存储精度较高时, 应选择 DOUBLE 类型.
浮点数和定点数
浮点数 FLOAT,DOUBLE 相对于定点数 DECIMAL 的优势是: 在长度一定的情况下, 浮点 数能表示更大的数据范围. 但是由于浮点数容易产生误差, 因此对精确度要求比较高时, 建议使 用 DECIMAL 来存储. DECIMAL 在 MySQL 中是以字符串存储的, 用于定义货币等对精确度要 求较高的数据. 在数据迁移中, float(M,D)是非标准 SQL 定义, 数据库迁移可能会出现问题, 最 好不要这样使用. 另外两个浮点数进行减法和比较运算时也容易出问题, 因此在进行计算的时候, 一定要小心. 如果进行数值比较, 最好使用 DECIMAL 类型.
日期与时间类型
MySQL 对于不同种类的日期和时间有很多的数据类型, 比如 YEAR 和 TIME. 如果只需要 记录年份, 则使用 YEAR 类型即可; 如果只记录时间, 只须使用 TIME 类型. 如果同时需要记录日期和时间, 则可以使用 TIMESTAMP 或者 DATETIME 类型. 由于 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围, 因此存储范围较大的日期最好使用 DATETIME.
TIMESTAMP 也有一个 DATETIME 不具备的属性. 默认的情况下, 当插入一条记录但并没 有指定 TIMESTAMP 这个列值时, MySQL 会把 TIMESTAMP 列设为当前的时间. 因此当需要 插入记录同时插入当前时间时, 使用 TIMESTAMP 是方便的, 另外 TIMESTAMP 在空间上比 DATETIME 更有效.
CHAR 与 VARCHAR 之间的特点与选择
CHAR 和 VARCHAR 的区别:
CHAR 是固定长度字符, VARCHAR 是可变长度字符; CHAR 会自动删除插入数据的尾部 空格, VARCHAR 不会删除尾部空格.
CHAR 是固定长度, 所以它的处理速度比 VARCHAR 的速度要快, 但是它的缺点就是浪费 存储空间. 所以对存储不大, 但在速度上有要求的可以使用 CHAR 类型, 反之可以使用 VARCHAR 类型来实现.
存储引擎对于选择 CHAR 和 VARCHAR 的影响:
对于 MyISAM 存储引擎: 最好使用固定长度的数据列代替可变长度的数据列. 这样可以使 整个表静态化, 从而使数据检索更快, 用空间换时间.
对于 InnoDB 存储引擎: 使用可变长度的数据列, 因为 InnoDB 数据表的存储格式不分固定 长度和可变长度, 因此使用 CHAR 不一定比使用 VARCHAR 更好, 但由于 VARCHAR 是按照 实际的长度存储, 比较节省空间, 所以对磁盘 I/O 和数据存储总量比较好.
ENUM 和 SET
ENUM 只能取单值, 它的数据列表是一个枚举集合. 它的合法取值列表最多允许有 65 535 个成员. 因此, 在需要从多个值中选取一个时, 可以使用 ENUM. 比如: 性别字段适合定义为 ENUM 类型, 每次只能从'男'或'女'中取一个值. SET 可取多值. 它的合法取值列表最多允许有 64 个成员.
空字符串也是一个合法的 SET 值. 在需要取多个值的时候, 适合使用 SET 类型, 比如: 要存储一个人兴趣爱好, 最好使用 SET 类型. ENUM 和 SET 的值是以字符串形式出现的, 但在内部, MySQL 以数值的形式存储它们.
BLOB 和 TEXT
BLOB 是二进制字符串, TEXT 是非二进制字符串, 两者均可存放大容量的信息. BLOB 主 要存储图片, 音频信息等, 而 TEXT 只能存储纯文本文件. 应分清两者的用途.
来源: http://database.51cto.com/art/201810/585477.htm