MySQL分割数据
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15数据库发展:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库阶段。种类大概有:层次式数据库、网络式数据库和关系型数据库,不同种类的数据库按照不同的数据结构来联系和组织。
数据库是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。它是一个按照数据结构来存储和管理数据的计算机软件系统,即数据库包含两层含义:保管数据的仓库,以及数据管理的方法和技术。
数据库的特点包括:实现数据共享,减少数据冗余;采用特定的数据;类型;具有较高的数据独立性;具有统一的数据控制功能。
数据表在关系型数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。
数据类型数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:整数数据类型、浮点数据类型、精确小数类型、二进制数据类型、日期/时间数据类型、字符串数据类型。
主键主键PrimaryKey,用于唯一地标识表中的每一条记录。可以定义表中的一列或者多列为主键,主键列上不能有两行相同的值,也不能为空值。
SQL语言对数据库进行查询和修改的语言叫做SQL,SQL的含义是结构化查询语言(Structured Query Language)。SQL包含以下4个部分:(1)数据定义语言(DDL):drop、CREATE、ALTER等语句;(2)数据操作语言(DML):insert、update、delete等语句;(3)数据查询语言(DQL):select语句;(4)数据控制语言(DCL):grant、revoke、COMMIT、ROLLBACK等语句。
举个例子,下面是一条用于创建一个名为students表的SQL语句:
CREATE TABLE students(student_id int unsigned,name varchar(30),sex char(1),birth DATE,PRIMARY KEY(student_id));该表包含4个字段,分别为student_id、name、sex、birth,其中student_id被定义为表的主键。现在只是定义了一张表格,但是并没有任何数据,接下来这条SQL声明语句将在该students表中插入一条数据记录:
insert INTO students(student_id,name,sex,birth)VALUES(20180218,"envy",‘1‘,‘2018-02-18‘);执行完该SQL语句后,students表中就会增加一行新的记录,该记录中字段student_id的值为20180218,name字段的值为envy,sex字段的值为1,birth字段值为2018-02-18。如果此时再使用select查询语句获取刚才插入的数据,使用的语句如下所示:
select name FROM students WHERE student_id =20180218;就会出现name属性值为envy的信息。这里只是举了一个非常简单的例子来提前学习一下SQL。
数据库访问接口不同的程序语言会有各自不同的数据库访问接口,程序会通过这个接口来执行SQL语句,进行数据库的管理。笔者常用的数据库访问接口有:(1)ODBC(Open DataBase Connectivity,开放数据库互连,该技术为访问不同的SQL数据库提供了一个共同的接口。ODBC使用SQL作为访问数据的标准。这一接口提供了最大限度的互操作性:一个应用程序可以通过共同的一组代码访问不同的SQL数据库管理系统(DBMS)。一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是Acess、MySQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点就是能以统一的方式处理所有的数据库。(2)JDBC(Java DataBase Connectivity,java数据库连接)用于Java应用程序连接数据库的标准方法,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,由一组用Java语言编写的类和接口组成。(3)pymysql/mysqlclient。这是一个使用Python语言编写的用于执行SQL语句的API。当然不止这三个,还有其他的程序语言,这里就不仔细介绍。
MySQL数据库什么是MySQLMySQL是一个小型的开源关系型数据库管理系统,与其他大型关系数据库管理系统(如Oracle、DB2、SQL Server等)相比,MySQL规模小、功能有限,但是它体积小、速度快、成本低、且提供的功能对稍微复杂的应用来说已经足够用,这些使得MySQL成为世界上最受欢迎的开源数据库。
客户端-服务器软件主从式架构(Client-Server Model)或者客户端-服务端(Client/Server)结构,简称C/S架构。C/S架构是一种网络架构,通常在该网络架构下软件分为客户端(Client)和服务器(Server)。服务器是整个应用系统资源的存储与管理中心,多个客户端则各自处理相应的功能,共同实现完整的应用。在C/S架构中,客户端用户的请求被传送到数据库服务器,数据库服务器进行处理后,将结果返回给用户,从而减少了网络数据传输量。
用户使用应用程序时,首先启动客户端,通过有关命令告知服务器进行连接以完成各种操作,而服务器则按照此请示提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。
这种系统的特点就是:客户端和服务器程序不在同一台计算机上运行,这些客户端和服务器程序通常归属不同的计算机。
C/S架构通过不同的途径应用于很多不同类型的应用程序。举一个非常简单的例子,当顾客需要在淘宝网上买衣服的时候,此时电脑和网页浏览器就被当作一个客户端,同时组成淘宝网的电脑、数据库和应用程序就被当做服务器。当顾客的网页浏览器向淘宝网请求搜索夏季相关的衣服时,淘宝网服务器从淘宝网的数据库中找到所有该类型的衣服,聚合成一个网页,再发送回顾客的浏览器。服务器一般使用较高性能的计算机,并配合使用不同类型的数据库,如Oracle、SQL Sever、Sybase或者MySQL等,但是请注意此时的客户端必须是专门的软件,如专门开发的客户端工具浏览器等,并不是普通的浏览器。
MySQL版本MySQL提供了两个不同的版本:社区版和企业版。其中社区版免费,而企业版收费,不过它支持ACID事务处理、提供完整的提交、回滚、奔溃恢复和行级锁定功能。请注意经常说的MySQL Cluster则主要用于搭建数据库集群,它可以在社区版或者企业版的基础上进行使用。
MySQL的优势MySQL的主要优势如下:(1)运行速度快;(2)免费,开源;(3)容易使用,极易上手,学习成本较低;(4)可移植性强,能够在多个系统上运行;(5)提供了多个语言的API接口;(6)MySQL可以使用标准的SQL语法,还可以使用ODBC(开放式数据库连接)的应用程序;(7)十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证密码安全,加之mysql是网络化的,因此可以在互联网上的任何地方进行访问,提高了数据共享的效率。
MySQL5.7新功能(1)支持JSON。JSON(JavaScript Object Notation)是一种存储信息的格式,可以很好地替代XML。从MySQL5.7.8版本开始,MySQL将支持JSON,而之前只能通过strings之类的通用形式来存储JSON文件,这样做的缺陷很明显,就是必须自行确认和解析数据、解决更新中的困难,在执行插入操作时的速度慢等问题。(2)性能和可扩展性。改进InnoDB的可扩展性和临时性表的性能,以实现更快的网络和大数据加载等操作;(3)改进复制以提高可用性的性能。改进复制包括多源复制、多线程增强、在线GTIDs和增强的半同步复制。(4)性能模式提供更好的视角。增加了许多新的监控功能,以减少空间和过载,使用新的SYS模式显著提供易用性。(5)GIS。MySQL5.7新功能包括InnoDB空间索引,使用Boost.Geometry,同时提高完整性和标准符合性。
MySQL工具MySQL数据库管理系统提供了许多命令行工具,这些工具可以用来管理MySQL服务器、对数据库进行访问控制、管理MySQL用户以及数据备份和恢复工具等。
服务端工具程序(1)mysqld:SQL后台程序(Mysql 服务器进程)。该程序必须运行之后,客户端才能通过连接服务器来访问数据库。(2)mysqld_safe:服务器启动脚本。在UNIX和NetWare中推荐使用mysqld_safe来启动mysqld服务器。mysqld_safe增加了一些安全特性,例如当出现错误事重启服务器并向错误日志文件写入运行时间信息。(3)mysql.server:服务器启动脚本。在UNIX中的Mysql分发版包括mysql.server脚本。该脚本用于使用包含为特定级别的、运行启动服务的、运行目录的系统。它调用mysqld_safe来启动MySQL服务器。(4)mysql_multi:服务器启动脚本,可以启动或者停止系统上安装的多个服务器。(5)myisamchk:用来描述、检查、优化和维护MyISAM表的实用工具。(6)mysqlbug:MySQL缺陷报告脚本。它可以用来向MySQL邮箱系统发送缺陷报告。(7)mysql_install_db:该脚本用默认权限创建MySQL授权表。通常只是在系统上首次安装MySQL时执行一次。
客户端工具程序(1)myisampack:压缩MyISAM表以产生更小的只读表的一个工具;(2)mysql:交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具;(3)mysqlaccess:检查访问主机名、用户名和数据库组合的权限的脚本;(4)MySQLadmin:执行管理操作的客户程序,如创建或者删除数据库,重载授权表,将表刷新到硬盘上,以及重新打开日志文件。MySQLadmin还可以用来检索版本、进程以及服务器的状态信息;(5)mysqlbinlog:从二进制日志读取语句的工具。在二进制日志文件中包含执行过的语句,可用来帮助系统从奔溃中恢复;(6)mysqlcheck:检查、修复、分析以及优化表的表维护客户程序;(7)mysqldump:将MySQL数据库转储到一个文件,如SQL语句或者tab分隔符文本文件的客户程序;(8)mysqlhotcopy:当服务器在运行时,快速备份MyISAM或ISAM表的工具;(9)mysql import:使用LOAD DATA INFILE将文本文件导入相关表的客户程序;(10)mysqlshow:显示数据库、表、列以及索引相关信息的客户程序;(11)perror:显示系统或MySQL错误代码含义的工具。
引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15作者 | 丁奇出处 | 极客时间《MySQL 实战 45 讲》专栏我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这...
2024.11.12作者 | 李冬梅采访嘉宾 | Monty,MySQL 之父审校 | 王一鹏,刘燕InfoQ 深度专访 “MySQL 之父” — Michael “Monty” Widenius ,全文包括视频访谈实录...
2024.11.15MySQL驱动参数你知道多少呢?常见的几个大家应该都见过,如下:参数说明user数据库用户名password用户密码useUnicode是否使用Unicode字符集,如果参数characterEnco...
2024.11.151. 数据库的概念数据库是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。是按照数据结构来组织、存储和管理数据的仓库。目前常用的数据库主要分为开源 MySQL 数据库(包括官方版 M...
2024.11.15