初步了解数据库mysql,mysql数据库中的技巧
本文内容概述:
- 1.MYSQL的概念
- 2.什么是mysql数据库?
- 3.什么是MySql数据库?
MYSQL的概念
MySQL是由瑞典MySQL AB公司开发的关系型数据库管理系统,目前归Oracle所有。 MySQL 是最流行的关系数据库管理系统。在WEB应用方面,MySQL是最好的RDBMS(关系数据库管理系统)应用软件之一。
MySQL 是一个关系数据库管理系统。关系数据库将数据存储在不同的表中,而不是将所有数据放在一个大存储中,这提高了速度和灵活性。 MySQL 使用的 SQL 语言是访问数据库最常用的标准化语言。 MySQL软件采用双许可政策。分为社区版和商业版。由于MySQL体积小、速度快、总体拥有成本低,尤其是开源的特点,一般选择MySQL作为开发中小型网站的网站数据库。 。由于其社区版的优异性能,可以与PHP、Apache形成良好的开发环境。
什么是mysql数据库?
数据库是按照数据结构组织、存储和管理数据的存储库。
每个数据库都有一个或多个不同的 API,用于创建、访问、管理、搜索和复制存储的数据。
我们也可以将数据存储在文件中,但是文件中数据的读写速度比较慢。
所以现在我们使用关系数据库管理系统(RDBMS)来存储和管理大量数据。所谓关系数据库,就是基于关系模型的数据库,利用集合代数等数学概念和方法来处理数据库中的数据。
RDBMS(关系数据库管理系统)的特点:
1。数据以表
2的形式显示。每行包含不同的帖子名称
3。每列包含记录名称。对应的数据字段
4。许多行和列形成一个形状
5。几种表格组成一个数据库

什么是MySql数据库
MySQL数据库:
MySQL是一个开源的关系数据库管理系统(RDBMS),它使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。
MySQL 是开源的,因此任何人都可以在通用公共许可证下下载并根据个人需要进行修改。
MySQL 因其速度、可靠性和适应性而受到广泛关注。大多数人都认为 MySQL 是管理无需事务处理的内容的最佳选择。
数据库简介:
MySQL 是一个开源关系数据库管理系统(RDBMS)。 MySQL数据库系统采用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。
由于MySQL是开源的,任何人都可以在通用公共许可证下下载它并根据个人需求进行修改。 MySQL因其速度、可靠性和适应性而受到广泛关注。大多数人都认为 MySQL 是管理无需事务处理的内容的最佳选择。
MySQL这个名字的由来不是很清楚。一个更有影响力的说法是,10多年来基本指南和大量库和工具都以“my”为锚定,而MySQL AB创始人之一Monty Widenius的女儿也被称为My。 MySQL 的名字是这两者中的哪一个命名的仍然是个谜,包括开发人员在内。
MySQL 的海豚徽标名称为“sakila”,是 MySQL AB 的创始人从“命名海豚”竞赛中用户建议的大量名称中选出的。获奖名称由来自非洲斯威士兰的开源软件开发人员 Ambrose Twebaze 提供。据安布罗斯介绍,萨基拉来自斯威士兰方言SiSwati,也是坦桑尼亚阿鲁沙的一个小镇的名字,靠近安布罗斯的家乡乌干达。
MySQL可能不是很强大,但是由于它的开源和广泛使用,很多人都了解了这个数据库。它的历史也是传奇的。
MySQL数据库历史记录:
MySQL的历史可以追溯到1979年,当时Oracle刚刚小有名气,还没有微软的SQL Server的踪迹。有一个叫 Monty Widenius 的人在一家叫 TcX 的小公司工作,他用 BASIC 设计了一个报表工具,可以在 4M 主频、16KB 内存的计算机上运行。不久之后,这个工具被用C语言重写并移植到Unix平台。当时,它只是一个非常低级的面向报表的存储引擎。这个工具叫做Unireg。
但这家小公司资源有限,而Monty却非常有才华。面对资源有限的弊端,他能够发挥自己的潜力,始终努力编写最高效的代码。并由此形成了一种习惯。还有其他同事与蒙蒂一起工作。很少有人能在 20 年后继续编写这些代码,但 Monty 做到了。
1990 年,TcX 的一些客户开始请求为其 API 提供 SQL 支持。当时有人想到直接使用商业数据库,但Monty觉得商业数据库的速度不尽如人意。因此他使用 mSQL 代码将其直接集成到自己的存储引擎中。但遗憾的是效果并不是很好。因此,Monty 雄心勃勃,决心自己重写 SQL 支持。
1996年,MySQL 1.0发布,只面向一小部分人发布,相当于内部发布。 1996年10月,MySQL 3.11.1发布,哈哈,没有2.x版本。最初,Solaris 下仅提供二进制版本。一个月后,Linux 版本出现了。
在接下来的两年里,MySQL依次移植到了不同的平台。发布时采用的许可政策有些不同:允许免费商业使用,但MySQL不能与自己的产品捆绑发布。如果你想把它们一起发布,你需要一个特殊的许可证,这意味着要花钱。当然,业务支持也是要花钱的。其他的可以根据用户需要使用。这一特殊许可给MySQL带来了一定的收入,从而为MySQL的持续发展奠定了良好的基础。 (仔细想想,PostgreSQL已经有好几年处于低谷了,这可能和它完全免费、没有任何限制有关)。
MySQL3.22应该是一个标志性的版本,提供基本的SQL支持。
MySQL关系数据库的第一个版本于1998年1月发布,它利用系统内核提供的多线程机制,提供完整的多线程操作方式,为编程语言提供编程接口(API) 、Java、Perl、PHP、Python和Tcl,以及支持多种字段类型。并提供完整的运算符来支持查询中的SELECT和WHERE操作。
MySQL 是开源的,因此任何人都可以在通用公共许可证下下载并根据个人需要进行修改。 MySQL因其速度、可靠性和适应性而受到广泛关注。
1999-2000年,在瑞典成立了一家公司,名为MySQL AB(AB在瑞典语中是“股份公司”的意思)。我雇佣了几个人并与 Sleepycat 合作开发 Berkeley DB 引擎。由于BDB支持事务处理,MySQL从此开始支持事务处理。
2000年4月,MySQL对旧的存储引擎进行了整理,并命名为MyISAM。与此同时,2001年,Heikiki Tuuri向MySQL提出建议,希望集成他们的存储引擎InnoDB,该引擎也支持事务处理和行级锁定。
今天不幸的是,BDB和InnoDB似乎都被Oracle收购了。为了消灭竞争对手,哪怕是开源,他们也会使用一切手段。
MySQL和InnoDB的官方组合版本是4.0。
随着 2003 年 12 月的 MySQL 5.0,开始引入诸如视图和存储过程之类的东西。当然,这期间也犯了很多错误。
MySQL于2008年1月16日被Sun收购。
近日,MySQL创始人Monty Widenius向Sun提交了辞呈。头走了。
据说Sun收购的公司都非常不幸。不知道MySQL的未来会是什么样子。我希望一切顺利。我认为MySQL的生命力还是很长的。
今天mysql和php的结合绝对是完美的。很多大型网站也使用mysql数据库。 mysql的发展前景非常广阔!
MySQL常用命令:
1:使用SHOW语句查看服务器当前存在哪些数据库:
mysql SHOW DATABASES;
2:2。创建数据库 MYSQLDATA
mysql CREATE DATABASE MYSQLDATA;
3:选择你创建的数据库
mysql USE MYSQLDATA; (按回车,当显示Databasechanged时,操作成功!)
4:查看当前数据库中存在哪些表
mysql SHOW TABLES;
5:创建数据库表
TABLE TABLE TABLE TABLE MYTABEL (name VARCHAR(20), sex CHAR(1));
6:显示表的结构:
mysql DESCRIBE MYTABLE;
7:向表中添加记录
insert into mysql MYTABLE-values("hyq","M");
8:以文本方式加载数据到数据库表中(如D:/mysql.txt)
mysql LOAD DATA LOCAL INFIL “D:/mysql.txt” INTO TABLE MYTABLE;
9:导入.sql文件命令(如D:/mysql.sql)
mysqluse数据库;
mysqlsource d:/mysql.sql; :删除表
mysqldrop TABLE MYTABLE;
11:清除表
mysqldelete from MYTABLE;
12:更新表中的数据
hy=”qlupdate M=hy'QBLE”;
全局管理权限对应说明:
FILE:读写MySQL服务器上的文件
PROCESS:显示或杀死属于其他用户的服务线程。
RELOAD:重新加载访问控制列表、更新日志等。
SHUTDOWN:关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER:修改现有数据表(例如添加/删除列)和索引。
CREATE:创建新的数据库或数据表。
删除:从表中删除条目。
DROP:删除数据表或数据库。
INDEX:创建或删除索引。
INSERT:向表中添加记录。
SELECT:显示/搜索表中的记录。
更新:编辑表中的现有条目。
特殊权限:
ALL:允许执行所有操作(与 root 相同)。
用途:仅允许登录 - 不允许其他任何操作。
MySQL数据库导入方法:
导入MySQL数据库有两种方法:
1)先导出数据库SQL脚本,再导入;
2)直接复制数据库目录和文件。
在不同操作系统或MySQL版本下,直接复制文件的方法可能不兼容。
所以一般建议以SQL脚本形式导入。下面分别介绍这两种方法。
2。方法1 SQL脚本形式
步骤如下:
2.1.导出SQL脚本
在原数据库服务器上,可以使用phpMyAdmin工具或mysqldump命令行导出SQL脚本。
2.1.1 使用phpMyAdmin工具
导出选项中选择导出“结构”和“数据”,不要添加“DROP DATABASE”和“DROP TABLE”选项。
选择“另存为文件”选项。如果数据量很大,可以选择“gzipped”选项。
保存导出的SQL文件。
2.1.2 使用mysqldump命令行
命令格式
mysqldump -u 用户名 -p 数据库名 数据库名.sql
示例:
rootsqldump -u。 (将数据库 abc 导出到 abc.sql 文件)
当提示输入密码时,输入数据库用户名的密码。
2.2。创建空数据库
通过主控制界面/控制面板创建数据库。假设数据库名称为abc,数据库的完整用户为abc_f。
2.3。导入并执行SQL脚本
也有两种方法,一是使用phpMyAdmin(mysql数据库管理)工具或者mysql命令行。
2.3.1 使用phpMyAdmin工具
在控制面板中,选择已创建的空数据库,点击“管理”,进入管理工具页面。
在“SQL”菜单中,浏览并选择刚刚导出的SQL文件,点击“执行”上传并执行。
注意:phpMyAdmin 对上传文件的大小有限制。 PHP本身对于上传文件的大小也有限制。如果原sql文件
比较大,可以先用gzip压缩一下。对于sql文件等文本文件,可以使用1:5或更高的压缩比。
如何使用gzip:
# gzip xxxxx.sql
获取文件
xxxxx.sql.gz。
当提示输入密码时,输入数据库用户名的密码。
3 直接复制
如果数据库比较大,可以考虑使用直接复制的方式,但不同版本和操作系统可能不兼容,请谨慎使用。 ? mydb.tar.gz
3.4 复制
将解压后的数据库文件复制到相应文件夹中
cd mydb/
cp * /var/lib/mysql/mydb/
cp * /var/db/mysql/mydb/
3.5 权限设置
将复制文件的属主更改为mysql:mysql,权限更改为660
chown mysql:mys /mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql转换mysql的方法:
1。引导表结构
使用MySQL生成创建脚本的方法。找到需要导出的脚本,根据MySQL语法进行修改,创建MySQL数据库中表的列结构。
2。导出表数据
在 MSSQL 页面使用 bcp 导出文本文件:
bcp “SELECT * FROM dbname.dbo.tablename;” queryout tablename.txt -c -Slocalhost\db2005 -Usa
其中""为要导出的sql语句,-c表示使用\t进行字段分隔,使用\n进行记录分隔,-S表示数据库服务器和实例,-U表示用户名,-P表示密码。
在MySQL页面使用mysqlimport将文本文件导入到对应的表中
mysqlimport -uroot -p 数据库名/home/ test/tablename.txt
其中-u表示用户名,-p表示密码,数据库名表示数据库名,table名与文件名相同
MySQL备份与恢复:
MySQL 备份和恢复数据的一般步骤
数据库备份示例:
1。备份前涉及读锁定的表
mysqlLOCK TABLES tbl1 READ,tbl1 READ,…
如果在 mysqldump 实用程序中使用 --lock-tables 选项,则不需要使用上述 SQL 语句。 ?进行数据更改是为了准备恢复数据。
4。解锁表上的读锁
mysqlUNLOCK TABLES;
为了加快上述过程,可以这样做:
shell mysqldump --lock-tables --opt db_namedb_name.sql; mysqladminlush-logs
但这可能会导致一个小问题。上述命令在启用新的更新日志之前恢复表上的读锁定。
在更新繁忙的站点上,可能存在备份后更新的数据未记录在新日志中的情况。
现在恢复上面备份的数据库
1。对涉及的表使用写锁
mysqlLOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2。恢复备份的数据
shellmysql db_name db_name.sql
3.恢复更新日志的内容
shellmysql --one-database db_name hostname.nnn
假设要使用的日志名称为 hostname.nnn
4。启用新的更新日志
shellmysqladminlush-logs
5。释放表上的写锁
mysqlUNLOCK TABLES;
希望上面的例子能够给你带来启发,因为备份数据的方法有很多种,你使用的可能与上面的不同。不一样,但是对于备份和恢复来说,表锁定和激活新更新日志的时机应该是类似的,所以要仔细考虑这个问题。
MySQL数据库优化:
选择InnoDB作为存储引擎
大型产品数据库对可靠性和并发性有更高的要求。 InnoDB作为MySQL默认的存储引擎,比MyISAM选择的要好。
优化数据库结构
组织数据库架构、表和字段以减少 I/O 开销,将相关项存储在一起并提前规划,以便随着数据量的增长,性能也能保持在较高水平。
数据表的设计应尽量减少其占用的空间,表的主键应尽可能短。 ·对于InnoDB表来说,主键所在的列在每个二级索引条目中都是可复制的,所以如果二级索引很多,短的主键可以节省很多空间。
仅创建提高查询性能所需的索引。索引有助于检索,但会增加插入和更新操作的执行时间。
InnoDB 中的 ChangeBuffering 功能
InnoDB 提供了 ChangeBuffering 配置,以减少维护辅助索引所需的磁盘 I/O。大型数据库可能会经历大量的表操作和大量 I/O,以保持二级索引最新。当相关页面不在缓冲池中时,InnoDB的changebuffer会将更改缓存到二级索引条目中,从而避免因无法立即从磁盘读取页面而导致的耗时的I/O操作。当页面加载到缓冲池中时,更改将合并到缓冲区中,更新的页面稍后会刷新到磁盘。这提高了性能并且适用于 MySQL 5.5 及更高版本。
InnoDB 页面压缩
InnoDB 支持页面级别的表压缩。当写入一页数据时,会使用特定的压缩算法对其进行压缩。压缩后的数据被写入磁盘,其空洞机制在页末尾释放空块。如果压缩失败,数据将保持不变。表和索引被压缩,因为索引通常占数据库总大小的很大一部分。压缩可以显着节省内存、I/O 或处理时间,从而达到提高性能和可扩展性的目标。它还减少了内存和磁盘之间传输的数据量。 MySQL5.1及以后版本支持该功能。
请注意,页压缩不支持共享表空间中的表。共享表空间包括系统表空间、临时表空间和常规表空间。
使用批量数据导入
使用主键上已排序的数据源进行批量数据导入可以加快数据插入过程。否则,可能需要在其他行之间插入行以维持顺序,这可能会导致高磁盘 I/O、影响性能并增加分页。禁用自动提交模式也很有用,因为它会为每次提交执行日志刷新到磁盘。在批量插入期间临时移动唯一键和外键也可以显着减少磁盘 I/O。对于新创建的表,最佳实践是在批量导入后创建外键/唯一键约束。
当您的数据达到稳定大小或不断增长的表增加了数十或数百兆字节时,您应该考虑使用 OPTIMIZETABLE 语句来重新组织表并压缩浪费的空间。对重组表进行全表扫描将需要更少的 I/O。
优化 InnoDB 磁盘 I/O
增加 InnoDB 缓冲池大小允许从缓冲池而不是通过磁盘 I/O 访问查询。通过调整innodb_flush_method系统变量来调整缓冲区刷新指标以达到最佳水平。
MySQL的内存分配
在为MySQL分配足够的内存之前,请考虑MySQL在不同区域的内存需求。需要考虑的关键领域是: 并发连接 - 由于存在大量并发连接,排序和临时表将需要大量内存。在撰写本文时,16GB 到 32GB 的 RAM 足以让数据库处理 3000 多个并发连接。
内存碎片可能会消耗大约 10% 或更多的内存。缓存和缓冲区(如 innodb_buffer_pool_size、key_buffer_size、query_cache_size 等)使用约 80% 的已分配内存。
日常维护
定期检查慢查询日志,优化查询机制,高效利用缓存,减少磁盘I/O。优化它们以扫描最少的行数,而不是进行全表扫描。
其他可以帮助DBA检查和分析性能的日志包括:错误日志、通用查询日志、二进制日志和DDL日志(元数据日志)。
定期更新缓存和缓冲区以减少碎片。使用 OPTIMIZETABLE 语句重新组织表并压缩任何浪费的空间。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
