mysql
1. 数据库的介绍
数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库。它是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是一个文件集合,本质就是一个文件系统,它按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作。这些数据可以是数字、文字、图形、图像、声音、语言等,它们被存放在结构化的数据表里,并按一定顺序排列组合。
数据库具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四个特性。根据数据结构的不同,数据库通常分为关系型数据库(SQL)和非关系型数据库(NoSQL)。 关系型数据库如Oracle、MySQL、SQL Server等,具有易于维护、使用方便、多表复杂操作友好度高等优点,但大批量数据的读写效率较差,表结构固定,灵活度稍欠。非关系型数据库如Redis、MongoDB等,则具有存储数据的格式灵活、速度快效率高、可扩展性强等优点,但不支持或有限支持SQL,数据结构相对复杂,学习和使用的成本高。
数据库管理系统(DBMS)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。 常见的数据库管理系统有MySQL、SQL Server、Oracle和DB2等。
数据库的发展史可以追溯到最早的通过大量的分类、比较和表格绘制的机器运行数百万穿孔卡片来进行数据的处理,其运行结果在纸上打印出来或者制成新的穿孔卡片。随着计算机的广泛应用,传统的文件系统已经不能满足人们对数据共享的需求,于是能够统一管理和共享数据的数据库管理系统应运而生。
在生活中,人们可以直接用中文、英文等自然语言描述客观事物,但在计算机中,需要抽象出对这些事物感兴趣的特征,并组成一个记录来描述。例如,在学生档案中,学生信息是由学号、姓名、性别、年龄、籍贯、联系电话等特征组成的,那么这些具体的特征值所构成的一条记录就是一个学生的信息数据。
1.2 主流数据库
SQL Sever: 微软的产品,.***程序员的最爱,中大型项目。
Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
2. MySQL的介绍
MySQL是一个关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,目前属于Oracle旗下产品。它是最流行的关系型数据库管理系统之一, 特别是在WEB应用方面,MySQL被认为是最好的RDBMS应用软件之一。
关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这种设计增加了速度并提高了灵活性。 MySQL所使用的SQL(Structured Query Language,结构化查询语言)是用于访问数据库的最常用标准化语言,这使得用户可以通过编写SQL语句来查询、插入、更新和删除数据库中的数据。
MySQL软件采用了双授权政策,分为社区版和商业版。 由于其体积小、速度快、总体拥有成本低,并且开放源代码,MySQL成为了中小型和大型网站开发的首选数据库。此外,MySQL使用C和C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。同时,它为多种编程语言提供了API,方便开发者在不同的编程环境中使用MySQL。
MySQL是一个功能强大、易于使用且经济实惠的关系型数据库管理系统,广泛应用于各种规模的网站和应用程序中。
2.1 MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。 各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
MySQL的架构大致可以分为以下几层:
(1)网络连接层:提供与MySQL服务器建立连接的支持,支持各种主流的服务器编程技术,如Java、C、Python、.***等,通过各自的API技术与MySQL建立连接。
(2)服务层:这是MySQL的核心部分,主要包含以下内容:
1. 连接池:负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接。
2. 系统管理和控制工具:如备份恢复、安全管理、集群管理等。
3. SQL接口:用于接受客户端发送的各种SQL命令,并返回用户需要查询的结果,如DML、DDL、存储过程、视图、触发器等。
4. 解析器:负责将请求的SQL解析生成一个“解析树”,然后根据一些MySQL规则进一步检查解析树是否合法。
5. 查询优化器:当“解析树”通过解析器语法检查后,将交由优化器将其转化成执行计划,然后与存储引擎交互。
6. 缓存:包括一系列小缓存,如表缓存、记录缓存、权限缓存、引擎缓存等。 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
(3)存储引擎层:负责MySQL中数据的存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,服务器中的查询执行引擎通过接口与存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异。常见的存储引擎有InnoDB、MyISAM、Memory等。InnoDB是MySQL的默认存储引擎,它支持事务、行锁和外键等功能。
此外,MySQL的架构中还包括系统文件层,但这一层通常与存储引擎层紧密相关,因为存储引擎需要与底层系统文件进行交互。
2.2 SQL分类
DDL【Data Definition Language】 数据定义语言,用来维护存储数据的结构,代表指令: create, drop, alter
。
DML【Data Manipulation Language】 数据操纵语言,用来对数据进行操作,代表指令: insert,delete,update
。
DQL【Data Query Language】数据查询语言,用来对数据进行查询操作,代表指令: select
。
DCL【Data Control Language】 数据控制语言,主要负责权限管理,代表指令: grant,revoke,***mit
。
TCL【Transaction Control Language】事务控制语言,用于管理数据库事务,代表指令:***mit、rollback
。
2.3 MySQL的基本使用
连接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -u root -p
如果没有写 -h 127.0.0.1 默认是连接本地
如果没有写 -P 3306 默认是连接3306端口号
查询数据库
通过show databases;
操作,我们可以查看到当前MySQL中所拥有的所有数据库。
show databases;
创建数据库
通过create databases <数据库的名字>;
操作,我们可以创建数据库。
create database database_test;
使用数据库
如果我们要对数据库进行下一步操作use <数据库的名字>;
,我们要先选择使用那一个数据库。
use database_test;
数据库修改成功。
创建数据库表
使用create语句进行我们数据库表的创建 create table <数据库表名>( id int, name varchar(32), gender varchar(2) );
我们建的表中包含了三个数据分别是id、姓名和性别。
注意SQL语句都是以 ;
结尾的。
> create table person(
-> id int,
-> name varchar(32),
-> gender varchar(2)
-> );
数据库表创建成功。
查看数据库表的信息
输入desc <数据库表的名字>;
我们就可以查看到数据库表的基本信息。
desc database_test;
表中插入数据
向数据库表中插入数据insert into <数据库表名> (id, name, gender) values (1, '张三', '男');
注意插入()中的信息和上面建表一致即可。
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
我们同样可以插入部分的数据insert into <数据库表名> (id, name) values (3, '赵六');
注意前后()中的内容匹配即可。
insert into person (id, name) values (3, '赵六');
查询表中的数据
使用select查询数据库表中的数据,select * from <数据库表名>
这里的 *
表示所有的数据。
select * from person;
删除数据库表的数据
delete from <表名> where id=3;
delete表示删除操作,操作from来自<表名>的数据,且数据的id为3,因为有两条id=3所以删除了两条信息。如果是 delete from <表名>
就表示删除表中全部数据。
delete from person where id=3;
删除数据库
drop database <数据库名>;
drop删除数据库。
drop database database_test;
database_test就被删除了。
2.4 MySQL存储引擎
MySQL的存储引擎是数据库底层软件组织,它负责数据的存储、处理和保护。不同的存储引擎提供不同的存储机制、索引技巧、锁级别和事务等功能。MySQL的存储引擎是基于表的,而非数据库。
MySQL中最常用的存储引擎包括InnoDB和MyISAM。 InnoDB是MySQL 5.5版本之后的默认存储引擎,它支持事务、提供行级锁,每个表的主键不能为空且支持主键自增长,还支持外键完整性约束。
InnoDB的设计旨在达到处理巨大数据量的最大性能,其CPU效率可能是其他基于磁盘的关系型数据库引擎所无法比拟的。
MyISAM存储引擎则不支持事务和外键,它使用表级锁来控制并发的读写操作,并支持全文索引。MyISAM引擎强调快速读取操作,因此主要用于高负载的SELECT查询,对于没有事务完整性要求的应用,可以使用MyISAM来创建表。
除了InnoDB和MyISAM之外,MySQL还支持其他存储引擎,如Memory、Federated、CSV等,每种存储引擎都有其特定的使用场景和优势。
此外,MySQL的存储引擎是可插拔的,这意味着用户可以根据需要选择和更换存储引擎,以满足不同的应用需求。这种灵活性使得MySQL能够适应各种场景,从简单的个人项目到复杂的企业级应用。
MySQL的存储引擎是数据库管理系统中的重要组成部分,它负责数据的存储、访问和管理,并提供了多种选择以满足不同的应用需求。
查看存储引擎
show engines\G;
\G指表示输出格式化,无关字符不进行打印。