Mysql小白基本知识掌握


(声明:本教程仅供本人学习使用,如有人使用该技术触犯法律与本人无关)
(如果有错误,还希望指出。共同进步)


Mysql 登录

mysql -h <Ip> -P <端口(3306)> -u <用户名>  -p <密码>

SQL命令


SQL全称呼为Structure Query Language(结构化查询语言)。主要分为3类。

  • DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、 数据库、表、列、索引等数据库对象的定义。
  • DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。
  • DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和 访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。
  • DQL(Data QueryLanguage)语句:数据查询语言

在这里插入图片描述


# DQL

————

显示当前正在操作的数据库

select database();

显示当前用户

select user();

整体使用

select * from <表名> where <条件> group by <条件> (having <条件>) order by <条件> limit <条件> offset <条件>;

查询所有

select * from <表名>;

指定字段查询


select <字段名1><字段名2>,… from <表名>;

去除重复字段查询

select distinct <字段名1><字段名2> from <表名>;

条件查询

select * from <表名> where <条件>

在这里插入图片描述


结果集排序

(asc—ascending升序,desc—descending降序)
select 字段名 from 表名 order by 字段名 desc;

多字段排序

select <字段名> from <表名> order by <字段名1> asc|desc<字段名2> asc|desc,…;

限制查询的结果集

# 查询第<数字>条及之前的数据
select <字段名> from <表名> limit <数字>;
# 查询第<数字1>条开始<数字2>条数据
select <字段名> from <表名> limit <数字1>,<数字2>;
# 等价于上面
select <字段名> from <表名> limit <数字1> offset <数字2>;

分组统计

# 常用的统计函数
# 求和
sum()

# 最大值
max()

# 最小值
min()

# 次数
count()

# 平均值
avg()

【注】分组之后,前面的字段只能写分组的字段,或者统计信息,写其它没有意义
select count(<分组字段名>) from students group by <分组字段名>;

【注】可以给字段起别名,as起别名
select count(<分组字段>) as <别名1>,<字段名1> as <字段名2> from <表名> group by <分组字段>;

# 结果集过滤
select () from <表名> group by <字段> having <条件>;

正则

# 匹配 
REGEXP_LIKE(<字段名>, '正则表达式')

# 包含 
REGEXP_INSTR (<字段名>, '正则表达式')

# 替换
REGEXP_REPLACE(<字段名>, '正则表达式')

# 提取
REGEXP_SUBSTR(<字段名>, '正则表达式')

# 例子匹配13/15开头的手机号(逻辑不太严谨)
select * from <表名> where regexp_like(<字段名>, '^[1]{1}[35]{1}[[:digit:]]{9}$');

# 同匹配
rlike '正则表达式'

# 例子正则匹配 user_name 以k开头,k出现一次以上
select * from user where user_name rlike '^k+';

# DDL

————

查看

#  查看mysql版本
status;

# 查看最大连接数
show global status like 'Max_used_connections';

# 查看进程的连接
show full processlist;

# 查看所有的引擎
show engines;

# 查看库
show databases;

# 查看指定数据库创建语句
show create database <数据库名>;

# 查看所有表
show tables;

# 查看表字段(describe:描述)
desc <表名>;

# 查看表创建语句
show create table <表名>;

# 查看索引
show index from <表名>;

创建

# 创建库
create database <数据库名>;

# 创建表指定引擎和字符集
create table <表名>(
	'<字段1>' <字符类型>,
	'<字段2>' <字符类型>,
	...,
	primary key(<指定主键字段>),
	/*声明索引*/
)engine=<引擎> default charset='<字符集>'# 【*】 引擎有innoDB、 MyISAM两种

# 复制表(as和like的区别)
# as
create table <需要复制的表名> as select * from <被复制的表名>;

# like
create table <需要复制的表名> like <被复制的表名>;

----------------------------------------------------------
 - as用来创建相同表结构并复制源表数据
 - like用来创建完整表结构和全部索引
【*】:as复制的表,表结构相同,索引信息没了,包括主键(主键也是一种索引,并且不能为空),有数据;like复制的表,没有数据,表结构相同,有索引信息。

MyISAM这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECT,MyISAM是更好的选择。

InnoDB这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。


修改

# 修改数据库字符集
alter database <数据库名> default character set <字符集>;

# 修改表的字符集
alter table <表名> default character set <字符集>;

# 修改表字段类型
alter table <表名> modify <字段名> <字段类型>;

# 增加表字段
alter table <表名> add <字段名> <字段类型>;

# 增加字段时控制顺序
# 添加在指定字段名后/首位
alter table <表名> add <字段名> <字段类型> after/first <字段名>;

# 删除表字段
alter table <表名> drop <字段名># 表字段改名
alter table <表名> change <字段原名> <字段新名> <字段类型>;

# 修改表名
alter table <旧表名> rename <新的表名>;

# 添加索引
# 普通索引
alter table <表名> add index(<字段名>);

# 唯一索引
alter table <表名> add unique(<字段名>);

# 主键索引
alter table <表名> add primary key(<字段名>);

# 全文索引
alter table <表名> add fulltext(<字段名>);

# 删除索引
alter table <表名> drop index(<字段名>);

删除

# 删除数据库
drop database <数据库名>;

# 删除表
drop table <数据表名>;

# DML

————

插入数据

# 格式一,所有字段都插入
insert into <表名> values<字段信息1><字段信息2>,...# 格式二,指定字段插入
insert into <表名><需要插入的字段名,一个或多个>values(<信息>);/(<信息>),(<信息>),...

删除数据

# 符合条件的都被删除
delete from <表名> where <条件>;*】:不加条件为全部删除

# 清空表记录
delete from <表名>- delete:删除所有数据,重新添加,id从原有基础上增加

truncate table <表名>- truncate: 删除所有数据,重新添加,id从1开始

修改数据

# 符合条件的修改
update <表名> set <字段名1>=<内容>,<字段名2>=<内容> where <条件>;*】:不加条件为全部修改

# DCL

————

创建用户

# 默认只能本机的客户端登录本机的mysql,远端的客户端不能登录本机的mysql
create user '用户名'@'用户地址' identified by '密码';

授予权限

# 【*.*】 : .左边可以指定数据库,右边指定数据表
grant <权限> on *.* to '用户名'@'用户地址';
# 权限可参照链接地址
# 【https://www.php.cn/mysql-tutorials-415708.html】

剥夺权限

# 【*.*】 : .左边可以指定数据库,右边指定数据表
revoke <权限> on *.* from '用户名'@'用户地址'

删除用户

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

刷新权限

flush privileges;

【补充】:多表联合查询(DQL)

———————————————

隐式内连接

# 不写条件,默认的连接方式是笛卡尔乘积
select * from <表名1> as <别名1>,<表名2> as <别名2> where <别名1>.<字段名>=<别名2>.<字段名>;*】:表起别名之后,sql语句中,原名不能使用,只能使用别名 

显式内连接

select <表名1>.<字段名>, <表名2>.<字段名>, ... from <表名1> join <表名2> on <条件>;

外连接之【左连接】——>一个新表
在内连接的基础上,将左边表的数据都写出来,右边对不上全部写null

在这里插入图片描述
外连接之【右连接】——>一个新表
在内连接的基础上,将右边表的数据都写出来,右边对不上全部写null

在这里插入图片描述
三表连接

# 将表1和表2通过条件连接成一个新表后与表3通过连接条件成为一个新表
select * from <1> join <2> on <条件> join <3> on <条件> where <条件>;

子查询(嵌套连接)

# 条件可以为另一条select语句
select <字段> from <表名> where <字段> in (条件)

记录联合

# 【all为全部显式,不加all为添加distace(去重)的功能】
select <语句1> union[all] select <语句2>;

两表同时更新

在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值