热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

介绍_MySQL1介绍

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL---1介绍相关的知识,希望对你有一定的参考价值。一、

篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL---1介绍相关的知识,希望对你有一定的参考价值。




一、mysql简介


1、MySQL简介

MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。目前MySQL被广泛地应用在Internet上的中小型网站中,由于体积小、速度快、总体拥有成本低,开放源码、免费,一般中小型网站的开发都选择Linux + MySQL作为网站数据库。
MySQL是一个关系型数据库管理系统,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,就增加了速度并提高了灵活性。
MySQL的官方网站的网址是:www.mysql.com


2、MySQL特性

MySQL是一种使用广泛的数据库,特性如下:
A、使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性   
B、支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。   
C、为多种编程语言提供了API。编程语言包括C、C++、Python、Java、Perl、php、Eiffel、Ruby和Tcl等。   
D、支持多线程,充分利用CPU资源   
E、优化的SQL查询算法,有效地提高查询速度   
F、既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名   
G、提供TCP/IP、ODBC和JDBC等多种数据库连接途径   
H、提供用于管理、检查、优化数据库操作的管理工具   
I、可以处理拥有上千万条记录的大型数据库


3、MySQL应用

与大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。 目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。由于Linux+Apache+MySQL+PHP都是自由或开放源码软件(FLOSS),因此使用LAMP不用花一分钱就可以建立起一个稳定、免费的网站系统。


4、MySQL管理

可以使用命令行工具管理MySQL数据库(命令mysql 和 mysqladmin),也可以从MySQL的网站下载图形管理工具MySQL Administrator和MySQL Query Browser。   
phpMyAdmin是由php写成的MySQL资料库系统管理程式,让管理者可用Web界面管理MySQL资料库。   
phpMyBackupPro也是由PHP写成的,可以透过Web介面创建和管理数据库。它可以创建伪cronjobs,可以用来自动在某个时间或周期备份MySQL 数据库。   
另外,还有其他的GUI管理工具,例如早先的mysql-front以及ems mysql manager,navicat 等等。


5、相关概念

MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:



  • 表头(header): 每一列的名称;

  • 列(row): 具有相同数据类型的数据的集合;

  • 行(col): 每一行用来描述某个人/物的具体信息;

  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;

  • 键(key): 表中用来识别某个特定的人\\物的方法, 键的值在当前列中具有唯一性。




二、MySLQ存储引擎


1、MySQL存储引擎简介

插件式存储引擎是MySQL数据库最重要的特性之一,用户可以根据应用的需要选择如何存储和索引数据库,是否使用事务等。mySQL默认支持多种存储引擎,以适应不同领域的数据库应用需要。用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存储,用户设置可以按照自己的需要定制和使用自己的存储引擎,以实现最大程度的可定制性。
MySQL常用的存储引擎为MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。
MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。MySQL支持外键存储引擎只有InnoDB,在创建外键的时候,要求附表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。


2、MySQL存储引擎特性

主要体现在性能、事务、并发控制、参照完整性、缓存、故障恢复,备份及回存等几个方面
目前比较普及的存储引擎是MyISAM和InnoDB,而MyISAM又是绝大部分Web应用的首选。MyISAM与InnoDB的主要的不同点在于性能和事务控制上。
MyISAM是早期ISAM(Indexed Sequential Access Method)的扩展实现,ISAM被设计为适合处理读频率远大于写频率的情况,因此ISAM以及后来的MyISAM都没有考虑对事物的支持,不需要事务记录,ISAM的查询效率相当可观,而且内存占用很少。MyISAM在继承了ISAM优点的同时,与时俱进的提供了大量实用的新特性和相关工具。例如考虑到并发控制,提供了表级锁。而且由于MyISAM是每张表使用各自独立的存储文件(MYD数据文件和MYI索引文件),使得备份及恢复十分方便(拷贝覆盖即可),而且还支持在线恢复。
所以如果应用不需要事务,不支持外键,处理的只是基本的CRUD(增删改查)操作,那么MyISAM是不二选择。


三、MySLQ数据类型


1、常见

MySQL有三大类数据类型, 分别为数字、日期\\时间、字符串, 这三大类中又更细致的划分了许多子类型:



  • 数字类型


    • 整数: tinyint、smallint、mediumint、int、bigint

    • 浮点数: float、double、real、decimal




  • 日期和时间: date、time、datetime、timestamp、year

  • 字符串类型


    • 字符串: char、varchar

    • 文本: tinytext、text、mediumtext、longtext

    • 二进制(可用来存储图片、音乐等):bit, tinyblob、blob、mediumblob、longblob









2、详细

1)整数类型

































类型字节数范围
TNIYINT1-128~127
SMALLINT2-32767~32768
MEDIUMINT3-8388608~8388607
INT4-2147483648~2147483647
BIGINT8-9223372036854775808~9223372036854775807


  • 每个整数类型都有对应的无符号(UNSIGNED)类型。

  • 建议使用TINYINT代替ENUM。

  • 避免使用整数的显示宽度。

2)实数类型























类型字节备注
FLOAT4单精度浮点数
DOUBLE8双精度浮点数
DECIMAL可变高精度定点数


  • DECIMAL只是一种存储格式,MySQL以二进制的合适存储DECIMAL类型的列。在计算中,DECIMAL会转换成DOUBLE。

  • 不建议指定浮点数的精度。

  • 不建议使用DECIMAL。

  • 建议要存储的实数乘以相应的倍数,使用整数类型运算和存储。

3)字符串类型

VARCHAR vs CHAR


















类型最大长度备注
CHAR(size)255字节定长。size指定的是字符数,不是字节数。
VARCHAR(size)65532字节变长。size指定的是字符数,不是字节数。


  • 适用VARCHAR:



    • 字符串地最大长度比平均长度大很多;

    • 列更新很少,所以碎片不是问题;

    • 使用像UTF8这样复杂地字符集,每个字符都可能使用不同的字节数进行存储。



  • 适用CHAR:



    • 短字符串;

    • 所有值都接近一个长度;

    • 经常变更的列,这样不易产生碎片;



  • CHAR类型的列,原字符串末尾的空格会被“干掉”,再填充空格。MySQL检索CHAR不会使用末尾的空格。(列是定长的,MySQL没有存储写入的字符串有多长,只好一刀切,末尾的空格都忽略掉。)



  • VARCHAR末尾的空格不会被“干掉”,检索的时候会用到。(MySQL存储了写入的字符串的长度,这样可以知道字符串末尾有多少各空格是你写入的。)



  • VARCHAR(5)和VARCHAR(200),如果都只存了"abc",它们有什么不同呢?实际上,MySQL会分配固定大小地内存块来保存内部值,因此VARCHAR(200)的列尽管只存了和VARCHAR(5)一样的字符串,但是分配的内存可能会大得多。



BINARY vs VARBINARY


















类型最大长度备注
BINARY255定长
VARBINARY65535变长


  • BINARY和VARBINARY与CHAR和VARCHAR非常类似。

  • BINARY和VARBINARY存储的是二进制字符串,与字符集无关。

  • BINARY的末尾会被填充\\0,并且会加入检索。

BLOB vs TEXT


L表示数据的长度。
L+x表示存储需要的空间。


































































类型存储
TINYBLOBL+1 bytes, L <2^8
SMALLBLOB/BLOBL+2 bytes, L <2^16
MEDIUMBLOBL+3 bytes, L <2^24
LONGBLOBL+4 bytes, L <2^32
TINYTEXTL+1 bytes, L <2^8
SMALLTEXT/TEXTL+2 bytes, L <2^16
MEDIUMTEXTL+3 bytes, L <2^24
LONGTEXTL+4 bytes, L <2^32


  • BLOB系列存储二进制字符串,与字符集无关。

  • TEXT系列存储非二进制字符串,与字符集相关。

  • 一般情况下,你可以认为BLOB是一个更大的VARBINARY;TEXT是一个更大的VARCHAR。

  • MySQL只能对BLOB和TEXT的前面max_sort_length各字符进行排序和索引。

  • BLOB和TEXT都不能有default value。

  • 当BLOB和TEXT的长度太大时,InnoDB会使用专门的“外部”存储区域来进行存储。



4)日期和时间类型

5)一些原则



  • 选择最小的满足需求的数据类型。




一般情况下,应该尽量使用可以正确存储数据的最小数据类型。
简单就好。





比如,用MySQL的内建类型date, time, datetime来存储时间,而不是使用字符串;用INT UNSIGNED来存储IPv4地址。





如何存储IPv6的地址?IPv6地址128bit,MySQL最大的整数类型BIGINT只有64bit。可以将其存储成定长(16字节)的二进制字符






  • 尽量避免使用NULL。



四.MySQL体系结构简介


4.1.MySQL逻辑概念






图片来自网络



  • 连接层
    通讯协议的处理、线程处理、网络权限、账号认证等



  • 处理层
    权限处理、结果缓存(Query cache)、查询解析、优化器、查询执行、返回等



  • 存储层
    用于持久化处理层的数据,innodb、MyISAM、Memory、Heap




4.2.MySQL存储结构



  • 实例
    由数据库后台进程/线程以及一个共享区域组成(程序的概念),数据库实例是用来操作数据库文件的



  • 数据库
    数据库(数据库文件)是一个或者一组二进制文件,通常来说存在与文件系统之上



  • 单进程多线程结构
    不会影响MySQL的性能,看程序如何写。(多进程程序,进程间通信开销大于多线程)



  • 存储引擎的概念
    可以理解成文件系统,例如FAT32, NTFS, EXT4。 一个表是一个分区,引擎就是分区的文件系统
    存储引擎的对象就是表



  • 逻辑存储结构
    instance
    database
    schema
    tablespace
    table




4.3.MySQL文件结构






图片来自原创



  • MySQL配置文件
    my.cnf



  • 表结构的组成
    表结构定义文件:frm
    innodb数据文件:ibd
    MyISAM数据文件:myi
    共享表空间文件:ibdata*



  • error log(错误日志)
    error_log



  • binary log(二进制日志)
    记录数据库写入操作的日志,可以用于备份恢复后者是master/slave 的复制
    log_bin
    log_bin_index
    log_bin_basename



  • slow query log(慢日志)
    将运行超过某一个时间戳的阈值的SQL语句记录到文件
    slow_query_log
    slow_launch_time
    slow_query_log_file



  • general log(常规日志也叫全量日志)
    开启后将记录所有链接到MySQL任何的操作
    general_log
    general_log_file





  • relay-log(中继日志)
    io_thread 从master读到的日志写到中继日志中,供sql_thread执行完,已完成复制成功
    relay_log=relay-bin



  • innodb redo log
    5.6之前redo log 个数总大小不能超过4G
    5.6.之前redo log的大小不能更改,变更后数据器启动失败
    innodb_log_group_home_dir=/data01/mysql/mysql3306/logs
    innodb_log_file_size=200M
    innodb_log_files_in_group=3








推荐阅读
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • PHP编程能开发哪些应用?
    导读:很多朋友问到关于PHP编程能开发哪些应用的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • 与.Net大师Jeffrey Richter面对面交流——TUP对话大师系列活动回顾(多图配详细文字)...
    与.Net大师JeffreyRichter面对面交流——TUP对话大师系列活动回顾(多图配文字)上周末很有幸参加了CSDN举行的TUP活动, ... [详细]
author-avatar
知足者常乐-----仙_230
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有