枯枯燥燥mysql

一 .  第一天内容

1.相关参数(必须熟知 ) 

MySQL服务初始密码目录   /var/log/mysqld.log

主配置文件  /etc/my.cnf    

数据库目录   /var/lib/mysql

服务的进程名/端口   mysqld/3306

进程所有者和所属组    mysql/mysql 

数据传输协议    tcp 

错误日志文件名 /var/log/mysqld.log

数据库服务默认的检索目录  /var/lib/mysql-files/

mysql索引目录: /var/lib/mysql/库/表.ibd

修改数据库服务默认的检索目录: 在主配置文件下添加  secure_file_priv='目录位置'

2.连接服务

mysql -h(IP地址) -uroot  -p '密码'

3.修改密码的方法:

线下破解:

    1. 修改配置文件:vim /etc/my.cnf

             [mysqld]

             # mysql策略

     #        validate_password_policy=0 

     #      validate_password_length=6 

      添加命令 skip-grant-tables

          2.   重启服务  直接登陆即可

          3.  修改root密码    

                update  mysql.user set authentication_string=password("密码")   where user="root" and host="localhost";  

         4.保存修改 flush privileges; 

         5.  断开连接    还原修改  把添加的字段注释即可

线上破解:

  1.   把目标主机的 /var/lib/mysql/mysql  文件拷贝到  本地的主配置目录下

  2. 查看mysqld进程 

pstree -p | grep mysqld | head  -1

  3.  杀死进程 后 直接进即可

 kill  -SIGHUP   '进程号'

 4.修改root密码    

mysqladmin  -uroot    -p旧密码   password  新密码

必备命令:

select   version();  查看服务版本

select   user();   查看登录用户

select  database();  查看当前所在库

show   databases;  查看已有库

use  库名;   切换库     

show  tables;   查看已有表

desc  表名;     查看表结构

show index   from   库.表;   查看索引详细信息 

查询命令格式

select  字段名列表  from  库名.表名; #查看表里的所有行

select  字段名列表  from  库名.表名  where   查询条件 ; #只查看与条件匹配的行

select  字段名  as  '更改的名称';  # 定义别名  as

数据拼接   concat()      不显示重复     distinct 

数值比较 符号   =      !=       >       >=       <       <= 

              相等    不相等   大于   大于等于    小于    小于等于

说明符号两边要是数字或数字类型的表头  用符号左边的和右边的做比较

空       is  null      表头下没有数据

非空       is  not null  表头下有数据 

模糊匹配条件   where  字段名   like  ‘表达式’

  统配符号  

    表示 1个字符

  %  表示零个或多个字符

正则匹配   

字段名 regexp  '正则表达式'

 ^ 匹配行首       $ 匹配行尾     [] 匹配范围内任意一个

*  前边的表达式出现零次或多      |  或者

逻辑匹配  就是有多个判断条件

逻辑与   and  &&        多个判断条件必须同时成立

逻辑或   or   ||        多个判断条件其中某个条件成立即可

逻辑非   not  !         取反

逻辑与and  的优先级要高于逻辑或 or 

二.    第二天内容

库名是有命名规则?

仅可以使用数字、字母、下划线、不能纯数字

区分字母大小写,

具有唯一性

不可使用指令关键字、特殊字符

建库的基本命令

create  database  库名; 

删库命令

drop   if  exists  database  库名;

导库命令:

mysql -h(IP地址) -uroot  -p '密码'   <  / 库路径

建表命令格式

create  table  库名.表名(

表头名1  数据类型, 

表头名2  数据类型,

)

删除表:

drop  tables  库.表名;

修改表操作:

命令格式: alter  table  库名.表名   操作命令;

添加新表头   add         

删除表头   drop          

修改表头存储数据的 数据类型  modify 

修改表头名  change 

修改表名  rename 

添加在指定位置   在数据类型后面加  first  或  after

复制表   表头和数据复制都复制的

命令格式create  table  库名.表名   select  *  from  库名.表名 ;

复制表   仅仅只复制表结构

命令格式  CREATE  TABLE 库.表   LIKE  库.表

插入行:

 insert into  表名(字段名)  values(插入的数值);  

修改行:

命令格式: update  库名.表名   set  字段名 =  值 ,  字段名 =  值  where 字段名 =  值  ;

删除行及空行:

delete   from  库.表  where  筛选条件;

delete   from  库.表;

delete  from  库.表 where  筛选条件=空字符   or   筛选条件  is null;  

数据类型

整型类型

tinyint    0~255

smallint  0~65535

int   0~2^32-1

浮点类型

m  总个数, d 小数位

float(m,d)  单精度   

double(m,d)   双精度

字符类型

char(字符个数)   定长类型   最多255个字符

varchar(字符个数)  变长类型   最多65532个字符

枚举类型

单选    enum(值1,值2,值3 ....)

多选    set(值1,值2,值3 ....)

日期时间类型  表头存储与日期时间格式的数据

年        year       YYYY     2021

日期    date        YYYYMMDD    20211104

时间    time       HHMMSS         143358   

日期时间(既有日期又有时间)  

datetime   或  timestamp       YYYYMMDDHHMMSS     20211104143648

timestamp与 datetime区别:

datetime存储范围大  timestamp范围小

timestamp类型      不赋值 使用系统时间自动赋值

datetime类型         不赋值  使用null  赋值 

数据导入格式:

load   data  infile   "/检索目录/文件名"   into  table    库名.表名      fields  terminated by  "文件中列的间隔符号"      lines   terminated by   "\n"  ;

数据导出命令格式:

select   字段名列表 from  库.表   where  条件     into  outfile   "/检索命令名/文件名"  fields  terminated by  "符号"  lines     terminated by  "符号" 

三.   第三天内容

字段约束

1、 PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。

2、NOT NULL :非空,用于保证该字段的值不能为空。

3、DEFAULT:默认值,用于保证该字段有默认值。

4、UNIQUE:唯一索引,用于保证该字段的值具有唯一性,可以为空。

5、FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

在从表添加外键约束,用于引用主表中某些的值

6.auto_incremen:   插入记录时,如果不给字段赋值,字段会通过自加1的计算结果赋值

创建主键 (2种语法格式 要记住)

create  table  库.表( 字段名 类型  primary key  , 字段名 类型 , ..... );

create  table  库.表( 字段名 类型 , 字段名 类型 , primary key(字段名) );

删除主键命令格式

 alter  table   库.表   drop primary  key ;

添加主键命令格式

alter  table  库.表  add  primary key(表头名);

创建外键命令格式

create table   库.表(表头列表 , 

foreign key(表头名)   #指定外键

references 库.表(表头名)   #指定参考的表头名

on update  cascade   #同步更新

on  delete  cascade  #同步删除

)engine=innodb;

查看表的外键 ,并获取外键名称

show create  table  库.表  \G

删除外键 (通过外键名称 删除表头的外键设置)

alter table 库.表 drop FOREIGN KEY   外键名;

已有表里添加外键

alter table 库.表 add  foreign key(表头名)  references 库.表(表头名)   on update cascade  on delete cascade;

复合主键  

1.表中的多个表头一起做主键 

2.复合主键的约束方式: 多条记录 主键字段的值不允许同时相同

外键

1.核心思想:保证数据的一致性

2.插入记录时,字段值在另一个表字段值范围内选择。

3.表存储引擎必须是innodb   注意: 参考的表不能删除

mysql索引

Mysql索引主要有三种结构:Btree、B+Tree 、Hash 

索引的优点:

1.提高MySQL的检索速度

2.减小了服务器需要扫描的数据量

3.帮助服务器避免排序和临时表

4.将随机IO变成顺序IO

索引的缺点:

1.提高了查询速度,同时却会降低更新表的速度

2.更新表时,MySQL不仅要保存数据,还要保存索引文件。

3.建立索引会占用磁盘空间的索引文件。

4.如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

索引的分类:

普通索引 (index)  :

不应用任何限制条件的索引,该索引可以在任何数据类型中创建。

创建普通索引命令格式(index) :

CREATE TABLE  库.表(

字段列表 ,

INDEX(字段名) ,

INDEX(字段名) ,

);

查看索引详细信息语句:

show index   from   库.表;

Key_name:    #索引名

Index_type:   #排队算法

explain命令 :   可以查看执行的查询select语句, 是否使用到索引做查询了

添加索引:

CREATE  INDEX  索引名  ON  库.表(字段名);

删除索引 : 

命令格式   DROP  INDEX   索引名   ON  库.表;

唯一索引 (unique):

使用UNIQUE参数可以设置唯一索引。

全文索引 (FULLTEXT):

使用FULLTEXT参数可以设置索引为全文索引。

只能创建在CHAR、VARCHAR或者TEXT类型的字段上。

单列索引:

条件只需要保证该索引值对应一个字段即可只对应一个字段的索引。

多列索引:

多个字段上创建一个索引,对应的多个字段,用户可以通过这几个字段进行查询

mysql用户管理: 

用户授权命令格式:

GRANT 权限列表 ON 库名 TO 用户名@"客户端地址"   IDENTIFIED  BY  “密码”    WITH GRANT OPTION;

查看已有的访问权限

 show grants for   用户名@"客户端地址"

给已有追加权限

grant 权限  on  *.* to   用户名@"客户端地址"

权限撤销 : 删除已有授权用户的权限:

REVOKE 权限列表 ON 库名 FROM  用户名@"客户端地址";

权限列表  : 就是添加的用户对指定的库名具有的访问权限表示方式

ALL        表示所有权限  (表示所有命令)

USAGE    表示无权限  (除了查看之外啥权限都没有 , 看的命令show    desc )

SELECT,UPDATE,INSERT          表示只有个别权限

SELECT, UPDATE (字段1,字段N)   表示权限仅对指定字段有访问权限

库名  :添加的使用户对服务器上的那些库有访问权限 可以表示的方式有:

*.*          表示 所有库所有表

库名.*    表示一个库下的所有表

库名.表名   表是一张表

客户端地址:

%                  表示网络中的所有主机

localhost          表示数据库服务器本机

* . * . * . *         指定主机

密码  : 添加的用户连接数据服务时使用的密码 ,要符合数据库服务的密码策略

WITH GRANT OPTION :    让添加的用户也可以使用grant命令再添加用户,但用户本身要对mysql库有insert的权限

添加密码:

grant   权限   on *.* to    用户名@"客户端地址";    identified by  "密码";

修改已有授权用户的连接密码

set password for 用户名@"客户端地址"=password("新密码");

添加用户:

赋予权限的时候  会自动生成用户

用户改名:

rename user 原用户名 to  现用户名 ;  

查看用户:

select  字段  from  库.表;

删除添加的用户:

drop  user   用户名@"客户端地址"; 

授权库mysql库的使用:( 保存grant命令的执行结果。)

使用到了4张表 分别存储不同的授权信息

user表                           #保存已有的授权用户及权限 (全局权限    权限all   库名 *.*)

db表                #保存已有授权用户对数据库的访问权限

tables_priv表       #记录已有授权用户对表的访问权限

columns_priv表      #保存已有授权用户对字段的访问权限

四.   第四天内容

1.select 命令里使用函数做查询的格式

第一种格式

SELECT  函数(表头名)  FROM  库名.表名;

第二种格式

SELECT  函数(函数())  ;

第三种格式:单独把函数的执行结果输出

SELECT  函数() ;

常用函数的使用:

作用:处理字符或字符类型的字段

字符函数的使用:

LENGTH(str)                       返字符串长度,以字节为单位

CHAR_LENGTH(str)         返回字符串长度,以字符为单位

UPPER(str)和UCASE(str)  将字符串中的字母全部转换成大写

LOWER(str)和LCASE(str) 将str中的字母全部转换成小写

SUBSTR(s, start,end)            从s的start位置开始取出到end长度的子串

INSTR(str,str1)                      返回str1参数,在str参数内的位置

TRIM(s)                                  返回字符串s删除了两边空格之后的字符串

数学函数的使用:

作用:处理数据或数值类型的字段

ABS(x)                                   返回x的绝对值

PI()                                         返回圆周率π,默认显示6位小数

MOD(x,y)                              返回x被y除后的余数 

CEIL(x)、CEILING(x)         返回不小于x的最小整数 (x 是小数)

FLOOR(x)                           返回不大于x的最大整数 (x 是小数)

ROUND(x)                             返回最接近于x的整数,即对x进行四舍五入 (x 是小数)

ROUND(x,y)                          返回最接近x的数,其值保留到小数点后面y位,若y为负 值,则将保留到x到小数点左边y位 (x 是小数)

聚集函数的使用  sum()  avg()  min()  max()  count()

作用:数据统计命令 ,输出的值只有1个

avg(字段名)                               //计算平均值

sum(字段名)                              //求和

min(字段名)                              //获取最小值

max(字段名)                             //获取最大值

count(字段名)                           //统计字段值个数

日期时间函数的使用  : 

使用mysql服务自带的命令 获取系统日期和时间

now()                                     系统日期时间

 curdate()                                             系统日期

curtime()                                              系统时间

year(now())                                         系统年份

 month(now())                            系统月份

day(now())                                        系统天数

数学计算的使用  +   -     *   /     % 

符号两边的 字段的是数值类型的

字段  数字符号 =  条件

流程控制函数 : 查询表记录事可以加判断语句

 if语句 语法格式

语法:

if(条件,v1,v2) 如果条件是TRUE则返回v1,否则返回v2

ifnull(v1,v2)  如果v1不为NULL,则返回v1,否则返回v2 

case语句 语法格式  (可以有多个判断添加)

如果字段名等于某个值,则返回对应位置then后面的结果,

如果与所有值都不相等,则返回else后面的结果

语法格式1

CASE 字段名              

WHEN 值1 THEN 结果 

WHEN 值2 THEN 结果  

WHEN 值3 THEN 结果 

ELSE 结果  

END    as    '别名'

from  表

查询结果处理

分析出sql语句怎么写的思路:

第1步: 确定使用的命令   (对数据做处理使用那个命令  select   update   insert  delete )

第2步: 确定数据在那个表里   (可以确定  from  后的 表名)

第3步: 确定处理的是什么数据  (就知道了 表头名  了)

第4步: 确定处理条件   (就知道 where 后边该怎么写了 )

查询结果处理: 对用select 命令查找到的数据再做处理

语法格式

 select    字段名列表  from   库.表   where  筛选条件    分组|排序|过滤|分页 ;

分组 :  对查找到数据做分组处理(表头值相同为一组,只显示一次)

查询命令    group by   字段名

排序  把查找到的数据排队 ,用来排队的字段数据类型应该是 数值类型

order by   字段名   [asc];     从小到大排序(升序)默认的排序方式

order by   字段名   desc;   从大到小排序(降序)

运算符 和 统计函数的区别

运算符                横着计算

sum()统计函数         竖着计算

过滤数据 having  作用对select 查询到的数据 再次做筛选 使用的命令是having

select  字段名列表  from   库.表  where   条件     having   筛选条件;

分页 limit 

作用:限制查询结果显示行数(默认显示全部的查询结果) 

命令格式1  (只显示查询结果的头几行)

select  字段名列表  from   库.表  where   条件  limit 数字;

命令格式(显示查询结果指定范围内的行)  取值指定范围规则: 含尾去头   例如 : limit   3, 5;      从查询结果的第4行开始显示,共显示5行

select  字段名列表  from   库.表  limit 数字1,数字2;

select  字段名列表  from   库.表  where   条件  limit  数字1,数字2;

二、连接查询

连接查询也叫多表查询 常用于查询字段来自于多张表

通过不同连接方式把多张表重新组成一张新表对数据做处理

连接查询分类

按功能分类

内连接

1.等值连接:使用相等判断做连接条件

2.非等值连接:连接条件不是相等判断

3.自连接:  自己连接自己,把1张表当做2张表(需要给表定义别名)

语法格式 

SELECT  字段列表

FROM  表1  别名

INNER JOIN  表2  别名  ON 连接条件  INNER JOIN  表3  别名  ON 连接条件

[WHERE 筛选条件]

[GROUP BY 分组]

[HAVING 分组后筛选]

[ORDER BY 排序列表]

外连接

左外连接   LEFT JOIN      

左边表的记录全都显示出来 右边的表只显示与条件匹配记录,右边表比左边表少的记录使用NULL匹配

右外连接 RIGHT JOIN  

右边表的记录全都显示出来 左边的表只显示与条件匹配记录,左表比右边表少的记录使用NULL 匹配

全外连接(mysql不支持,可以使用UNION实现相同的效果) :合并查询结果

交叉连接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值