导读:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,许多全球规模庞大、发展迅速的组织,Facebook、Google、Adobe、Alcatel Lucent和Zappos等都依靠MySQL来管理数据,为其高容量网站、关键业务系统和套装软件提供支持。
作者:王宏志 何震瀛 王鹏 李春静
来源:华章科技
01 关系数据库MySQL概述MySQL有如下特点,这些特点使得其得到了广泛应用。
1. 简单易用
MySQL是一个高性能且相对简单的数据库系统,与一些大型系统的设置和管理相比,其复杂程度较低。
2. 价格低
MySQL对多数个人用户来说是免费的。
3. 小巧
MySQL数据库的4.1.1发行版只有21MB,安装完成也仅仅51MB。
4. 支持查询语言
MySQL支持SQL(结构化查询语言)。SQL是一种所有现代数据库系统都选用的语言。SQL支持ODBC(开放式数据库连接)的应用程序,ODBC是Microsoft开发的一种数据库通信协议。
5. 性能
MySQL数据库没有用户数的限制,多个客户机可同时使用同一个数据库。可利用几个输入查询并查看结果的界面来交互式地访问MySQL。这些界面有命令行客户机程序、Web浏览器或X Window System客户机程序。此外,还有由各种语言(如C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl)编写的界面。因此,可以选择使用已编好的客户机程序或编写自己的客户机应用程序。
6. 连接性和安全性
MySQL是完全网络化的,可在因特网上的任何地方访问其数据库,因此,可以和任何地方的任何人共享数据库。而且MySQL支持访问控制,可以控制哪些人不能看到数据。
7. 可移植性
MySQL可运行在各种版本的UNIX以及其他非UNIX的系统(例如Windows和OS/2)上。MySQL可运行在从家用PC到高级的服务器上。
8. 开放式的分发
MySQL容易获得:只要使用Web浏览器即可访问官网下载获得。如果不能理解其中某个算法是如何起作用的,或者对某个算法感到好奇,可以将其源代码取来,对源代码进行分析。如果不喜欢某些算法,还可以更改它。
9. 速度快
MySQL运行速度很快。曾经有开发者声称MySQL可能是目前能得到的最快的数据库。
02 SQL概述SQL最早的版本是由IBM开发的,它最初被叫作Sequel,在20世纪70年代早期是System R项目的一部分。Sequel语言发展至今,其名称已变为SQL(Structured Query Language,结构化查询语言)。它是一种特定目的编程语言,用于管理关系数据库管理系统或在关系流数据管理系统中进行流处理。
SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操纵语言。SQL的范围包括数据的插入/查询/更新和删除、数据库模式的创建和修改,以及数据访问控制。尽管SQL经常被描述为一种声明式编程语言(4GL,即第四代语言),但也含有过程式编程的元素。
SQL是对埃德加·科德关系模型的第一个商业化语言实现,这一模型于1970年在一篇具有影响力的论文《一个对于大型共享型数据库的关系模型》中被描述。尽管SQL并非完全按照科德的关系模型设计,但其依然成为应用最为广泛的数据库语言。
SQL在1986年成为美国国家标准学会(ANSI)的一项标准,在1987年成为国际标准化组织(ISO)标准。此后,这一标准经过了一系列的增订,加入了大量新特性。虽然有这一标准的存在,但大部分SQL代码在不同的数据库系统中并不具有完全的跨平台性。
MySQL非常友好地支持SQL语言,本文只给出简单的举例,有关详细的SQL语法及举例,可参见官网:
官网按SQL语法功能分为8个部分,分别是:
数据定义语句(Data Definition Statement)数据处理语句(Data Manipulation Statement)事务和锁定声明(Transactional and Locking Statement)复制语句(Replication Statement)预处理SQL语句语法(Prepared SQL Statement Syntax)复合语句语法(Compound-Statement Syntax)数据库管理声明(Database Administration Statement)效用声明(Utility Statement)下文将对前2个部分举例讲解。
03 数据定义语句数据库中的关系集合必须由数据定义语句指定给系统,主要提供表相关的定义关系模式、删除关系以及修改关系模式的命令。例如:数据库、表、表空间、触发器、事件、索引及函数的定义、更改操作等。
【例1】指定表空间创建库表,并在已有表的基础上增加列,查看表结构。
1. 建立名为ts_1的表空间
mysql> CREATE TABLESPACE ts_1 ADD DATAFILE 'ts_1.ibd' Engine=InnoDB;Query OK, 0 rows affected (0.11 sec)2. 建立名为testq的数据库
mysql> CREATE DATABASE testq;Query OK, 1 row affected (0.00 sec)3. 切换至名为testq的数据库
mysql> use testq;Database changed4. 建立表,并指定表使用的表空间及引擎
mysql> CREATE TABLE t1( -> c1 INT STORAGE DISK,# 数据存储于磁盘 -> c2 INT STORAGE MEMORY# 数据基于内存 -> ) TABLESPACE ts_1 ENGINE INNODB;# 指定表空间ts_1及引擎INNODBQuery OK, 0 rows affected (0.34 sec)5. 向表t1中增加列c3,类型为VARCHAR,长度为10
mysql> ALTER TABLE t1 ADD c3 VARCHAR(10);Query OK, 0 rows affected (0.52 sec)Records: 0 Duplicates: 0 Warnings: 06. 查看表t1的结构
mysql> DESC t1;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| c1 | int(11) | YES | | NULL | || c2 | int(11) | YES | | NULL | || c3 | varchar(10) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)注意在my.ini文件中设置:
# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
否则会出现“1286 Unknown storage engine 'InnoDB'”错误。
成功启动后,通过SHOW ENGINES查看引擎是否在运行:
04 数据处理语句数据处理语句主要提供数据库表中相关数据元组的插入、删除、修改和查询等操作。
【例2】向已有的表t1中插入、查询、更改和删除数据。
1. 向表t1中插入2条数据,其中第2列数据是第1列数据的2倍
mysql> INSERT INTO t1(c1,c2,c3) VALUES(1,c1*2,'a'),(2,c1*2,'b');Query OK, 2 rows affected (0.10 sec)Records: 2 Duplicates: 0 Warnings: 02. 查询表t1中所有的数据
mysql> SELECT * FROM t1;+------+------+------+| c1 | c2 | c3 |+------+------+------+| 1 | 2 | a || 2 | 4 | b |+------+------+------+2 rows in set (0.00 sec)3. 更新表t1中的数据,其中当c1等于2时,对应的c2列的数据乘以3,对应的c3列的值更改为updateb
mysql> UPDATE t1 SET c2=c1*3,c3='updateb' -> WHERE c1=2;Query OK, 1 row affected (0.11 sec)Rows matched: 1 Changed: 1 Warnings: 04. 当c1等于2时,查询表t1中对应的元组的数据
mysql> SELECT * FROM t1 WHERE c1=2;+------+------+---------+| c1 | c2 | c3 |+------+------+---------+| 2 | 6 | updateb |+------+------+---------+1 row in set (0.05 sec)5. 当c1等于2时,删除表t1中对应的元组的数据
mysql> DELETE FROM t1 WHERE c1=2;Query OK, 1 row affected (0.10 sec)用SELECT语句查询表t1,发现c1=2对应的元组的数据都已经被删除。
mysql> SELECT * FROM t1;+------+------+------+| c1 | c2 | c3 |+------+------+------+| 1 | 2 | a |+------+------+------+1 row in set (0.00 sec)关于作者:王宏志,哈尔滨工业大学计算机科学与技术学院教授、博士生导师,英才学院副院长。研究方向为大数据、数据科学、数据管理与分析。在VLDB、SIGMOD等国内外重要会议和期刊上发表学术论文200余篇,出版学术专著两本,其论文被SCI收录50余次,他引千余次。
何震瀛,博士,复旦大学计算机科学学院副教授,中国计算机学会数据库专业委员会委员、大数据专业委员会通信委员。主要研究兴趣是数据管理和数据分析等。
王鹏,毕业于哈尔滨工业大学软件工程专业,研究生学历。曾就职于中国普天信息技术研究院,并担任架构师、技术总监等职使。曾代表企业主导网络存储国家行业标准制定,拥有相关专利3项。
李春静,工学硕士,现任北京华育兴业科技有限公司大数据讲师,并承担高校大数据技术与应用资源建设工作。主要从事Hadoop、HBase、Hive、Spark、大数据库、机器学习等课程研发工作。
本文摘编自《大数据管理系统原理与技术》,经出版方授权发布。
延伸阅读《大数据管理系统原理与技术》
推荐语:本书介绍了多种数据库管理系统的基本概念以及代表性数据库管理系统的使用和优化方法,覆盖了传统的关系数据库、数据仓库,以及列族、键值、文档、图等NoSQL数据库系统。