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.官网

https://www.mysql.com

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 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。
  • 因此最好在删除数据库之前先将数据库进行备份。
posted on 2024-05-31 09:14  晓雾-Mist  阅读(18)  评论(0编辑  收藏  举报