MySQL数据库管理

MySQL数据库管理

安装数据库

上传软件包(mysql-8.0.33-el7-x86_64.tar.gz)

安装过程

tar -xf mysql-8.0.33-el7-x86_64.tar.gz
mv mysql-8.0.33-el7-x86_64 /usr/local/mysql

useradd -M -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
#编辑数据库配置(桌面安装的linux有自带的数据库mariadb,需要删除)
vim /etc/my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

#设置环境变量,申明/宣告mysql命令便于系统识别
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile

#初始化数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

#设置系统识别,进行操作
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl daemon-reload
systemctl restart mysqld

#查看数据库服务是否开启
ss -ntlp | grep mysql

#初始化数据库密码(直接回车)
mysqladmin -u root -p password "123456"
#进入数据库
mysql -u root -p123456
#创建用户并设置密码
create user 'root'@'%' identified by '123456';
#赋予远程连接的权限
grant all privileges on *.* to 'root'@'%';
#刷新生效
flush privileges;
#修改加密方式,可以进行远程连接
alter user 'root'@'%' identified with mysql_native_password by '123456';

MySQL数据库的管理

查看数据库结构
查看当前的 MySQL 版本信息及连接用户名
select user();
select version();
查看当前服务器中的数据库
show databases;

MySQL会附带4个系统数据库:

information_schema:主要存储系统中的一些数据库对象信息,如数据库名,数据库的表,表字段的数据类型与访问权限等

performance_schema:主要存储数据库服务器性能参数信息

mysql:主要存储系统的用户权限信息

sys:MySQL5.7之后引入的一个新的 sys 数据库,sys 库里面的表、视图、函数以及存储过程可以让用户快速了解MySQL的一些信息,它的数据来源于performance_schema

查看数据库中包含的表
#方法一
show tables from mysql;
#方法二
use mysql;
show tables;
查看表的结构
use mysql;
describe user;
#可缩写成desc 表名;
SQL语句

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

SQL语言分类:DDL、DML、DQL和DCL。

类型 功能
DDL 数据定义语言,用于创建数据库对象,如库、表、索引等
DML 数据操纵语言,用于对表中的数据进行管理
DQL 数据查询语言,用于从数据表中查找符合条件的数据记录
DCL 数据控制语言,用于设置或者更改数据库用户或角色权限
数据定义语言DDL

数据定义语言,用于管理数据库对象(库、表、索引等)

创建数据库和表
create database 数据库名;

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

#例
create database test_base;

use test_base;
create table test_table (ID int(4) zerofill,name char(10) not null,age int,sex char(2) default '不详',primary key(ID));

MySQL的6大约束属性

类型 名称
主键约束 primary key
唯一键约束 unique key
非空约束 not null
默认值约束 default 'XXX'
自增约束 auto_increment
外键约束 foreign key
零填充 int(N) zerofill

常用的数据类型

名称 类型
int 整型 无符号[0,2^32 -1] ,有符号[-2^31 ,2^31-1]
float 单精度浮点 4字节32位
double 双精度浮点 8字节64位
char 固定长度的字符类型
varchar 可变长度的字符类型
text 文本
image 图片
decimal(5,2) 5个有效长度数字,小数点后面有2位
列出数据库和表
#列出数据库
show databases;
#列出数据库中的表
show tables [from 库名];
#显示创建指定表的SQL语句
show create table 表名;
#展现表结构
desc 表名;

#例
show databases;

use test_base;
show tables;
#或
show tables from test_base;

show create table test_table;

desc test_table;




删除数据库和表
#删除数据库
drop database 库名;
#删除表
drop table 表名;

#例
#创建数据库和表
create database test1;
use test1;
create table test2 (id int,name char(4),age int);
#删除
drop table test2;
drop database test1;


修改表
#修改表名
alter table 旧表名 rename 新表名;
#增加表内字段
alter table 表名 add 新字段 数据类型 [约束属性];
#删除表内字段
alter table 表名 drop 字段;
#修改表内字段
alter table 表名 change 旧字段 新字段 数据类型 [约束属性];

#例
use test_base;

alter table test_table rename new_table;

alter table new_table add date int not null;

alter table new_table drop date;

alter table new_table change name 姓名 varchar(10) ;




数据定义语言DDL

数据操纵语言,用于对表中的数据进行管理

在表中插入新记录
#指定字段插入
insert into 表名 (字段1, 字段2, ....) values (字段1的值, 字段2的值, ....);
#不指定字段插入
insert into 表名 values (所有字段的值);

#例
insert into new_table (ID, 姓名,age,sex) values(1,'张三',18,'男');
insert into new_table  values(2,'李四',18,'男');
修改表中已存在的记录
#修改表中已存在的记录
update 表名 set 字段1=值1, 字段2=值2, ....  where 条件表达式;

#例
update new_table set age=18+2, sex='女' where ID=2;
删除表中记录
#删除表中记录
delete from 表名 where 条件表达式;

#例
delete from new_table where 姓名='李四';
数据查询语言DQL

数据查询语言,用于从数据表中查找符合条件的数据记录。

检索数据
#检索后显示所有字段
select * from 表名 [where 条件表达式];
#检索后显示指定字段
select 字段1,字段2 from 表名 where 条件表达式;
#查看表的前N行的记录
select 字段 from 表名 limit N;
#查看表的第N行之后的连续M行的记录(不包含第N行)
select 字段 from 表名 limit N,M;

#例
#添加几条记录
insert into new_table  values(2,'李四',25,'男'),(3,'王二',20,'女'),(4,'韩五',27,'男'),(5,'秋一',22,'女');

select * from new_table where sex='女';

select ID,姓名 from new_table where sex='女';

select * from new_table limit 2;
select 姓名,age from new_table limit 2;

select * from new_table limit 2,5;
select 姓名,age from new_table limit 2,5;




数据控制语言DCL

数据控制语言,用于设置或者更改数据库用户或角色权限。

用户管理
#创建用户
#注:来源地址可以是localhost(仅允许本地连接)、一个特定的IP地址、一个IP地址范围(使用通配符,如%表示任何地址),或者是一个主机名。
create user '用户名'@'来源地址' identified by '密码'; 
#查看用户信息
#注:authentication_string字段存储的是加密后的密码
select user,host,authentication_string  from  mysql.user;
#查看当前用户
#返回当前连接的MySQL用户的用户名和主机名
select user();
#重命名用户
rename user '用户名'@'来源地址' to '新用户名'@'新来源地址';
#删除用户
drop user '用户名'@'来源地址';
#修改用户密码
#注MySQL 5.7.6前版本可用set password
set password for '用户名'@'来源地址' = password('密码');
alter user '用户名'@'来源地址' identified by '密码'; 

#例
create user 'zhangsan'@'localhost' identified by '123zxc'; 
create user 'lisi'@'%' identified by '123zxc'; 

select user,host,authentication_string  from  mysql.user;

select user();

rename user 'zhangsan'@'localhost' to 'zhangmin'@'%';

drop user 'zhangmin'@'%';

alter user 'lisi'@'%' identified by 'def456';




授权管理
#为用户分配特定的权限
#identified by 用于创建用户,在MySQL 5.7.6或更高版本中不可用
grant 权限1,权限2,....  on  库名.表名  to '用户名'@'来源地址'  [identified by '密码'];
#重新加载授权表
flush privileges;
#显示指定用户的权限
show grants for '用户名'@'来源地址';
#撤销用户的权限
revoke 权限列表  on 库名.表名  from  '用户名'@'来源地址';

#例
#显示指定用户lisi的权限
show grants for 'lisi'@'%';

#为用户lisi分配特定的权限
#为用户lisi授予所有数据库所有表的所有权限
grant all privileges on  *.*  to 'lisi'@'%';
#重新加载授权表
flush privileges;
#查看用户lisi的权限
show grants for 'lisi'@'%';
#撤销用户lisi的所有权限
revoke all privileges, grant option from 'lisi'@'%';
#为用户lisi分配对数据库test_base里所有表的insert和update权限
grant insert,update on test_base.* to 'lisi'@'%';
#重新加载授权表
flush privileges;
#查看用户lisi的权限
show grants for 'lisi'@'%';
#撤销用户lisi的insert权限
revoke insert on test_base.* from 'lisi'@'%';

用户权限

权限 功能
SELECT 读取数据。
INSERT 插入数据。
UPDATE 更新数据。
DELETE 删除数据。
CREATE 创建数据库、表等对象。
ALTER 修改数据库、表等对象的结构。
DROP 删除数据库、表等对象。
INDEX 创建或删除索引。
USAGE 表示用户存在,但不授予任何具体权限。
GRANT OPTION 允许用户将自己的权限授予其他用户。
RELOAD 允许用户执行刷新操作,如刷新权限表、日志等。
SHOW DATABASES 允许用户查看所有数据库列表。
对于数据库中表的其他操作
克隆表
#克隆表结构
create table 新表名 like 旧表名;
#克隆表数据,可实现表结构和表数据与旧表都一样
insert into 新表名 select * from 旧表名;
#表数据和旧表是一样的,但是新表的表结构和旧表的不一定一样
create table 新表名 (select * from 旧表名);

#例
#克隆表结构
create table new_table1 like new_table;
#查看表结构
desc new_table1;
desc new_table;
#克隆表数据
insert into new_table1 select * from new_table;
#查看表数据
select * from new_table1;

#数据相同,结构不同
create table new_table2  select * from new_table;
#查看表数据
select * from new_table2;
#查看表结构
desc new_table2;
清空表
#一条一条的删除记录,清空表的效率较慢;AUTO_INCREMENT自增字段仍保留原有的记录
delete from 表名;
#直接重建表,清空表的效率较快;AUTO_INCREMENT自增字段的记录会被重置
truncate table 表名;

#例
delete from new_table1;
truncate table new_table2;
临时表
#临时表与一般的表的相同点:都可以在表中进行增删改查表数据;不同的:show tables查不到临时表;临时表只能在当前会话中有效,退出当前会话,临时表就会失效
create temporary table 表名 (....);

#例
create temporary table new_table3 (id int,age int);
#列出数据库中表
show tables;
#列出new_table3表结构
desc new_table3;
相关推荐
虚拟网络工程师11 分钟前
【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
运维·服务器·网络·数据库·mariadb
BLEACH-heiqiyihu14 分钟前
RedHat7—Linux中kickstart自动安装脚本制作
linux·运维·服务器
福如意如我心意19 分钟前
PostGres命令【常用维护,增删改查】
数据库·postgresql·psql
计算机毕设源码qq-383653104121 分钟前
(附项目源码)Java开发语言,215 springboot 大学生爱心互助代购网站,计算机毕设程序开发+文案(LW+PPT)
java·开发语言·spring boot·mysql·课程设计
袁庭新31 分钟前
Cannal实现MySQL主从同步环境搭建
java·数据库·mysql·计算机·java程序员·袁庭新
何遇mirror42 分钟前
云原生基础-云计算概览
后端·云原生·云计算
勤奋的小王同学~1 小时前
项目虚拟机配置测试环境
服务器
爱学习的白杨树1 小时前
MySQL中有哪几种锁?
数据库·mysql
007php0071 小时前
GoZero 上传文件File到阿里云 OSS 报错及优化方案
服务器·开发语言·数据库·python·阿里云·架构·golang
晴天飛 雪1 小时前
Grafana监控PostgreSQL
数据库·postgresql·grafana