一、数据库简介
1、什么是数据库
数据库是20世纪60年代末发展起来的⼀项重要技术,已经成为计算机科学与技术的⼀个重要分 支。数据库技术主要是用来解决数据处理的非数值计算问题,数据处理的主要内容是数据的存储、查询、修改、排序和统计等。
2、为什么要使用数据库
(1)数据持久化:数据库可以将数据保存在存储介质中,即使应⽤程序关闭或服务器重启,数据也不会丢失
(2)数据结构化:数据库能够以结构化的方式存储数据,使得数据易于管理和查询。
(3)数据完整性:数据库管理系统(DBMS)提供了数据完整性的保障,确保数据的准确性和⼀致性。
(4)并发控制:数据库可以处理多个用户或进程同时访问和修改数据,同时确保数据的⼀致性。
(5)安全性:数据库提供了多种安全机制,如访问控制、加密等,保护数据不被未授权访问。
(6)可扩展性:随着数据量的增长,数据库可以水平或垂直扩展,以适应不断增长的数据需求。
(7)备份和恢复:数据库支持数据的备份和恢复,以防数据丢失或损坏。
(8)查询优化:数据库系统提供了高效的查询优化器,可以快速执⾏复杂的查询操作。
(9)事务管理:⼤部分关系型数据库都支持事务,确保⼀系列操作要么完全成功,要么完全失败,提高了操作的可靠性。
(10)多用户支持:数据库允许多个用户同时访问和操作数据,适合多用户环境。
3、主流数据库
3.1关系型数据库
(1)Oracle:甲骨文产品,适合大型项目,业内最强的数据库,没有之⼀,需要收费。
(2)MySQL:开源免费,最受欢迎的数据库,在中小企业中普及率非常高,属于甲骨文,主要用在电商,论坛等。
(3)PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,可以免费使用,修改和分发。
(4)SQLSever:微软推出的⼀款专业级数据库,与旗下的操作系统,编程环境配合使用,适用于中大型项目。
(5)SQLite:⼀款轻型的数据库,占用资源非常低,常用于嵌入式设备,手机APP,桌面程序等场景。
3.2非关系型数据库
(1)Redis:流行的基于键值对的内存数据库,常用作缓存,支持数据持久化,支持多种数据结构。
(2)MongoDB:基于NoSQL的文档型数据库,易扩展,高性能,高可用性,支持丰富的查询和聚合操作。
4、什么是关系型数据库
关系型数据库是指采用了关系模型来组织数据的数据库,以行和列的形式存储数据。关系模型可 以简单理解为⼆维表格模型,而⼀个关系型数据库就是由⼆维表及其之间的关系组成的⼀个数据组 织。
二、MySQL
1、mysqld服务端程序
当MySQL安装完成之后,bin目录下有⼀个mysqld(Linux)或mysqld.exe(windoows)的可执行程 序,mysqld可执行程序运行后,MySQL服务也就启动了。当把MySQL服务配置为自启动,操作系统启动时会自动运行mysqld可执行程序,从而启动MySQL服务。
2、数据库服务器,数据库与表之间的关系
数据库服务器是指在机器上安装了⼀个数据库管理系统程序,这个管理程序可以管理多个数据库, ⼀般开发人员会针对每⼀个应用创建⼀个数据库。
为保存应用中实体的数据,⼀般会在数据库中创建多个表,以保存程序中实体的数据
三、客户端工具
1、mysql
MySQL安装成功后自带的命令行客户端⼯具,可以输入命令和执行SQL语句,mysql的基本使用非常简单,打开终端并输入以下命令:
使用前检查PATH环境变量中是否配置了mysql所在目录
# 使⽤mysql客⼾端连接服务器
C:\Users\bit>mysql -uroot -p
# 输⼊密码
Enter password:
your_password
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.39 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 编写SQL语句
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.39 |
| |
+-----------+
1 row in set (0.00 sec) # 查询结果
mysql> # 这⾥可以继续输⼊数据库操作指令
2、Workbench
MySQL官方提供的可视化客户端⼯具。
3、Navicat Lite版
业内⼴泛使用的可视化客户端⼯具,现在出了免费的Lite版本,对于学习中编写SQL语句完全够用,推荐使用,第⼀次使用要先配置连接
(我用的是Navicat Lite)
四、客户端与服务器的通讯方式
1、C/S架构与B/S架构
C/S架构即客⼾端/服务器架构模式
B/S架构即浏览器/服务器架构模式
1.1CS 架构
C/S 架构全称是客户端/服务器(Client/Server)架构,是常用的两层架构。客户端需要安装客户端软件,服务端程序运行在服务器上,提供Socket或数据库服务。
使用客户端与MySQL数据库服务器通讯属于C/S架构
常用于固定用户群体中。常见的C/S架构的应用,比如QQ,CCTALK,各种网络游戏等等,⼀般需 要安装并且与服务器进行网络通信的都属于此类。
优点:
(1)大部分业务都可以在客户端完成,充分利用本地的计算机资源
(2)响应速度快
(3)个性化定制能力强
(4)面向相对固定的用户群,对信息安全的控制能力强
缺点:
(1)需要安装客户端才能使用
(2)维护成本高,任何⼀台电脑上的客户端出现问题都需要进行维护,升能过程繁琐
1.2BS架构
B/S架构全称是浏览器/服务器(Browser/Server)结构,分为Web浏览器、服务器程序、数据库服务三部分,可以理解为是对C/S架构⼀种改进。由于所有的业务逻辑都由服务器程序处理,所以客户端仅使用浏览器就可以完成所有操作,大大降低了客户端的维护成本。
常用于对公开用户提供的网络服务中。比如常见的大型网站都属于此类。
优点:
(1)客户端零维护,只需要安装⼀个浏览器即可
(2)所有业务都集中在服务器端,业务扩展非常方便
(3)维护成本低,只需要维护服务器即可
缺点:
(1)服务器安全与业务处理能力需要花费很大精力与成本
(2)不同浏览器支持不尽⼈意
五、SQL简介
1、什么是SQL
SQL(StructuredQueryLanguage)是结构化查询语言的简称,是⼀种数据库查询和程序设计语言, 用于存取数据以及查询、更新和管理关系数据库。
2、SQL分类
(1)DDL 【 Data Definition Language 】 数据定义语言,用来维护存储数据的结构
代表指令:create,drop,alter
(2)DML 【 Data Manipulation Language 】 数据操纵语言,用来对数据进行操作
代表指令:insert,delete,update,select
(3)DCL 【 Data Control Language 】 数据控制语言,主要负责权限管理和事务
代表指令:grant,revoke,commit
六、存储引擎
1、简介
存储引擎是MySQL数据库处理数据的核心组件,不同的存储引擎对数据如何存储、索引、更新和 查询的实现方式各有不同,在不同的业务场景可以选用合适的存储引擎。MySQL服务器采用可插拔的存储引擎架构,在服务器运行时可以动态的加载和卸载。
2、查看存储引擎
查看当前服务器支持哪些存储引擎可以使用SHOW ENGINES 语句,
七、库的操作
1、查看数据库
show databases;
#注:大小写不敏感
2、创建数据库
2.1语法
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option] ...
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
| ENCRYPTION [=] {'Y' | 'N'}
}
2.2示例
2.2.1创建⼀个名为test+班级号的数据库
mysql> create database test001;
Query OK, 1 row affected (0.01 sec)
2.2.2自定义⼀个数据库名,如果数据库不存则创建
mysql> create database if not exists testdb;
Query OK, 1 row affected (0.01 sec)
2.2.3重新运行上面的语句观察现象
mysql> create database if not exists testdb;
Query OK, 1 row affected, 1 warning (0.01 sec) # 这⾥有⼀个警告信息
2.2.4查看警告信息
mysql> show warnings;
+-------+------+-------------------------------------------------+
| Level | Code | Message |
+-------+------+-------------------------------------------------+
| Note | 1007 | Can 't create database 'testdb'; database exists|
+-------+------+-------------------------------------------------+
1 row in set (0.00 sec)
# 提⽰名为testdb的数据库已存在
数据库创建成功后,会在数据目录下生成⼀个与数据库同名的目录,用于保存数据库中所有的数据
3、字符集编码和校验(排序)规则
3.1查看数据库支持的字符集编码
show charset;
MySQL8.0默认的字符集编码是utf8mb4 ,MySQL5.7默认的字符集是latin1
3.2查看数据库支持的排序规则
show collation;
MySQL8.0默认的排序规则是utf8mb4_0900_ai_ci ,MySQL5.7默认排序规则是utf8mb4_general_ci
3.3不同的字串集与排序规则对数据库的影响
(1)utf8mb4_0900_ai_ci 是MySQL8.0引入的新规则,在老版本中不能识别
(2)utf8mb4 编码是对 Unicode 字符集的⼀种实现,用1到4个字节表示⼀个字符,可以表示世界上几乎所有的字符,而且更节少空间
(3)0900 是基于UCA9.0.0算法,UCA是UnicodeCollationAlgorithm的缩写
(4)ai是Accent-insensitive的缩写,表示口声不敏感
(5)ci是Case-insensitive的缩写表示大小写不敏感
(6)as是Accent-sensitive的缩写,表示口声敏感
(7)cs是Case-sensitive的缩写,表示大小写敏感
(8)bin表示⼆进制
3.4查看系统默认字符集和排序规则
# 查看系统默认字符集
mysql> show variables like '%character%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value
|
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8mb4
|
| character_set_connection | utf8mb4
|
| character_set_database | utf8mb4
|
| character_set_filesystem | binary
|
| character_set_results | utf8mb4
|
| character_set_server | utf8mb4
|
| character_set_system | utf8mb3
|
| character_sets_dir | D:\Program Files\MySQL\MySQL Server
8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
# 查看系统默认排序规则
mysql> show variables like '%collation%';
+-------------------------------+--------------------+
| Variable_name | Value |
+-------------------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database | utf8mb4_0900_ai_ci |
| collation_server | utf8mb4_0900_ai_ci |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
+-------------------------------+--------------------+
4 rows in set, 1 warning (0.00 sec)
3.5创建数据库时指定字符集和检验规则
创建⼀个库名为班级名,字符编码集为utf8mb4 ,排序规则为 utf8mb4_0900_ai_ci 的数据库,数据库不存在时则创建
create database if not exists java01 character set utf8mb4 collate utf8mb4_0900_ai_ci;
数据库创建成功之后,在数据目录下会生成⼀个与数据库同名的目录,数据库中的所有数据都保存在这个目录下
4、查看创建语句
4.1语法
show create database db_name
4.2示例
mysql> show create database java01;
+----------+---------------------------------------------+
| Database | Create Database
|
+----------+----------------------------------------------
| java01 | CREATE DATABASE `java01` /*!40100 DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------
1 row in set (0.01 sec)
(1)数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
(2)/*!40100default.... */ 和/*!80016 DEFAULT...*/ 这个不是注释,表示当前mysql版本大于4.01和 8.0.16时,分别执行对应的语句
5、修改数据库
5.1语法
ALTER {DATABASE | SCHEMA} [db_name]
alter_option ...
alter_option: {
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
| [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}
| READ ONLY [=] {DEFAULT | 0 | 1}
}
对数据库的修改主要是修改数据库的字符集,校验规则
5.2示例
将test+班级名的数据库字符集改成gbk
mysql> alter database test001 character
Query OK, 1 row affected (0.01 sec)
mysql> show create database
+----------+---------------------------------
| Database | Create Database
+----------+---------------------------------
| java01 | CREATE DATABASE `test001` /*!40100 DEFAULT CHARACTER SET gbk */
/*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------
1 row in set (0.00 sec)
6、删除数据库
6.1语法
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
6.2示例
mysql> drop database testdb;
Query OK, 0 rows affected (0.04 sec)
6.3注意事项
(1)删除数据库是⼀个危险操作,不要随意删除数据库
(2)删除数据库之后,数据库对应的目录及目录中的所有文件也会被删除
(3)删除数据库之后,使用showdatabases;语句查看不到对应的数据库