【MySQL】数据库的SQL语句详解

目录

一、操作系统了解

二、关系型数据库与非关系型数据库的区别

三、关系型数据库的四种语言

四、DDL语言(数据库定义语言,管理创建对象如库、表、字段、索引等)

1、库的增删改查;

2、表的增删改查;

3、字段的增删改查; 

​编辑

4、六大约束属性以及应用场景

五、DML语言(数据库操作语言,数据库中的数据管理增删改)

数据库的数据增删改查

六、DQL语言(数据库查询语言,对数据库中的数据查询)

七、DCL语言 用于对用户权限的管理

1、账号的增删改查,密码的修改与查询

2、账号权限的设置

八、克隆数据表的两种方式与区别

九、临时表的创建和特点

十、外键约束

十一、忘记root密码 该如何处理

步骤一:先修改配置文件,在mysqld块下添加skip-grant-tables;

步骤二:重启服务,直接用mysql免密登录数据库;

步骤三:直接修改数据库的用户表中的对应密码数据;然后再返回配置文件删除skip-grant-tables,然后重启服务;

十二、清空数据

总结


一、操作系统了解

Windows做服务器:Windows Server2016

Linux系统的服务器:RedHat  Debian  SUSE)      MacOS

Linux系统   CentOS(yum dnf)     Ubuntu(apt apt-get)     OpenSUSE

信创标准  会让系统逐渐国产化

国产系统:

  • 华为 欧拉    
  • 阿里 龙蜥    
  • 腾讯 tencentOS    
  • 红旗    
  • 统信    
  • 麒麟(银河麒麟,中标麒麟->CentOS,优麒麟->Ubuntu)

二、关系型数据库与非关系型数据库的区别

关系型数据库:如MySQL MariaDB Oracle DB2 PostgreSQL(pgdb),以及国产的华为高斯,阿里云的RDS,还有阿里的oceanbase 腾讯的TDBA,人大金仓    达梦    greatSQL

sql关系型数据库的特点是:

  • 关系型数据库几乎通用sql语句;
  • 数据的存储类型是二维表格结构;可以创建库,库中创建表,表中数据存储结构为二维表格的结构化数据,分为行和列存储,行为一条记录,表示对象的一条信息,列为字段,表示一个对象的属性;
  • 关系型数据库通常用于业务数据管理,账户信息存储;

非关系型数据库常用代表:

  • 缓存型(key-value)  Redis   Memcached 
  • 文档型(document)  MongoDB
  • 索引型(search engine)  Elasticsearch
  • 时序型(time series)  Prometheus  InfluxDB
  • 列式型 (wide column) HBase

nosql非关系型数据库的特点:

  • 每种非关系型数据库有自己独特的语言;
  • 不同类型的NoSQL使用不同的数据存储结构,比如有键值对、文档、索引、时间序列等。

三、关系型数据库的四种语言

  • DDL:用于管理数据库对象(库、表、索引等)
  • DML:用于管理表数据
  • DQL:用于根据条件查询表数据
  • DCL:用于管理用户和权限

常用的数据类型:
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位
datetime:时间
date:日期
time:时间

四、DDL语言(数据库定义语言,管理创建对象如库、表、字段、索引等)

1、库的增删改查;

create database 库名;  ##创建库
drop database 库名;  ##删除库
show databases;  ##查看有哪些库
use 库名;  ##切换库

【MySQL】数据库的SQL语句详解_第1张图片

2、表的增删改查;

create table [库名.]表名 (字段1 数据类型 [约束属性],字段1 数据类型 [约束属性],.....);
##创建数据表结构

use 库名; ##先切换库
create table 表名 (字段1 数据类型 [约束属性],字段1 数据类型 [约束属性],.....);  ##创建数据表结构

create table 表名 (字段1 数据类型,字段1 数据类型 ,....[约束属性]);


drop table 表名;
drop table [库名.]表名;
##删除表 谨慎!!

desc [库名.]表名;
##查询表结构 以表格形式显示
show create table [库名.]表名;
##以命令的形式显示表结构


alter table [库名.]旧表名 rename [库名.]新表名;

【MySQL】数据库的SQL语句详解_第2张图片

【MySQL】数据库的SQL语句详解_第3张图片

【MySQL】数据库的SQL语句详解_第4张图片 

3、字段的增删改查; 

alter table [库名.]表名 add 字段名称 字段数据类型 [约束属性];
##表中新增一个字段,一定要跟上数据的属性

alter table [库名.]表名 add 约束属性;
##可以直接添加表的约束属性 如primary key(字段名) 或者 unique key(字段名) 

alter table [库名.]表名 change 旧字段名 新字段名 字段数据类型 [约束属性];
##修改一个字段的名称或者数据类型

alter table [库名.]表名 drop 字段名;
##删除一个字段

desc table [库名.]表名;
##表格形式查询表结构

desc table [库名.]表名\G;
##纵向查询表结构

show create table [库名.]表名;
##命令形式查看表结构

【MySQL】数据库的SQL语句详解_第5张图片

【MySQL】数据库的SQL语句详解_第6张图片

【MySQL】数据库的SQL语句详解_第7张图片

【MySQL】数据库的SQL语句详解_第8张图片

【MySQL】数据库的SQL语句详解_第9张图片 

4、六大约束属性以及应用场景

  • primary key 表示主键约束 ;主键字段的值必须是唯一且不可重复,也不能为空,一个表中,只能有一个主键
  • unique key 表示唯一键约束;唯一键字段的值不能重复,但是可以为空,一个表中可以有多个唯一键;
  • not null 表示非空约束;表示该字段的值不能为空;
  • default 表示默认值约束;当该字段的数据为空时,使用默认值填充;
  • auto_increment 表示自增约束,字段如果没有设置值,那么数据会默认从1开始自增长,且自增字段必须为主键
  • foreign key 表示外键约束,用于确保外键表和主键表的数据完整和一致性
  • int(N) zerofill 表示N位数据零填充

五、DML语言(数据库操作语言,数据库中的数据管理增删改)

数据库的数据增删改查

insert into [库名.]表名(字段1,字段2,....)values(字段1的值,字段2的值,....)
insert into [库名.]表名 values(所有字段的值 一一对应);
##添加数据记录

update [库名.]表名 set 字段名=字段值 where 条件表达式 [and/or 条件表达式2];
##修改数据的值

delete from [库名.]表名 where 条件表达式 [and/or 条件表达式2];
##删除数据的值

delete from [库名.]表名;
##清空数据表,只剩表结构

【MySQL】数据库的SQL语句详解_第10张图片

【MySQL】数据库的SQL语句详解_第11张图片 

【MySQL】数据库的SQL语句详解_第12张图片 

六、DQL语言(数据库查询语言,对数据库中的数据查询)

select * from [库名.]表名;
##查看表中的所有字段对应的所有值

select 字段1,字段2,... from [库名.]表名 where 条件表达式 [and/or 条件表达式2];
##查询某些字段 满足条件的数据

select * from [库名.]表名 limit N;
##查询前N行,包括第N行的数据

select * from [库名.]表名 limit N,M;
##查询第N行以后,不包含第N行,后面M行的数据

【MySQL】数据库的SQL语句详解_第13张图片

七、DCL语言 用于对用户权限的管理

1、账号的增删改查,密码的修改与查询

create user '用户名'@'源地址' identified by '密码';
##创建用户

rename user '用户名'@'源地址' to '新用户名'@'新源地址';
##修改用户名

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

select user,host,authentication_string from mysql.user;
##查看有哪些用户信息

【MySQL】数据库的SQL语句详解_第14张图片

alter user 'liqi'@'localhost' identified by 'abc123';

update mysql.user set authentication_string=password('123456') where user='liqi';

set password for 'liqi'@'localhost' =password('abc123');

三种修改密码的方式

 

【MySQL】数据库的SQL语句详解_第15张图片 

2、账号权限的设置

show grants for '用户名'@'源地址';

grant 权限列表 on 库.表 to '用户名'@'源地址';

revoke 权限列表 on 库.表 from '用户名'@'源地址';

【MySQL】数据库的SQL语句详解_第16张图片

grant命令 在mysql 的5.7之前的版本 支持创建新用户以及权限 密码,

但是在8.0之后 只支持先创建用户 后给这个用户添加权限; 

八、克隆数据表的两种方式与区别

##方法一:
create table 新表 like 旧表;                 #克隆表结构
insert into 新表 (select * from 旧表);       #克隆表数据        可以实现表结构和表数据与旧表都一致

##方法二:
create table 新表 (select * from 旧表);      #表数据和旧表一致,表结构和旧表不一定一致

【MySQL】数据库的SQL语句详解_第17张图片

【MySQL】数据库的SQL语句详解_第18张图片 

九、临时表的创建和特点

create temporary table temp(id int primary key,name varchar(20),age int);


create temporary table 表名 (....);       
临时表跟普通表一样可以进行增删改查,但是show tables是查不到的;
                                          
临时表只能在当前会话中有效,退出当前会话或在其它会话中,临时表都会失效

【MySQL】数据库的SQL语句详解_第19张图片

临时表 创建的时候加上temporary 限制 ,show tables命令无法查看 ,该表只在当前环境有效,新开窗口即失效;临时表一般用于测试

十、外键约束

外键的定义:如果同一个属性字段X在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。

主键表和外键表的理解:
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)

注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。

#创建主表 profession
create table profession(proid int primary key auto_increment,proname varchar(20));

#创建从表 student
 create table student(id int primary key,name varchar(10) unique key,age int,proid int);

#为从表 student 表添加外键,并将 student 表的 proid 字段和 profession 表的 pid 字段建立外键关联。外键名建议以“FK_”开头。
alter table student add constraint FK_01 foreign key (proid) references profession(proid);

desc student;

#插入新的数据记录时,要先主表再从表
insert into profession values(1,'云计算');
insert into profession values(2,'大数据');
insert into student values(1,'zhangsan',18,1);
insert into student values(2,'lisi',19,1);
insert into student values(3,'wangwu',20,2);

#删数数据记录时,要先从表再主表,也就是说删除主键表的记录时必须先删除其他与之关联的表中的记录。
delete from student where proid=1;
delete from profession where pid=1;

#查看和删除外键约束
show create table student;
desc student;
alter table student drop foreign key FK_pro;
alter table student drop key FK_pro;

【MySQL】数据库的SQL语句详解_第20张图片

【MySQL】数据库的SQL语句详解_第21张图片

【MySQL】数据库的SQL语句详解_第22张图片

【MySQL】数据库的SQL语句详解_第23张图片 

alter table student drop foreign key FK_01;
##删除外键

alter table student drop key FK_01;
##还有个键值也需要删除

【MySQL】数据库的SQL语句详解_第24张图片

十一、忘记root密码 该如何处理

步骤一:先修改配置文件,在mysqld块下添加skip-grant-tables;

vim /etc/my.cof
[mysqld]
skip-grant-tables

【MySQL】数据库的SQL语句详解_第25张图片

步骤二:重启服务,直接用mysql免密登录数据库;

【MySQL】数据库的SQL语句详解_第26张图片

步骤三:直接修改数据库的用户表中的对应密码数据;然后再返回配置文件删除skip-grant-tables,然后重启服务;

update mysql.user set authentication_string=password('abc123') where user='root' and host='localhost';

【MySQL】数据库的SQL语句详解_第27张图片

十二、清空数据

清空数据有两种方式

delete from [库名.]表名;
处理方式是一行一行的删除,比较耗时,如果表中有自增字段,那么下次添加数据的时候,自增字段的值不会从1开始,而是从删除前的值开始

truncate table [库名.]表名;
处理方式是创建一个同名且相同表结构,所有数据清空,原有的自增数据不会保留,添加数据的时候自增字段的值默认从1开始;(相当于格式化表)

【MySQL】数据库的SQL语句详解_第28张图片

总结

操作系统   Windows(Win7  Win10  Win11  Windows Server2016)     Linux/Unix(RedHat  Debian  SUSE)      MacOS
Linux系统   CentOS(yum dnf)     Ubuntu(apt apt-get)     OpenSUSE
信创标准  国产系统: 华为 欧拉     阿里 龙蜥     腾讯 tencentOS     红旗     统信     麒麟(银河麒麟,中标麒麟->CentOS,优麒麟->Ubuntu)


数据库 分两大类: 关系型数据库 SQL     非关系型数据库 NoSQL

关系型数据库:典型代表  MySQL   MariaDB   PostgreSQL(pgdb)  Oracle   SQL Server   Db2
信创        国产数据库  阿里云 RDB     华为 高斯     阿里 Oceanbase    腾讯 TDBA     人大金仓    达梦    greatSQL


关系型数据库 SQL   操作命令:sql语句      存储结构:二维表格      存储的数据:结构化数据      使用场景:存储业务数据和账户信息
对象:  库 -> 表 -> 二维表格形式的结构化数据     列(字段):用来描述对象的一个属性
                                                 行(记录):用来描述一个对象的信息

非关系型数据库 NoSQL   存储结构:不同类型的NoSQL使用不同的存储结构,比如 键值对、文档、索引、时间序列等
缓存型  Redis   Memcached
文档型  MongoDB
索引型  Elasticsearch
时序型  Prometheus  InfluxDB
列式型  HBase


Mysql基础操作
select version();
select user();
show databases;
use 库名;   show tables [from 库名];
describe 表名;   desc [库名.]表名;


SQL语句 DDL  DML  DQL  DCL
DDL:用于管理数据库对象(库、表、索引等)
create database 库名;
use 库名;
create table 表名 (字段1 数据类型, 字段2 数据类型, ....[, primary key(字段)]);

drop table [库名.]表名;
drop database 库名;

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

show create table 表名;


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

int(N) zerofill   零填充


克隆表
create table 新表 like 旧表;                 #克隆表结构
insert into 新表 (select * from 旧表);       #克隆表数据        可以实现表结构和表数据与旧表都一致

create table 新表 (select * from 旧表);      #表数据和旧表一致,表结构和旧表不一定一致


清空表
delete from 表名;       #一条一条的删除记录,效率较慢;自增长字段仍然会按照清空表前的最大记录继续自增

truncate table 表名;    #直接重建表,清空表效率更快;自增长字段会重新从 1 开始自增 


临时表
create temporary table 表名 (....);       临时表跟普通表一样可以进行增删改查,但是show tables是查不到的;
                                          临时表只能在当前会话中有效,退出当前会话或在其它会话中,临时表都会失效

外键约束
主键表: alter table 表名 add primary key (主键字段);
外键表: alter table 表名 add foreign key (外键字段) references 主键表名 (主键字段);
         插入新数据时,需要先在主键表插入数据再在外键表插入相关联的数据;删除数据时,需要先在外键表删除数据再在主键表删除相关联的数据
		 
		 alter table 表名 drop foreign key '外键别名';
		 alter table 表名 drop key '键名';


DML:用于管理表数据
insert into 表名 (字段1, 字段2, ....) values (字段1的值, 字段2的值, ....);
insert into 表名 values (所有字段的值);

update 表名 set 字段1=值[, 字段2=值, ....]  where 条件表达式;

delete from 表名 where 条件表达式;


DQL:用于根据条件查询表数据
select * from 表名 [where 条件表达式];
select  字段1,字段2,....  from 表名 [where 条件表达式];

select * from 表名\G      #纵向查看每行记录的字段的值

select * from 表名 limit N;      #查看表的前N行的记录
select * from 表名 limit N,M;    #查看表的前N行之后的连续M行的记录(不包含第N行)


DCL:用于管理用户和权限
用户管理:
create user '用户名'@'源地址'  identified by '密码';
                     源地址可以是localhost/IP/网段/主机名/%
					 
rename user '用户名'@'源地址' to '新用户名'@'源地址';

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

select user,host,authentication_string from mysql.user;

select user();

set password [for '用户名'@'源地址'] = password('密码');
alter user '用户名'@'源地址' identified by '密码';

如何找回 root 密码?
1)修改MySQL配置文件,在 [mysqld] 配置项下面添加 skip-grant-tables 配置参数
2)重启mysqld服务,使用 mysql 密码直接登录数据库
3)执行命令 update mysql.user set authentication_string=password('密码') where user='root'; 修改 root 用户密码
4)还原MySQL配置,重启mysqld服务,使用 mysql -u用户名 -p密码 [-h mysql地址 -P mysql端口] 命令登录数据库验证


权限管理:
grant 权限1,权限2,....  on 库名.表名 to '用户名'@'源地址' [identified by '密码'];   #5.7或之前版本支持创建新用户和授予权限,8.0版本只能用于授予权限
       all                   *.*

show grant for '用户名'@'源地址';

revoke 权限1,权限2,....  on 库名.表名 from  '用户名'@'源地址';
       all

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