什么是数据库
存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
数据库存储介质:
- 磁盘
- 内存
为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据
库的水平是衡量一个程序员水平的重要指标。
主流数据库
SQL Sever
: 微软的产品,.Net程序员的最爱,中大型项目。
Oracle
: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
MySQL
:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电
商,SNS,论坛。对简单的SQL处理效果好。
PostgreSQL
:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研
究使用,可以免费使用,修改和分发。
SQLite
: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
H2
: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
基本使用
Ubuntu系统下的MySQL与CentOS系统下的操作在整体功能和使用上是相似的,但在安装、管理服务等部分操作细节上存在一些区别,以下为你详细介绍:
1. 安装方式(在【MySQL】安装教程已详细介绍)
- Ubuntu:使用
apt
包管理工具,它是基于Debian的软件包管理系统。安装前先更新软件包列表,然后安装MySQL服务器。
sudo apt update
sudo apt install mysql-server
- CentOS:使用
yum
(CentOS 7及以下版本)或dnf
(CentOS 8及以上版本)包管理工具,属于Red Hat系列的软件包管理系统。通常需要先配置MySQL官方的Yum存储库,再进行安装。以CentOS 7为例:
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
sudo yum localinstall mysql80-community-release-el7-5.noarch.rpm
sudo yum makecache
sudo yum install mysql-community-server
2. 服务管理
- Ubuntu:使用
systemctl
或service
命令来管理MySQL服务,systemctl
是更推荐的方式,它是基于systemd的服务管理工具。
# 启动服务
sudo systemctl start mysql
# 停止服务
sudo systemctl stop mysql
# 重启服务
sudo systemctl restart mysql
# 设置开机自启
sudo systemctl enable mysql
- CentOS:同样使用
systemctl
或service
命令,但服务名称为mysqld
。
# 启动服务
sudo systemctl start mysqld
# 停止服务
sudo systemctl stop mysqld
# 重启服务
sudo systemctl restart mysqld
# 设置开机自启
sudo systemctl enable mysqld
3. 初始密码设置
- Ubuntu:在Ubuntu 18.04及以后版本中,MySQL的root用户默认使用
auth_socket
插件进行身份验证,而不是传统的密码验证。这意味着你可以直接使用sudo mysql
命令以root身份登录,无需密码。如果要设置密码,可以在登录后执行以下操作:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
- CentOS:在MySQL 8.0中,安装完成后会生成一个初始的临时密码,存储在日志文件中。可以使用以下命令查看:
sudo grep 'temporary password' /var/log/mysqld.log
登录后,必须先修改初始密码才能进行其他操作。
4. 防火墙设置
- Ubuntu:默认使用
ufw
(Uncomplicated Firewall)作为防火墙管理工具。如果要允许外部访问MySQL服务,需要开放3306端口。
sudo ufw allow 3306
- CentOS:默认使用
firewalld
作为防火墙管理工具。同样需要开放3306端口。
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
5. 软件包更新
- Ubuntu:使用
apt
进行软件包更新。
sudo apt update
sudo apt upgrade
- CentOS:使用
yum
(CentOS 7及以下)或dnf
(CentOS 8及以上)进行软件包更新。
# CentOS 7及以下
sudo yum update
# CentOS 8及以上
sudo dnf update
6. 系统默认配置文件位置
- Ubuntu:MySQL的配置文件通常位于
/etc/mysql/mysql.conf.d/mysqld.cnf
。 - CentOS:配置文件一般在
/etc/my.cnf
或/etc/my.cnf.d/
目录下。
虽然存在上述操作上的区别,但在MySQL数据库的使用层面,如创建数据库、表,执行SQL查询等核心操作,在两种系统下是完全相同的。
7. 登录 MySQL 数据库
使用以下命令以 root 用户身份登录到 MySQL:(直接回车即可)
sudo mysql -u root -p
输入之前设置的 root 用户密码后,即可进入 MySQL 命令行界面。
服务器,数据库,表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
注意:
1. MySQL是数据库的客户端2. MySQLD是数据库服务的服务端3. MySQL本质: 基于CS模式的一种网络服务;对数据内容存储的一套解决方案(你给我字段要求,我直接给你结果)
which mysql
回显:/bin/mysql
#基于ubuntu系统下
which mysqld
回显:/sbin/mysqld
#基于ubuntu系统下
总结:
- mysql是一套给我提供数据存取服务的网络程序
- 数据库一般指的是在磁盘或者内存中存储的特定结构组织的数据,将来在磁盘上存储的一套数据库方案
- 数据库服务一般指的是mysqld
使用案例(输入命令时注意;)
- 创建数据库
create database helloworld;
- 使用数据库
use helloworld;
- 创建数据库表
create table student(id int,name varchar(32),gender varchar(2)
);
- 表中插入数据
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
- 查询表中的数据
select * from student;
- 查看数据库服务器中的所有数据库
show databases;
MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、
Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体
系结构的一致性。
SQL分类
DDL【data definition language】
数据定义语言
用来维护存储数据的结构,代表指令: create, drop, alterDML【data manipulation language】
数据操纵语言,
用来对数据进行操作代表指令: insert,delete,update,DML中又单独分了一个DQL,数据查询语言,代表指令: selectDCL【Data Control Language】
数据控制语言
主要负责权限管理和事务代表指令: grant,revoke,commit
存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
查看存储引擎
show engines;