MySQL 运维 – 从零开始学习
- 一、数据库类型
- 二、数据库管理系统 DBMS
- 三、安装MySQL
- 四、MySQL数据库基础操作命令
-
- ► 常用的数据类型
- ► 常用的基础指令
-
- 登录mysql数据库
- 选中[使用]数据库
- 查看数据库
- 查看数据表
- 查看库的字符集
- 查看数据表的数据类型
- 创建数据库
- 创建UT8编码的数据库
- 创建数据表
- 向数据表插入数据
- 查看数据表内容
- 数据表内容纵向列出
- 显示数据表内容的第二行
- 显示数据表内容从第二行开始的一行
- 查询多表内容
- IN显示指定范围内的重复内容
- 修改表名
- 扩展表结构(增加字段)
- 修改字段
- 删除数据库
- 删除数据表
- 删除数据表字段
- 删除数据表主键
- 删除数据表所有记录
- 删除数据表指定内容
- 清空数据表数据
- 全局修改数据表内数据
- 修改表内指定内容的数据
- 修改表内指定数据类型
- 将字段至于首位
- 将字段名临时修改并显示
- 判断查询
- 多重判断查询
- 排序查询内容
- 反向排序查询内容
- 表内容加盐
- 克隆表
- 复制备份
- 创建临时表
- 创建用户
- 生成密文
- 使用密文创建用户
- 重命名指定
- 删除用户
- 修改当前登录用户的密码
- 修改其他用户密码
- 忘记root密码的解决办法
- 修改密码
- 数据库用户提权
- 查看权限
- 删除权限
- 查询数据去重
- ► MySQL中6常见的约束
MySQL是一款免费开源的关系型数据库管理系统,关系型数据库将数据保存在不同的表中,有效的提高了灵活性
一、数据库类型
► 常见的数据库类型
关系型数据库:用于存储字符、字符串、数值以及布尔值等
MySQL
SQL_Server
access
Oracle
DB2
sybase
非关系型数据库:用于存储图片、视频、语言等
MongoDB
Redis
(内存/缓存数据库) Memcache
Redis和Memcache对比
相同点:存储高热数据(在内存中高速运行)
不同点:Redis
可以做持久化保存,可以存储对象
二、数据库管理系统 DBMS
项目架构,不是只有服务,还有一些通用的管理系统
比如BOSS
CRM
OA
►数据库系统
它的处理比直接作用在数据库中操作要简单一些
目前主流的运行方式是关系型数据库+非关系型数据库集成为一个完整的架构
SQL
+NoSQL
保存数据并用分压
►关系型数据库
E-R
关系模型三要素
实体
可以是事物本身
关系
实体集之间对应的关系
属性
一个实体可以有多个属性,描述实体的特征
主键
唯一且非空
唯一键
可以为空(空值只能出现一次)
主键包含唯一键的部分属性
►非关系型数据库 Not Only SQL
存储海量数据,给与大数据进行分析,筛选出有价值的部分
redis
数据保存在内存中,也会定期将数据写入磁盘
Not Only SQL 不限于SQL
不需要遵循关系数据库模型
也不使用SQL作为查询语言
三、安装MySQL
► Linux的RPM包功能
MySQL
只用于连接MySQL
服务器MySQL-client
顾名思义(客户端),用于控制MySQL
服务器MySQL-devel
用于编译客户端MySQL-shared
动态装载的共享库(libmysqlclient.so*)
MySQL-bench
性能测试工具
四、MySQL数据库基础操作命令
► 常用的数据类型
变量 | 介绍 |
---|---|
int | 整型 |
float | 单精度浮点 4字节32位 |
double | 双精度浮点 8字节64位 |
char | 固定长度的字符类型 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal (3,2) | 3个有效长度数字,小数点后面有2位 |
► 常用的基础指令
登录mysql数据库
mysql -u 用户名 -p
选中[使用]数据库
use 数据库名;
查看数据库
show databases;
查看数据表
show tables;
查看库的字符集
show character set;
查看数据表的数据类型
desc 数据表名;
创建数据库
create database 数据库名;
创建UT8编码的数据库
create datebase 表名 default characret set utf8 collate utf8_general_ci
创建数据表
create table 数据表名 (字段名 字段值(number));
举例:
create table info (uid int(50),name varchar(100),sex varchar(2),status varchar(100));
向数据表插入数据
insert into 数据表名 (字段名1,字段名2...) values (字段值1,字段值2...)
举例:
insert into info (uid,name,sex,status) values (1,'Frisk','未知','雪镇');
查看数据表内容
select * from 表名
数据表内容纵向列出
select * from 表名\g
显示数据表内容的第二行
select * from 表名 limit 2;
显示数据表内容从第二行开始的一行
select * from 表名 limit 2,1;
查询多表内容
select * from 表名1,表名2
IN显示指定范围内的重复内容
select * from 表名 where 字段名 in (值);
举例:
select * from info where kill in (100);
修改表名
alter table 旧表名 rename 新表名
扩展表结构(增加字段)
alter table 表名 add 字段名 varchar(100) not null default '未填写';
修改字段
alter table 表名 change 旧列名 新列名 字段();
删除数据库
drop database 数据库名;
删除数据表
drop table 数据表名;
删除数据表字段
alter table 表名 drop 字段;
删除数据表主键
alter table 表名 drop primary key;
删除数据表所有记录
一条一条删除速度较慢
delete from 表名;
删除数据表指定内容
delete from 表名 where 字段名=字段值;
清空数据表数据
整体删除速度较快
truncate 表名;
全局修改数据表内数据
update 表名 set 字段名=字段值
举例:
update info set sex='男'
修改表内指定内容的数据
update 表名 set 字段名=字段值 where 字段名=字段值;
举例:
update info set sex='女' where name='Frisk';
修改表内指定数据类型
alter table 表名 modify 字段名 数据类型();
举例:
alter table info modify uid int(10) not null default 'tan90°';
将字段至于首位
alter table 表名 modify 字段名 数据类型() frist;
将字段名临时修改并显示
select 字段名 as 新字段名 from 表名;
举例:
select name as 名字 from info;
判断查询
select * from 表名 where 字段名>字段值;
举例:
select * from info where uid>0;
多重判断查询
关键词AND | OR
select * from 表名 where 字段名>字段值 and (字段名<字段值);
排序查询内容
select * from 表名 order by 字段名 asc;
反向排序查询内容
select * from 表名 order by 字段名 desc;
表内容加盐
update 表名 set 字段名=加密方式('');
常用加密方式
- password
- md5
insert into user (password) values (md5('123456'));
- encode
- decode
encode
和decode
有些特殊
update user set pwd=decode('123456','123456');
克隆表
create table 表名 (select * from 克隆的表名)
create table 表名 like 克隆的表名
复制备份
insert into 表名 select * from 表名
创建临时表
临时表在退出后会销毁,show tables
无法查看,一般用于测试
create temporary table 表名(字段1 数据类型...);
创建用户
create user '用户名'@'来源地址' IDENTIFIED BY '密码';
生成密文
select password('值');
使用密文创建用户
select password('123456');
create user 'Toby'@'localhost' IDENTIFIED BY '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
重命名指定
rename user '用户名'@'来源地址' to '新用户名'@'新来源地址';
来源地址
可指IP、网段192.168.1.%
、域名
删除用户
drop user '用户名'@'来源地址';
修改当前登录用户的密码
set password = password('值');
修改其他用户密码
set password for '用户名'@'来源地址' = password('值');
忘记root密码的解决办法
进入MySQL
配置文件
vim /etc/my.conf
在[mysqld]
语句下增加skip-grant-tables
[mysqld]
skip-grant-tables
#登陆时无需密码
systemctl restart mysqld
修改密码
update mysql.user set authentication_string = password('') where user='root'
flush privileges;
数据库用户提权
grant 权限列表 on 数据库名.表名 to '用户名'@'location' []
查看权限
show grant for '用户名'@'来源地址'
删除权限
revoke all on *.* from 用户名@地址;
查询数据去重
select distinct 字段 from 表名
► MySQL中6常见的约束
- 主键约束(primary key)
- 外键约束(foreign key)
- 非空约束(not null)
- 唯一性约束(unique)
- 默认性约束(default)
- 自增约束(auto_increment)
非空约束
create table user(
-> id int(10) not null,
-> name varchar(16)
-> );
向表中添加数据
insert into user (name) values('Bob');
拒绝添加
(1364, "Field 'id' doesn't have a default value")
唯一性约束
列级约束
所有语法都支持,但是外建上没有用处
create table user(
-> id int(10),
-> name varchar(16) not null,
-> sex varchar(2) unique
-> );
表级约束
除了非空约束以外全部支持
create table user(
-> id int(10),
-> name varchar(16) not null,
-> sex varchar(2),
-> unique(sex)
-> );
联合约束
同时约束多个目标
create table user(
-> id int(10),
-> name varchar(16) not null,
-> sex varchar(2),
-> unique(name,sex)
-> );
主键约束
列级定义
create table user(
-> id int(10) primary key,
-> name varchar(16)
-> );
表级定义
create table user(
-> id int(10),
-> name varchar(16) not null,
-> constraint password primary key (id)
-> );
外键约束
create table user (
-> id int(10),
-> name varchar(16) not null
-> );
create table password(
-> id int(10) primary key auto_increment,
-> name varchar(16),
-> foreign key(id) references user(uid)
-> );