MySQL数据库详解 一:安装MySQL数据库及基本管理

文章目录

  • [1. 数据库的基本概念](#1. 数据库的基本概念)
    • [1.1 数据库的组成](#1.1 数据库的组成)
      • [1.1.1 数据](#1.1.1 数据)
      • [1.1.2 表](#1.1.2 表)
      • [1.1.3 数据库](#1.1.3 数据库)
    • [1.2 当前主流数据库及其特点](#1.2 当前主流数据库及其特点)
    • [1.3 数据库类型](#1.3 数据库类型)
      • [1.3.1 关系数据库](#1.3.1 关系数据库)
        • [1.3.1.1 关系数据库的组成](#1.3.1.1 关系数据库的组成)
        • [1.3.1.2 非关系数据库](#1.3.1.2 非关系数据库)
  • [2. 安装MySQL](#2. 安装MySQL)
    • [2.1 yum安装](#2.1 yum安装)
    • [2.2 编译安装MySQL](#2.2 编译安装MySQL)
      • [2.2.1 前置准备](#2.2.1 前置准备)
      • [2.2.2 编译安装](#2.2.2 编译安装)
      • [2.2.3 修改mysql配置文件](#2.2.3 修改mysql配置文件)
      • [2.2.4 设置路径环境变量](#2.2.4 设置路径环境变量)
      • [2.2.5 初始化数据库](#2.2.5 初始化数据库)
      • [2.2.6 添加mysql系统服务](#2.2.6 添加mysql系统服务)
      • [2.2.7 修改MySql登录密码](#2.2.7 修改MySql登录密码)
  • [3. MySQL数据库的基本操作](#3. MySQL数据库的基本操作)
    • [3.1 SQL主要类别](#3.1 SQL主要类别)
    • [3.2 语言规范](#3.2 语言规范)
    • [3.3 SQL语句分类](#3.3 SQL语句分类)
  • [4. Mysql数据库的管理](#4. Mysql数据库的管理)
    • [4.1 查看数据库](#4.1 查看数据库)
      • [4.1.1 查看当前服务器中已有的数据库](#4.1.1 查看当前服务器中已有的数据库)
      • [4.1.2 查看数据库中包含的表](#4.1.2 查看数据库中包含的表)
      • [4.1.3 查看表的结构(字段)](#4.1.3 查看表的结构(字段))
      • [4.1.4 查看当前mysql版本](#4.1.4 查看当前mysql版本)
  • [5. 数据类型](#5. 数据类型)
    • [5.1 常用数据类型](#5.1 常用数据类型)
    • [5.2 字符串类型](#5.2 字符串类型)
    • [5.3 整数类型](#5.3 整数类型)
  • [6. 数据库和表的添加和删除](#6. 数据库和表的添加和删除)
    • [6.1 创建数据库](#6.1 创建数据库)
    • [6.2 删除指定数据库](#6.2 删除指定数据库)
    • [6.3 创建表](#6.3 创建表)
    • [6.4 删除指定的数据表](#6.4 删除指定的数据表)
  • [7. 表中数据的添加和修改](#7. 表中数据的添加和修改)
    • [7.1 向指定表里添加数据](#7.1 向指定表里添加数据)
    • [7.2 查询数据表内数据记录](#7.2 查询数据表内数据记录)
    • [7.3 修改、更新数据表中的数据记录](#7.3 修改、更新数据表中的数据记录)
    • [7.4 删除表内容](#7.4 删除表内容)
  • [8. 修改表名和表结构](#8. 修改表名和表结构)
    • [8.1 修改表名](#8.1 修改表名)
    • [8.2 扩展表结构,添加字段](#8.2 扩展表结构,添加字段)
    • [8.3 修改字段(列)名,添加唯一键](#8.3 修改字段(列)名,添加唯一键)
    • [8.4 删除字段](#8.4 删除字段)

1. 数据库的基本概念

1.1 数据库的组成

1.1.1 数据

  • 描述事物的符号记录
  • 包括数字、文字、图形、图像、声音、档案记录等
  • 以"记录"形式按统一的格式进行存储

1.1.2 表

  • 将不同的记录组织在一起
  • 依赖存储具体数据

1.1.3 数据库

  • 表的集合,是存储数据的仓库
  • 以一定的组织方式存储的相互有关的数据集合
  • 是按照数据结构来组织、存储和管理数据的仓库

1.2 当前主流数据库及其特点

  • SQL Server (微软公司产品)

    面向Windows操作系统

    简单、易用

  • Oracle (甲骨文公司产品)

    面向所有主流平台

    安全、完善、操作复杂

  • DB2 (IBM公司产品)

    面向所有主流平台

    大型、安全、完善

  • MySQL (甲骨文公司收购)

    免费、开源、体积小

1.3 数据库类型

1.3.1 关系数据库

关系数据库系统是基于关系模型的数据库系统

1.3.1.1 关系数据库的组成

  • 关系型数据库:SQL
  • 操作语言:SQL语句
  • 存储的数据结构:二维表格
  • 存储的数据:结构化数据
  • 行字段:用来描述对象的一个属性
  • 列字段:用来描述一个对象的信息

库 -> 表 -> 二维表格形式的结构化数据

1.3.1.2 非关系数据库

  • 非关系型数据库:NoSQL
  • 存储数据不以关系模型为依据,不需要固定的表格式
  • 存储结构:键值对 文档、索引、时间序列

缓存型 Redis Memcached

文档型 MongoDB

索引型 ElasticSearch

时序型 Prometheus InfluxDB

2. 安装MySQL

2.1 yum安装

bash 复制代码
#创建mysql源
cd /etc/yum.repos.d/
vim mysql.repo
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
 
#安装服务mysql-community-server
yum install mysql-community-server -y 
 
#启动服务
systemctl start mysqld
ss -ntap |grep 3306
 
#登入数据库,但是密码是默认的,需要查看
mysql -u root -p

grep password /var/log/mysqld.log
mysql -u root -p'默认的密码'
#特殊符号用单引号引起来
 
#登入数据库后必须修改密码
alter user root@'localhost' identified by 'Zhuo@123';
#alter user root@'主机名' identified by '新密码';
 
#可以使用mysql> \h查看帮助

2.2 编译安装MySQL

2.2.1 前置准备

bash 复制代码
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux服务

yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
#安装Mysql环境依赖包
bash 复制代码
useradd -M -s /sbin/nologin  mysql
#创建运行用户

2.2.2 编译安装

bash 复制代码
cd /opt

tar zxvf nginx-1.22.0.tar.gz -C /opt/
#解压缩源码包
bash 复制代码
cd /opt/mysql-5.7.20/

#搭建编译环境
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
bash 复制代码
make -j2 && make install
#编译并安装

2.2.3 修改mysql配置文件

bash 复制代码
vim /etc/my.cnf

#客户端设置
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

#服务端配置
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

#服务全局配置
[mysqld]
user = mysql                                 #设置管理用户
basedir = /usr/local/mysql                   #指定数据库的安装目录
datadir = /usr/local/mysql/data              #指定数据库文件的存储路径
port = 3306                                  #指定端口
character_set_server=utf8                    #设置服务器字符集编码格式为utf8
pid-file = /usr/local/mysql/mysqld.pid       #指定pid 进程文件路径
socket = /usr/local/mysql/mysql.sock         #指定数据库连接文件
server-id = 1                                #指定服务ID号

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
bash 复制代码
#更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

2.2.4 设置路径环境变量

bash 复制代码
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile

echo 'export PATH' >> /etc/profile

source /etc/profile  #刷新使其生效

2.2.5 初始化数据库

bash 复制代码
cd /usr/local/mysql/bin/

./mysqld \                        
--initialize-insecure \              #生成初始化密码为空
--user=mysql \                       #指定管理用户
--basedir=/usr/local/mysql \         #指定数据库的安装目录
--datadir=/usr/local/mysql/data      #指定数据库文件的存储路径

#直接拷贝版
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

2.2.6 添加mysql系统服务

bash 复制代码
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#使其能使用systemd服务
bash 复制代码
systemctl daemon-reload          刷新识别    
systemctl start mysqld.service   开启服务
systemctl enable mysqld          开机自启动
ss -anpt | grep 3306 |tr -s ' '       查看端口

2.2.7 修改MySql登录密码

bash 复制代码
mysqladmin -u root -p password "abc123" 
#刚开始没密码是空的直接回车
bash 复制代码
mysql -u root -p     
#这个命令敲下,提示要输入密码,这个就是刚才设置的密码abc123

3. MySQL数据库的基本操作

3.1 SQL主要类别

数据库:database

表:table,行:row 列:column

索引:index

视图:view

存储过程:procedure

存储函数:function

触发器:trigger

事件调度器:event scheduler,任务计划

用户:user

权限:privilege

3.2 语言规范

在数据库系统中,SQL 语句不区分大小写,建议用大写

SQL语句可单行或多行书写,默认以 " ; " 结尾

关键词不能跨多行或简写

用空格和TAB 缩进来提高语句的可读性

子句通常位于独立行,便于编辑,提高可读性

数据库对象和命名

3.3 SQL语句分类

SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。

语句 含义
DDL 数据定义语言,用于创建数据库对象,如库、表、索引等
DML 数据操纵语言,用于对表中的数据进行管理
DQL 数据查询语言,用于从数据表中查找符合条件的数据记录
DCL 数据控制语言,用于设置或者更改数据库用户或角色权限
bash 复制代码
#help后面跟上具体命令可以查看帮助
例如:mysql> help create
bash 复制代码
#查看支持字符集
show charset;
默认拉丁文字,需要修改为
 
utf8     | UTF-8 Unicode   
#阉割版的
 
utf8mb4  | UTF-8 Unicode 
#真实的版本
 
#修改字符集
vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4

4. Mysql数据库的管理

4.1 查看数据库

4.1.1 查看当前服务器中已有的数据库

sql 复制代码
show databases;					#大小写不区分,分号";"表示结束

4.1.2 查看数据库中包含的表

sql 复制代码
#方式一:在库中查看表
use scj;             #use 数据库名
#前往scj数据库
show tables;           #查看表
 
#方式二 :在库外查看表  
show tables from scj;    #show tables from 数据库名
#查看scj数据库下所有已创建表

4.1.3 查看表的结构(字段)

sql 复制代码
#表内查看
use 数据库名;

describe [数据库名.]表名;
可缩写成:desc 表名;

#表外查看
desc 数据库名.表名;

4.1.4 查看当前mysql版本

bash 复制代码
mysql -V

5. 数据类型

5.1 常用数据类型

类型 说明
int 整型,用于定义整数类型的数据
fload 单精度浮点4字节32位,准确表示到小数点后六位
double 双精度浮点8字节64位
char 固定长度的字符类型,用于定义字符类型数据。
varchar 可变长度的字符类型
text 文本
image 图片
decimal(5,2) 5个有效长度数字,小数点后面有2位。指定长度数组

char和varchar的区别

char的长度是不可变。char如果存入数据的实际长度比指定长度要小 会补空格至指定长度 如果存入的数据的实际长度大于指定长度,低版本会被截取高版本会报错。

varchar长度是可变的,默认会加一个隐藏的结束符,因此结束符会多算一个字节。

html 复制代码
https://dev.mysql.com/doc/refman/8.0/en/data-types.html
#官方文档

选择正确的数据类型的三大原则:

  • 更小的通常更好,尽量使用可正确存储数据的最小数据类型

  • 简单就好,简单数据类型的操作通常需要更少的CPU周期

  • 尽量避免NULL,包含为NULL的列,对MySQL更难优化

5.2 字符串类型

char(n) 固定长度,最多255个字符,注意不是字节

varchar(n) 可变长度,最多65535个字符

tinytext 可变长度,最多255个字符

text 可变长度,最多65535个字符

mediumtext 可变长度,最多2的24次方-1个字符

longtext 可变长度,最多2的32次方-1个字符

BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节

VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节

内建类型:ENUM枚举, SET集合

5.3 整数类型

tinyint(m) 1个字节 范围(-128~127)

smallint(m) 2个字节 范围(-32768~32767)

mediumint(m) 3个字节 范围(-8388608~8388607)

int(m) 4个字节 范围(-2147483648~2147483647)

bigint(m) 8个字节 范围(±9.22*10的18次方)

上述数据类型,如果加修饰符unsigned后,则最大值翻倍

例如:tinyint unsigned的取值范围为(0~255)

6. 数据库和表的添加和删除

6.1 创建数据库

sql 复制代码
#建立数据库 
create database 数据库名;

6.2 删除指定数据库

sql 复制代码
drop database 数据库名;

6.3 创建表

sql 复制代码
use 数据库名;
create table 表名 (字段1 数据类型,字段2 数据类型[,...][,primary key (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。

例如:
use scj;
create table students (id int, name char(4), age int, sex char(2), hobby varchar(20), primary key(id));
#创建students表并指定id为主键

6.4 删除指定的数据表

sql 复制代码
#方式一:库内删除
use 数据库名;
drop table 数据表名;
 
#方式二:库外删除
drop table 数据库名.数据表名;		

7. 表中数据的添加和修改

7.1 向指定表里添加数据

sql 复制代码
insert into 表名(字段1,字段2[,...]) values(字段1的值,字段2的值,...);
或
insert into 表名 values (字段1的值, 字段2的值, ...);    #要按照表结构的字段顺序设置值

#示例
insert into students values (2, '张三', 20, '男', 'game')
select * from students;   #查看表内容

7.2 查询数据表内数据记录

sql 复制代码
select 字段名1,字段名2[,...] from 表名 [where 条件表达式];
 
#查询全部数据
select * from 数据表名;
#示例
select * from students;
 
#查询指定数据
#示例
select id,name from students where id=2;
#查看id为2行的id和name列
sql 复制代码
#以列表方式竖向显示
select * from 数据表名\G;			
#示例
select * from students\G;
 
#只显示头2行
select * from 数据表名 limit 2;
#示例	
select * from students limit 2;
 
#显示第3行后的2行
select * from 数据表名 limit 3,2;
#示例
select * from students limit 3,2;

7.3 修改、更新数据表中的数据记录

sql 复制代码
update 表名 set 字段名1=字段值1[,字段名2=字段值2] [where 条件表达式];
 
#示例
update students set age=19 where id=3;
#修改id为3行的age为19

7.4 删除表内容

sql 复制代码
delete from 表名 [where 条件表达式];
 
#示例
delete from students where id=3;
#删除studtens表里id为3的内容

8. 修改表名和表结构

8.1 修改表名

sql 复制代码
alter table 旧表名 rename 新表名;
 
#示例
alter table students rename st;
#将表students改名为st

8.2 扩展表结构,添加字段

sql 复制代码
alter table 表名 add 字段;

alter table st add address varchar(50) default '不详';
#为st表添加默认值为不详,字段名为address的属性

8.3 修改字段(列)名,添加唯一键

sql 复制代码
alter table 表名 change 旧列名 新列名 数据类型 [unique key];

#示例
alter table st change name username varchar(10) unique key;
#修改st表name字段名为username并指定其为唯一键
sql 复制代码
#验证
insert into st (id, username, age) values (6, '张三', 22);

insert into st (id, username, age) values (6, '老王', 22);
#唯一键不可重复

8.4 删除字段

sql 复制代码
alter table 表名 drop 字段名;
 
例如:
#删除st表中sex字段
alter table st drop sex;
sql 复制代码
#拓展
use scj;

create table if not exists info (
id int(4) zerofill primary key auto_increment,				
name varchar(10) not null default '匿名',
cardid int(18) not null unique key,
hobby varchar(50));
----------------------------------------------------------------------------------------------------------
#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL
----------------------------------------------------------------------------------------------------------
相关推荐
m0_748248026 小时前
Redis 简介与安装指南
数据库·redis·缓存
Elastic 中国社区官方博客11 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪12 小时前
两次连接池泄露的BUG
java·数据库
南宫乘风13 小时前
基于 Flask + APScheduler + MySQL 的自动报表系统设计
python·mysql·flask
TDengine (老段)14 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq74223498414 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE15 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy123931021615 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎15 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP15 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql