什么是MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的关系数据库管理系统(RDBMS)应用软件之一。
MySQL数据库是关系型的
关系数据库将数据存储在单独的表中,而不是将所有数据放在一个大的库房中。数据库结构被组织成针对速度优化的物理文件。逻辑模型具有数据库,表,视图,行和列等对象,可提供灵活的编程环境。可以设置管理不同数据字段之间关系的规则,例如一对一,一对多,唯一,必需或可选,以及不同表之间的”指针”。数据库强制执行这些规则,因此使用设计良好的数据库,应用程序永远不会看到不一致,重复,孤立,过时或丢失的数据。
”MYSQL” 的SQL部分代表 “ 结构化查询语言 ”。SQL是用于访问数据库的最常用的标准化语言。根据编程环境,可以直接输入SQL(例如,生成报告),将SQL语句嵌入到用其他语言编写的代码中,或使用隐藏SQL语法的特定于语言的API。
MySQL数据库服务器非常快速,可靠,可扩展且易于使用
MySQL Server最初是为了比现有解决方案更快地处理大型数据库而开发的,并且已经成功地在高要求的生产环境中使用了好几年。虽然在不断发展的今天,MySQL服务器提供了丰富而有用的功能集。它的连接性,速度和安全性使MySQL Server非常适合访问Internet上的数据库。
MySQL Server适用于客户端/服务器或嵌入式系统。
MySQL数据库软件是一个C/S系统,由支持不同后端的多线程SQL服务器,几个不同的客户端程序和库,管理工具以及各种应用程序编程接口(API)组成。
MySQL Server作为嵌入式多线程库,可以将其链接到应用程序,以获得更小,更快,更易于管理的独立产品。
MySQL特点
- 内部和可移植性
- 用C和C ++编写。
- 经过多种不同编译器的测试。
- 适用于许多不同的平台。
- 为了便于携带,在MySQL 5.5及更高版本中使用CMake。以前的系列使用GNU Automake,Autoconf和Libtool。
- 使用Purify(商业内存泄漏检测器)以及GPL工具Valgrind(http://developer.kde.org/~sewardj/)进行测试。
- 使用具有独立模块的多层服务器设计。
- 设计为使用内核线程完全多线程,以便在可用时轻松使用多个CPU。
- 提供事务性和非事务性存储引擎。
- 使用非常快的 B-tree 磁盘表 (MyISAM)实现索引压缩。
- 旨在使添加其他存储引擎相对容易。如果要为内部数据库提供SQL接口,这非常有用。
- 使用非常快速的基于线程的内存分配系统。
- 使用优化的嵌套循环连接执行速度非常快。
- 实现内存中的哈希表用作临时表。
- 使用应尽可能快的高度优化的类库实现SQL函数。通常在查询初始化之后根本没有内存分配。
- 将服务器作为单独的程序提供,用于客户端/服务器网络环境,以及作为可嵌入(链接)到独立应用程序的库。此类应用程序可以单独使用,也可以在没有网络的环境中使用。
数据类型
- 许多数据类型:有符号/无符号整数,8个字节长的数据,float(浮点型), double(双精度型), char(字符), varchar(变长字符串), binary(二进制),varbinary(可变二进制), text(文本), blob, date, time, datetime, timestamp, year, set, enum,和开放GIS空间类型。
- 固定长度和可变长度的字符串类型。
函数和语句
SELECT列表和 WHERE子句查询中的 完整运算符和函数支持 。例如:
1 | mysql> SELECT CONCAT(first_name, ' ', last_name) |
- 完全支持SQL GROUP BY和 ORDER BY子句。支持基函数(COUNT(), AVG(), STD(), SUM(), MAX(), MIN(),和GROUP_CONCAT())。
- 支持LEFT OUTER JOIN和 RIGHT OUTER JOIN使用标准SQL和ODBC语法。
- 根据标准SQL的要求支持表和列上的别名。
- 支持DELETE, INSERT, REPLACE,和 UPDATE以返回更改(受影响)的行数,或返回通过连接到服务器时设置标志,而不是匹配的行的数量。
- 支持特定于MySQL的SHOW语句,用于检索有关数据库,存储引擎,表和索引的信息。支持 INFORMATION_SCHEMA数据库,根据标准SQL实现。
- 一个EXPLAIN语句来显示优化器如何解决一个查询。
- 表名或列名中函数名的独立性。例如,ABS是一个有效的列名。唯一的限制是,对于函数调用,函数名和它后面的“ (”之间不允许有空格 。
- 可以在同一语句中引用来自不同数据库的表。
安全
- 特权和密码系统,非常灵活和安全,可以进行基于主机的验证。
- 连接到服务器时加密所有密码流量的密码安全性。
可扩展性和限制
- 支持大型数据库。我们将MySQL Server与包含5000万条记录的数据库结合使用。
- 每个表最多支持64个索引。每个索引可以包含1到16列或部分列。InnoDB表的最大索引宽度为767字节或3072字节。MyISAM表的最大索引宽度为1000个字节。索引可使用的柱的前缀CHAR, VARCHAR, BLOB,或 TEXT列类型。
连接
- 客户端可以使用多种协议连接到MySQL Server:
i. 客户端可以在任何平台上使用TCP / IP套接字进行连接。
ii. 在Windows系统上,如果使用该–enable-named-pipe选项启动服务器,则客户端可以使用命名管道进行连接。如果使用该–shared-memory选项启动,Windows服务器也支持共享内存连接。客户端可以使用该–protocol=memory选项通过共享内存进行连接。
iii. 在Unix系统上,客户端可以使用Unix域套接字文件进行连接。
- MySQL客户端程序可以用多种语言编写。用C编写的客户端库可用于用C或C ++编写的客户端,或者用于提供C绑定的任何语言。
- 提供C,C ++,Eiffel,Java,Perl,PHP,Python,Ruby和Tcl的API,使MySQL客户端能够以多种语言编写。
客户端和工具
- MySQL包括几个客户端和实用程序。这些包括命令行程序,如 mysqldump和 mysqladmin,以及图形程序,如 MySQL Workbench。
- MySQL Server内置支持SQL语句来检查,优化和修复表。这些语句可以从命令行通过 mysqlcheck客户端获得。MySQL还包括myisamchk,这是一个非常快速的命令行实用程序,用于在MyISAM 表上执行这些操作。
- 可以使用–help 或-?选项调用MySQL程序以获取在线帮助。