博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 数据库概述
阅读量:3949 次
发布时间:2019-05-24

本文共 13110 字,大约阅读时间需要 43 分钟。

MySQL 数据库概述

MySQL (Structured Query Language) 是最流行的 关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS 应用软件之一。

  • RDBMS(Relational Database Management System:关系数据库管理系统)

什么是 DB ?

数据库(DataBase: DB):数据库是是按照数据结构来组织、存储和管理数据的仓库(存数据的仓库)。

什么是 DBMS ?

数据库管理系统(Database Management System:DBMS):是专门用于 管理数据库的软件

  • 数据库管理系统能够为数据库提供数据的定义、建立、维护、查询和统计等操作功能,并完成对数据完整性、安全性进行控制的功能。

  • 我们一般说的数据库,就是指的 DBMS

什么是 RDBMS ?

关系型数据库(Relational Database Management System):建立在 关系模型 基础上的数据库

关系模型:指 二维表格模型,因此一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。

RDBMS 有哪些特点?

关系数据库管理系统(Relational Database Management System)的特点:

  • 1.数据以表格的形式出现
  • 2.每行为记录名称
  • 3.每列为记录名称所对应的数据域
  • 4.许多的行和列组成一张表单
  • 5.若干的表单组成 database

SQL:结构化查询语言(Structured Query Language)

  • 概念:关系型数据库标准语言。

  • 特点:简单,灵活,功能强大。

SQL 包含 6 个部分

1. 数据查询语言 DQL : Data Query Language ※

  • DQL,也称为 数据检索语句,用以从表中获得数据,确定数据怎样在应用程序给出。

2. 数据操作语言 DML : Data Manipulation Language ※

  • DML,也称为 动作查询语言,其语句包括动词 INSERT,UPDATE 和 DELETE,它们分别用于添加,修改和删除表中的行。

3. 事务处理语言 TPL : Transaction Language

它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括 BEGIN TRANSACTION,COMMIT和ROLLBACK。

4. 数据控制语言 DCL : Data Control Language

它的语句通过 GRANT 或 REVOKE 获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。

5. 数据定义语言 DDL : Data Definition Language ※

其语句包括动词 CREATE 和 DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。

6. 指针控制语言 CCL

它的语句,像 DECLARE CURSOR,FETCH INTO 和 UPDATE WHERE CURRENT 用于对一个或多个表单独行的操作。

SQL 书写规则

  1. 在数据库中,SQL语句大小写不敏感,SELECT/select/SeLeCt

  2. SQL 语句可单行或多行书写

  3. 在 SQL 语句中,关键字不能跨多行或缩写

  4. 为了提高可读性,一般 关键字大写,其他小写

  5. 空格和缩进使程序易读

RDBMS 相关术语

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素)包含了相同的数据, 例如邮政编码的数据。
  • 行:一行(元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

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

15580222-e6816523ac5834c5.png
关系型数据库的表格组成
  • 表头(header): 每一列的名称;
  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性。

什么是表?

MySQL 是一种关系型数据库,关系数据库最重要的概念就是 。表具有固定的列数和任意的行数,在数学上称为“关系”。二维表 是同类实体的各种属性的集合,每个实体对应于表中的一行,在关系中称为 元组,相当于通常的一条记录。

  • 表中的列表示属性,称为Field,相当于通常记录中的一个数据项,也叫 列、字段
15580222-301c3b159f264526.png
使用一张表来存储学生的信息

数据库技术发展历程

第一阶段:层次数据库 和 网状数据库

  • 使用指针来表示数据之间的联系。

第二阶段:关系数据库 ( 表格 )

  • 经典的里程碑阶段,代表 DBMS:Oracle、DB2、MySQL、SQL Server、SyBase 等。

第三阶段:后关系数据库

关系型数据库存在 数据模型、性能、拓展伸缩性 的缺点,从而出现了:

  • ORDBMS:面向对象数据库技术。
  • NoSQL (Not Only SQL 不仅仅是 SQL ) :结构化数据库技术。

常见的 NoSQL 数据库分为四大类:

  1. 键值存储数据库:Oracle BDB,Redis,BeansDB
  2. 列式储数数据库:HBase,Cassandra,Riak
  3. 文档型数据库:MongoDB,CouchDB
  4. 图形数据库:Neo4J,InfoGrid,Infinite Graph

常见的关系数据库

数据库系统 所属公司
Oracle Oracle
DB2 IBM
SQL Server MS
MySQL (开源免费)AB-->SUN-->Oracle
  • Oracle

    运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域。

  • DB2

    速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域。

  • SQL Server

    全面,效率高,界面友好,操作容易,但是不跨平台。适用于于中小型企业领域。

  • MySQL

    开源,体积小,速度快。适用于于中小型企业领域。

MySQL数据库特点

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,所以你不需要支付额外的费用。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对PHP有很好的支持,PHP 是目前最流行的 Web 开发语言。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

MySQL 基本操作流程

  1. 建立连接(认证身份)
  2. 客户端服务器端 发送 SQL 命令
  3. 服务器端 执行 SQL 命令,并返回执行的结果
  4. 客户端 接收结果(并显示)
  5. 断开连接

启动 MySQL 服务

打开数据库连接之前:一定要保证MySQL服务已经开启了.

  • net start

    命令名字:开启一个服务,如:net start MySQL

  • net stop

    命令名字:关闭一个服务器,如:net stop MySQL

?问题:mac系统中报错 -bash: net: command not found

连接 MySQL 数据库

// 格式: mysql -u账户 -p密码 -h数据库服务器安装的主机 -P数据库端口mysql -uroot -padmin -h127.0.0.1 -P3306// 若连接的数据库服务器在本机上,并且端口是3306,则可以简写: mysql -uroot -padmin
Last login: Thu Mar 21 23:01:45 on ttys000diaobaodeMacBook-Air:~ arvin$ mysql -uroot -p # 连接数据库Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 139Server version: 8.0.15 MySQL Community Server - GPLCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

MySQL 的存储引擎

MySQL 中的数据用各种 不同的技术 存储在文件(或者内存)中。其中的每一种技术都使用 不同的存储机制、索引技巧、锁定水平并且最终提供不同的功能。通过选择不同的技术,能够获得额外的速度或者功能,从而改善你的应用的整体功能。

MyISAM 和 InnoDB

  • MyISAM

    拥有较高的插入,查询速度,但 不支持事务,不支持外键

  • InnoDB

    支持事务,支持外键,支持行级锁定,性能较低。

InnoDB 存储引擎提供了具有 提交、回滚和崩溃恢复 的事务安全。但对比MyISAM,处理效率差,且会占用更多的磁盘空间以保留数据和索引。

Command : 查看当前数据库支持的引擎和默认的数据库引擎

mysql> show engines;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         || BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         || MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         || FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       || MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         || PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         || InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        || MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         || CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+9 rows in set (0.00 sec)

Command : 修改某个表的存储引擎

mysql> show engines;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         || BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         || MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         || FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       || MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         || PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         || InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        || MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         || CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+9 rows in set (0.00 sec)mysql> show create table productdir;+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table      | Create Table                                                                                                                                                                                                                    |+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| productdir | CREATE TABLE `productdir` (  `id` bigint(11) NOT NULL AUTO_INCREMENT,  `dirName` varchar(30) DEFAULT NULL,  `parent_id` bigint(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 |+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)mysql> alter table productdir engine=innodb;Query OK, 11 rows affected (0.04 sec)Records: 11  Duplicates: 0  Warnings: 0mysql> show create table productdir;+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table      | Create Table                                                                                                                                                                                                                    |+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| productdir | CREATE TABLE `productdir` (  `id` bigint(11) NOT NULL AUTO_INCREMENT,  `dirName` varchar(30) DEFAULT NULL,  `parent_id` bigint(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 |+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)

MySQL 语句

DQL 语句

Data Query Language 数据查询语言:主要由 select 关键字完成,查询语句是 SQL 语句中最复杂、功能最丰富的语句。操作之后会返回一个查询的结果集。

DML 语句

Data Manipulation Language 数据操作语言:主要由 insert、update 和 delete 三个关键字完成。操作之后会返回一个受影响的行数(成功操作几条数据)。

DDL 语句

Data Definition Language 数据定义语言:主要由 create、alter、drop 和 truncate 四个关键字完成。

DCL 语句

Data Control Language 数据控制语言:主要 grant 和 revoke 两个关键字完成。

事务控制语句

主要由 commit、rollback 和 savepoint 三个关键字完成。

数据库和数据库对象的区别

数据库对象

存储、管理和使用数据的不同 结构形式。如:表、视图、存储过程、函数、触发器、事件等。

数据库 (主要分两种)

存储数据库对象的容器。一般分两类:

  • 系统数据库:系统自带的数据库,不能修改
  • 用户数据库:用户自定义的数据库,一般情况下,一个项目一个用户数据库
mysql> show databases    -> ;+--------------------+| Database           |+--------------------+| information_schema |  # 存储数据库对象信息,如:用户表信息,列信息,权限,字符,分区等| mysql              |  # 存储数据库用户权限信息| myTest             |  # 自定义数据库| performance_schema |  # 存储数据库服务器性能参数信息| sys                |  # 系统数据库| vocabulary_001     |  # 自定义数据库+--------------------+6 rows in set (0.01 sec)mysql>

MySQL 数据类型

MySQL 类型和 Java 类型对比

15580222-ee07bcf364b26463.png
MySQL类型和Java类型对比

整数类型

15580222-9242fa3982f00955.png
数据库整数类型

最常用的整数类型

MySQL 列类型 Java 数据类型
INT / INTEGER int / Integer
BIGINT long / Long

MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。

例如,指定一个字段的类型为 INT(6),就可以保证所包含 数字个数少于 6 个 的数值从数据库中检索出来时,能够自动地用 0 来占位,如果个数大于等于 6 个,则就不用进行占位。

再如,age int(2),并不是代表age最多存储99,而是查询 age 的值的时候,使用两个0来占位,如果只有一个数字,则在前面用一个 0 来占位,就算存10000 也可以存,因为虽然 10000 的数字个数是 5 个,但 10000 的值并没有超出 int 的范围。

  • 一般不用指定位宽 ,因为如果数字个数没有达到指定的位宽会补0占位,达到或超过位宽也没有任何影响,是否越界是根据类型的范围决定的,数据类型的范围不会因为指定的位宽不同而有改变

小数类型

15580222-59f651a36703562d.png
数据库小数类型

小数类型,可存放实型和整型,精度(p) 和 范围(s)

FLOAT(s,p)DOUBLE(s,p) :单精度和双精度数据类型,都不够精确,例如,money double(5,2) :整数和小数一共占5位,其中小数占2位。

定点数据类型: DECIMAL 高精度类型,金额货币优先选择。

MySQL 列类型 Java 数据类型
FLOAT float / Float
DOUBLE double / Double
DECIMAL BigDecimal

字符类型

15580222-7d2a481784ff1c72.png
字符类型
  • char(size) 定长字符

    0 - 255字节,size 指 N 个字符个数,若插入字符个数超过设定长度,会被截取并警告。

  • varchar(size) 变长字符

    0 - 255字节,从 MySQL5 开始支持 65535 个字节,若插入字符数超过设定长度,会被截取并警告。

  • TEXT

    一般存储大量的字符串,比如 文章的纯文本,可以选用TEXT系列类型。

注意 : 在MySQL中,字符使用 '单引号' 引起来相当于 Java中字符串 ( String, StringBuilder/StringBuffer )

char(5) 和 varchar(5) 的对比

15580222-1288019ba1e09cf8.png
char 和 varchar 对比

日期和时间类型

15580222-516e563fbe778264.png
时间和日期类型

日期和时间类型为 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。

注意 : 在MySQL中,日期时间值使用单引号引起来。 相当于 Java中 Date,Calender。

二进制类型(布尔值、图片、音频、视频)

15580222-290df26c815c5e89.png
二进制类型
  • BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB : 存放图形、声音和影像,二进制对象,0-4GB。

    但是,在开发中,我们一般存储二进制文件保存路径的路径存储在数据库中

  • BIT:我们一般存储0或1,相当于是 Java 中的 boolean/Boolean 类型的值。


Reference

转载地址:http://gghwi.baihongyu.com/

你可能感兴趣的文章
Windows10 + Nodejs调用C++语言Dll
查看>>
CSAPP - 一个简单的Shell
查看>>
《算法4》 Windows/Mac环境下使用Visual Studio Code和Orcale JDK1.8开发环境搭建
查看>>
精心整理很实用的前端笔记,看完你就在css上有很深的造诣了!!!
查看>>
前端开发在工作中用到的工具、软件、库.......------Sesiid
查看>>
正则表达式~~~很全的------Sestid
查看>>
在HTML中嵌入百度地图------Sestid
查看>>
Js或jQuery图片层叠轮播------Sestid
查看>>
js或jQuery实现返回顶部功能------Sestid
查看>>
JS实现拖拽效果------Sestid
查看>>
jQuery实现倒计时秒杀效果------Sestid
查看>>
jQuery实现html网页顶部自适应导航栏(media)------Sestid
查看>>
鼠标悬停显示下划线(带小特效)------Sestid
查看>>
jQuery 实现input搜索框自动匹配------Sestid
查看>>
Js 实现回车键触发登录,并弹出需要输入信息------Sestid
查看>>
Js字符串和数组方法及使用------Sestid
查看>>
JavaScript常用算法(面试)------Sestid
查看>>
Js或者jQuery实现点击图片出现蒙层并将图片放大在蒙层上------Sestid
查看>>
Js,jQuery事件、效果大全------Sestid
查看>>
CSS块元素、内联元素、内联块元素详解------Sestid
查看>>