MySQL数据库

MySQL数据库

一、基本概念

数据 (Data)

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

将不同的记录组织在一起
用来存储具体数据

数据库

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

总结

数据库中有表,表中有记录

数据库管理系统(DBMS)

  • 是实现对数据库资源有效组织,管理和存取的系统软件

数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能

数据库系统

是一个人机系统,由硬件、oS、数据库、DBMS、应用软件和数据库用户组成
用户可以通过DBMS或应用程序操作数据库

二、主流的数据库介绍

SQL Server (微软公司产品)

面向Windows操作系统
简单,易用

Oracle (甲骨文公司产品)

面向所有主流平台
安全、完善、操作复杂

DB2 (IBM公司产品)

面向所有主流平台
大型、安全、完善

MySQL (甲骨文公司收购)

免费、开源、体积小

数据库分为关系型数据库与非关系型数据库

关系型数据库典型代表:Mysql(5.7/8.0)、Mariadb、 Oracle、PsetgreSQL、SQL Server、DB2、

国产数据库代表:阿里云RDB 华为:高斯 腾讯 TDBA 阿里 Oceanbase

关系型数据库

1)关系数据库系统是基于关系模型的数据库系统
2)关系模型的数据结构使用简单易懂的二维数据表
3)关系模型可用简单的“实体-关系”(E-R)图来表示
4)E-R图中包含了实体(数据对象)、关系和属性三个要素

关系数据库的存储结构是二维表格

在每个二维表中

每一行称为一条记录,用来描述一个对象的信息
每一列称为一个字段,用来描述对象的一个属性

非关系型数据库介绍

非关系数据库也被称作NoSQL (Not Only sQL)

存储数据不以关系模型为依据,不需要固定的表格式

非关系型数据库的优点

数据库可高并发读写
对海量数据高效率存储与访问
数据库具有高扩展性与高可用性

非关系型数据库典型代表:

缓存型:Redis Mecached

文档型:MongoDB

搜索型:ElasticSearch(ES)

时序型:Prometheus InfluxDB

三、数据库操作

常用的数据类型:

数据 作用
int: 整型 无符号【0,232-1】,有符号【-231,2^32-1】
float: 单精度浮点 4字节32位
double: 双精度浮点 8字节64位
char: 固定长度的字符类型
varchar: 可变长度字符类型
text: 文本
image: 图片
decimal(5,2) 五个有效长度数字,小数点后面有2位

3.1SQL语句

SQL语句用于维护管理数据库,包括数据查询、数据更新

3.2SQL语句分类

DDL: 数据定义语言,用于创建数据库对象,如库、表、索引等

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

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

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

3.2.1DDL 用于创建数据库对象:库 表 索引

①创建库
create database 库名;
create table 表名 (字段名1 数据类型 [字段属性], 字段名2 数据类型 [字段属性], ...., primay key(字段));

MySQL数据库_第1张图片

②查看库
show databases;
show tables [from 库名];
desc [库名.]表名;

MySQL数据库_第2张图片

③删除库
drop table 表名;
drop database 库名;

3.2.2DML 用于管理表数据

①添加数据
insert into 表名 values (字段1的值, 字段2的值, ....);    #要按照表结构的字段顺序设置值
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);

MySQL数据库_第3张图片

②更新数据
update 表名 set 字段=值, ... where 条件表达式;

MySQL数据库_第4张图片

③删除表某个字段的值
delete from 表名 where 条件表达式;

MySQL数据库_第5张图片

3.2.3DQL 用于根据条件查询表数据

①查询数据
select * from 表名 [where 条件表达式];
select 字段1,字段2,... from 表名 [where 条件表达式];

MySQL数据库_第6张图片

②纵向查看数据
select * from 表名\G     #纵向查看每行记录字段的值
③查看N,M行内容
select * from 表名 limit N;   #显示表的前N行记录
select * from 表名 limit N,M;   #显示表的从第N行之后的连续M行记录(不包含第N行)

MySQL数据库_第7张图片

④修改表结构
改表名
alter table 旧表名 rename 新表名;

MySQL数据库_第8张图片

增加字段
alter table 表名 add 新字段 数据类型 [字段属性];

MySQL数据库_第9张图片

修改字段
alter table 表名 change 旧字段 新字段 数据类型 [字段属性];

MySQL数据库_第10张图片

删除字段
alter table 表名 drop 字段;

MySQL数据库_第11张图片

克隆表
create table 新表  like  旧表;              克隆表结构
insert into  新表  (select * from 旧表);    克隆表数据         表结构和表数据都一样

create table 新表 (select * from 旧表);                        表数据一样,表结构可能不一样

MySQL数据库_第12张图片
MySQL数据库_第13张图片

清空表
delete from 表名;        一条一条的删除记录,效率较慢,自增字段仍然会按照清空前的最大记录自增
truncate table 表名;     直接重建表,清空表效率较快,自增字段会重新从1开始自增

MySQL数据库_第14张图片

临时表
create temporary table 表名 (字段1 字段数据类型.....);    临时表只能在当前会话连接中有效,但show tables是查看不到的,在其它会话连接中或退出当前会话连接临时表将会失效  

MySQL数据库_第15张图片

外键约束
先创建两个表,确定主键表和外键表
主键表: alter table 表名 add primary key (主键字段);
外键表: alter table 表名 add foreign key (外键字段) references 主键表 (主键字段);
       插入新数据时,先在主键表插入数据再在外键表插入对应数据;删除数据时,先在外键表删除数据再在主键表删除对应数据

Mysql 常用的6大约束

参数 说明 解释
primary key 主键约束 字段的值不能重复,不能为null,一个表只能有一个主键
unique key 唯一性约束 字段的值不能重读,能为null,一个表可有多个唯一键
not null 非空约束 字段的值不能为null
default 默认值约束 字段的值如果没有设置则使用默认值自动填充
auto_increment 自增约束 字段的值如果没有设置,默认会从1开始递增1,要求自增字段必须为主键字段
foreign key 外键约束 保证相关联表数据的完整性和一致性

3.2.4DCL 用于管理用户与权限

①用户管理
创建用户
create user '用户名'@'源地址'     identified by '密码';
'用户名':指定将创建的用户名
'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
        若使用加密密码,需要先使用SELECT PASSWORD('密码'); 获取密文,再在语句中添加 PASSWORD '密文';
        若省略“IDENTIFIED BY”部分,则用户的密码将为空(不建议使用)

MySQL数据库_第16张图片

重命名用户
rename user '旧用户名'@'源地址'  to  '新用户名'@'源地址';

MySQL数据库_第17张图片

删除用户
drop user '用户名'@'源地址';

MySQL数据库_第18张图片

查看当前登录用户
select user();

MySQL数据库_第19张图片

修改当前登录用户密码
SET PASSWORD = PASSWORD('密码');

MySQL数据库_第20张图片

修改其他用户密码
SET PASSWORD FOR '用户名'@'localhost' = PASSWORD('密码');
②找回root密码
1)修改mysql配置文件/etc/my.cnf,在 [mysqld] 下面添加 skip-grant-tables
2)重启mysqld服务。使用 mysql 命令直接登录mysql
3)执行 update mysql.user set authentication_string=password('密码') where user='root' and host='localhost';
4)还原配置文件,重启mysqld服务,使用 mysql -u 用户 -p[密码] -h 地址 -P 端口  来验证登录
5)注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 删除,并重启 mysql 服务。
③权限管理
查看权限
SHOW GRANTS FOR 用户名@来源地址;

MySQL数据库_第21张图片

设置权限
GRANT ALL [PRIVILEGES] ON *.* TO '用户名'@'来源地址' IDENTIFIED BY '123456';   //当用户不存在时可以创建用户
grant 权限1,权限2,....  on  库名.表名  to  '用户名'@'源地址'  [identified by '密码'];

MySQL数据库_第22张图片
MySQL数据库_第23张图片

撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;  //须root用户才能撤销权限

MySQL数据库_第24张图片

你可能感兴趣的:(数据库,mysql)