31.MySQL数据库【一】基础介绍
【一】数据库初识
1)存储数据的演变过程
-
基于内存保存
-
文件操作
-
json模块
-
搭建TCP的客户端和服务端,TCP服务端用作存储服务,TCP客户端用于上传和下载数据
存储数据的位置就是数据库
2)数据库本质
- 就是一块基于网络通信保存数据的应用程序
3)数据库的介绍
1.关联性数据库(存储数据)
-
MySQL,Oracle,db2,access,sql server
-
这些数据库都采用关系模型来组织数据,并且支持SQL查询语言。
-
特点:
-
彼此之间有关联
-
存储数据的表型形式通常以表格形式存储
-
每个字段限制每个字段下的存储数据的格式例如字符串、数字、日期等。
-
同时,关系型数据库还支持各种数据操作,例如插入、删除、更新和查询等。
-
2.非关系型数据库(缓存数据)
-
Redis,MongoDB,Memcached
-
这些数据库不采用关系模型来组织数据,而是采用了其他的模型,例如键值对模型、文档模型、图形模型等。
-
特点:
-
存储数据通常是K:V形式存储数据
-
非关系型数据库通常用于存储临时性的、高速访问的数据,这些数据通常以键值对的形式存储,其中“键”表示数据的唯一标识,“值”表示实际的数据内容。
-
由于非关系型数据库通常不提供事务支持和复杂的查询功能,因此不适合存储长期保存的历史数据。
-
【二】SQL语句介绍
1)SQL语句的由来
- 为了使MySQL不仅能支持MySQL自己的客户端应用程序,还能支持其他编程语言,
- MySQL采用了SQL作为统一的语言进行数据操作
- 可让所有服务端兼容所有语言,所有客户端应用程序都可执行相同的SQL语句来进行数据操作
2)重要的概念
1.库(Database)
- 指在数据库管理系统中用于存储和组织数据的容器
- 可将其视为一个文件,用于存放相关的数据表
- 数据库中可含多个库,每个库中可含多个表
2.表(Table)
- 是数据库中的一个基本组成单位,用于存储和展示数据
- 由行和列组成,每一行表示一个记录,每一列2表示一个字段
- 可通过唯一的行列定位数据
3.记录(Record)
- 即行,是表中的一个数据项或实体
- 每一行都表示了一个完整的数据记录,包含各个字段的具体数值或信息
4.表头(Header)
- 表中的第一行,用于描述每列字段的含义或名称
- 通常包含列的标签或标题,方便数据的理解和查询
5.表单(Form)
- 一种用来收集和展示数据的界面新式,常用于数据的输入与输出
- 通常包含各种输入字段和相关的操作按钮,用户可以通过表单进行数据的录入、编辑、提交等操作
- 其数据可以被存储到相关的表中,用于后续的数据处理和分析
6.小结
库:文件夹
表:文件
记录:一行行的数据
表头:表格的第一段
表单:表头对应的每一条数据
【三】MySQL数据库安装
1)各种服务器端口
启动端口可更改
- MySQL :3306
- Redis : 6379
- MongoDB : 27017
- Django : 8000
- flask : 5000
2)MySQL数据库介绍
- MySQL是一个开源免费的关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。
- MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一,
- 具有成本低、速度快、体积小且开放源代码等优点。
3)MySQL安装
1.官网
2.安装
- 选择MySQL Community Server
- 选择版本
- 下载,解压
3.配置环境变量
-
设置
-
搜索:编辑系统环境变量
-
打开 环境变量(N)
-
将MySQL的bin路径添加进去
4.初始化准备工作
-
创建data目录
- 在MySQL安装目录下,用于存放MySQL数据库及数据
-
创建my.ini
- basedir和datadir的路径要根据自己的路径如实填写
[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir="*****" # 设置mysql数据库的数据的存放目录,就是前面手动创建的data目录 datadir="*****" # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为utf8mb4 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证, mysql_native_password default_authentication_plugin=mysql_native_password [mysql] # 设置mysql网络通信的默认字符集 default-character-set=utf8mb4 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 # 设置mysql客户端的默认字符集 default-character-set=utf8mb4
5.初始化MySQL数据库
-
以管理人身份打开cmd
-
执行初始化
mysqld --initialize --console
6.注册系统服务
-
未注册之前(计算机管理—服务和应用程序—服务)没有MySQL服务
-
执行注册命令
mysqld --install
C:\Windows\System32>mysqld --install Service successfully installed.
-
移除MySQL命令
mysqld --remove
C:\Windows\System32>mysqld --remove Service successfully removed.
7.启动MySQL服务
方式一:
- 直接在 计算器管理—>服务 内右键MySQL启动和停止
方式二:
-
启动MySQL服务指令
net start mysql80
C:\Windows\System32>net start mysql80 MySQL80 服务正在启动 . MySQL80 服务已经启动成功。
-
停止启动MySQL服务指令
net stop mysql80
C:\Windows\System32>net stop mysql80 MySQL80 服务正在停止. MySQL80 服务已成功停止。
4)MySQL数据库配置
1.登录和退出
在安装成功以后默认就存在了一个上帝一般的用户,叫root
-
密码直接登录
mysql -uroot -p123456
C:\Windows\System32>mysql -uroot -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.37 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.
-
链接远程服务登入(以指定端口IP登录)
mysql -h 192.168.1.63 -P 3306 -uroot -p123456
-
退出
exit
mysql> exit Bye
2.修改用户名密码
前提是能正常进入到客户端内部
-
修改密码
alter user 'root'@'localhost' identified by '123456';
mysql> alter user 'root'@'localhost' identified by '123456'; Query OK, 0 rows affected (0.00 sec)
-
刷新权限
flush privileges;
mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
3.修改密码(忘记密码)
-
先关闭MySQL服务
net stop mysql
-
执行调表命令
mysqld --skip-grant-tables
-
以无密码登入的启动模式启动MySQL服务端
-
执行MySQL登入命令
mysql -uroot -p
输入密码的时候什么都不要输 直接enter
-
刷新权限
flush privileges;
-
执行修改密码
alter user 'root'@'localhost' identified by '1234567';
-
刷新权限
flush privileges;
4.跳过输入密码直接登录
-
在配置文件添加
[mysql] # 不需要每次输入验证码即可登陆 user="root" password=你的密码 default-character-set=utf8mb4
【四】SQL语句基础
1)引入
- 操作MySQL需要使用SQL(结构化查询语言)
2)SQL规范
-
在数据库管理系统中,SQL语句关键字不区分大小写,但参数区分大小写
- 建议:
- 命名大写
- 数据库名、数据表名、字段名小写
- 若数据库名、数据表名、字段名、关键字名有相同,使用反引号圈起,避免冲突
- 建议:
-
SQL语句可单行或多行书写,默认英文引号(;)结尾,关键词不能跨多行或简写
-
字符串与日期类型的值都要以引号圈起,单词之间需要使用半角的空格隔开
-
用空格和缩进提高SQL语句的可读性
3)注解语法
1.单行注解
-- 单行注解
# 单行注解
2.多行注解
/*
多行注解
*/
4)SQL类型
1.数据定义语言(Data Definition Language,DDL)
用于创建或删除数据库以及数据表的语言
- CREATE:创建数据库和表对象
- DROP:删除数据库和表对象
- ALTER:修改数据库和表对象的结果
2.数据操纵语言(Data Manipulation Language,DML)
用于对数据表中的数据进行增删改查
- SELECT:查询表中数据
- INSERT:向表中插入新数据
- UPDATE:改变表中数据
- DELETE:删除表中数据
3.数据控制语言(Data Control Language,DCL)
用于对控制数据库的操作权限,包括用户权限和数据操作权限
- COMMIT:确认对数据库中的数据进行变更
- ROLLBACK:取消对数据库中的数据的变更
- GRANT:赋值用户操作权限
- REMOVE:取消用户操作权限
5)常用命令
命令 | 描述 |
---|---|
help | 查看系统帮助想你想 |
status | 查看数据库管理系统的状态信息 |
exit | 退出数据库终端连接 |
quit | 退出数据库终端连接 |
\c | 当打错命令了,想换行重新写时可以在错误命令后面跟着\c回车 |
【五】SQL语句操作MySQL数据库
1)数据库相关
1.创建数据库
# 简介版
create database 数据库名字;
# 完整版
create database [if not exists]数据库名字 [charset set 字符编码集];
create database eg;
mysql> create database eg;
Query OK, 1 row affected (0.01 sec)
2.查看数据库
# 查看所有数据库
show databases;
# 查看指定数据库
show create database 数据库名;
# 查看包含---的数据库
show databases like '%---%';
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| eg |
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.01 sec)
3.修改数据库
-
查看数据库编码格式
show variables like "character_set_database";
mysql> show variables like "character_set_database"; +------------------------+---------+ | Variable_name | Value | +------------------------+---------+ | character_set_database | utf8mb4 | +------------------------+---------+ 1 row in set, 1 warning (0.01 sec)
-
修改数据库编码集
alter database 数据库名字 [charset set 编码集];
alter database eg charset='utf8'; mysql> alter database eg charset='utf8'; Query OK, 1 row affected, 1 warning (0.00 sec)
4.删除
drop database 数据库名字;
drop database eg;
mysql> drop database eg;
Query OK, 0 rows affected (0.01 sec)
2)数据相关
1.创建之前需要切换数据库
进入到某个数据库后无法退回之前状态,但可以通过use进行切换
use 数据库名字;
use eg;
mysql> use eg;
Database changed
2.查看当前所在库名
select database();
mysql> select database();
+------------+
| database() |
+------------+
| eg |
+------------+
1 row in set (0.00 sec)
3.创建表
- 数据表相当于文件,要有表名
- 创建表时要给每一个字段设置数据类型以及字段约束(完整性约束条件)
create table [if not exists] 表名 (
字段名1 数据类型[ ( 存储空间 ) 字段约束 ],
字段名2 数据类型[ ( 存储空间 ) 字段约束 ],
字段名3 数据类型[ ( 存储空间 ) 字段约束 ],
.....
字段名n 数据类型[ ( 存储空间 ) 字段约束 ],
primary key(一个 或 多个 字段名)-- 注意,最后一段定义语句,不能有英文逗号的出现,否则报错。
) [engine = 存储引擎 character set 字符集];
- 小括号中的定义字段语句后面必须以英文逗号结尾,而最后一个字段的定义语句不能有英文逗号出现,否则报错。
- 在同一张数据表中,字段名是不能相同,否则报错!
- 创建数据表的SQL语句中,存储空间和字段约束是选填的,而字段名和数据类型则是必须填写的。
-- mysql中创建数据表要以 create table `表名`
-- 表的字段信息必须写在 ( ) 小括号里面
create table classes (
-- 建议一行一个字段,id 就是字段名
-- int 表示设置字段值要以整数的格式保存到硬盘中,
-- auto_increment表示当前字段值在每次新增数据时自动+1作为值保存
-- primary key,mysql中叫主键,表示用于区分一个数据表中不同行的数据的唯一性,同时还具备加快查询速度的作用
-- 注意:auto_increment与primary key 一般是配合使用的,对应的字段名一般也叫id,而且在一个数据表中只有一个字段能使用auto_increment primary key进行设置。
id int auto_increment primary key,
-- 字段名:name
-- varchar(10) 表示当前name这一列可以存储的数据是字符串格式,并且最多只能存10个字符
name varchar(10),
-- 字段名:address
-- varchar(100) 表示adderss这一列可以存储的数据是字符串格式,并且最多只能存100个字符
address varchar(100),
-- 字段名:total
-- int 表示当前total这一列的数据只能是整数,而且一个数据表中,整数的最大范围只能是42亿
total int
);
相当于下表格式
id | name | address | total |
---|---|---|---|
4.查看表
-
查看所有表
show tables;
mysql> show tables; +--------------+ | Tables_in_eg | +--------------+ | classes | +--------------+ 1 row in set (0.00 sec)
-
查看当前表的详细信息
describe 表名; desc 表名;
mysql> desc classes; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | name | varchar(10) | YES | | NULL | | | address | varchar(100) | YES | | NULL | | | total | int | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
-
查看建表语句
show create table 表名 \G;
mysql> show create table classes \G; *************************** 1. row *************************** Table: classes Create Table: CREATE TABLE `classes` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `total` int DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) ERROR: No query specified
5.修改表
-
修改表的字段类型
alter table 表名 modify 字段名 字段类型(长度);
mysql> alter table classes modify name varchar(32); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> desc classes; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | name | varchar(32) | YES | | NULL | | | address | varchar(100) | YES | | NULL | | | total | int | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
-
修改字段类型或者名字
alter table 表名 change 字段名 字段类型(宽度);
-
修改表名
alter table 原来的表名 rename 新表名;
mysql> alter table classes rename class_data; Query OK, 0 rows affected (0.01 sec)
mysql> show tables; +--------------+ | Tables_in_eg | +--------------+ | class_data | +--------------+ 1 row in set (0.00 sec)
-
追加字段
alter table 表名 add 字段名 字段类型;
mysql> alter table class_data add age int; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | name | varchar(32) | YES | | NULL | | | address | varchar(100) | YES | | NULL | | | total | int | YES | | NULL | | | age | int | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
-
可以指定字段添加的位置
alter table 表名 add 字段名 字段类型(长度) after 字段名;
mysql> alter table class_data add gender varchar(32) after name; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | name | varchar(32) | YES | | NULL | | | gender | varchar(32) | YES | | NULL | | | address | varchar(100) | YES | | NULL | | | total | int | YES | | NULL | | | age | int | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec)
-
将字段插入到头部
alter table 表名 add 字段名 字段类型(长度) first;
mysql> alter table class_data add sex int first; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | sex | int | YES | | NULL | | | id | int | NO | PRI | NULL | auto_increment | | name | varchar(32) | YES | | NULL | | | gender | varchar(32) | YES | | NULL | | | address | varchar(100) | YES | | NULL | | | total | int | YES | | NULL | | | age | int | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)
6.删除字段
alter table 表名 drop 字段名;
mysql> alter table class_data drop sex;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc class_data;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(32) | YES | | NULL | |
| gender | varchar(32) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| total | int | YES | | NULL | |
| age | int | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
7.删除表
drop table 表名;
mysql> drop table class_data;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
Empty set (0.00 sec)
3)数据相关
0.先创建表
create table user(
name varchar(32),
age int
);
mysql> create table user(
-> name varchar(32),
-> age int
-> );
Query OK, 0 rows affected (0.16 sec)
mysql> show tables;
+-----------------+
| Tables_in_day01 |
+-----------------+
| user |
+-----------------+
1 row in set (0.00 sec)
1.插入数据
insert into 表名 (字段名,字段名) values(值,值);
INSERT [INTO] <表名> [ <列名1> [ , … <列名n>] ] VALUES (值1) [… , (值n) ];
insert into user (name,age) values('dream',18);
insert into user (name,age) values('dream',18),('opp',28);
mysql> insert into user (name,age) values('dream',18),('opp',28);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings:
2.查看数据
select * from 表名;
select * from 表名 where 字段名=字段值;
mysql> select * from user;
+-------+------+
| name | age |
+-------+------+
| dream | 18 |
| opp | 28 |
| dream | 18 |
+-------+------+
3 rows in set (0.00 sec)
3.更改数据
update 表名 set 字段名=字段值 where name="";
mysql> update user set age=999 where name="opp";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from user;
+-------+------+
| name | age |
+-------+------+
| dream | 18 |
| opp | 999 |
| dream | 18 |
+-------+------+
3 rows in set (0.00 sec)
4.删除数据
# 删除表
delete from 表名 where 字段名=字段值;
# 清空当前表中所有数据
delete from 表名;
mysql> delete from user where name="dream";
Query OK, 2 rows affected (0.00 sec)
mysql> select * from user;
+------+------+
| name | age |
+------+------+
| opp | 999 |
+------+------+
1 row in set (0.00 sec)
【特别提示】
- 使用 DROP DATABASE/TABLE 命令时要非常谨慎,
- 在执行该命令后,MySQL 不会给出任何提示确认信息。
- DROP DATABASE 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。
- 因此最好在删除数据库之前先将数据库进行备份。