一、mysql8的安装
mysql镜像下载地址:
MySQL :: Download MySQL Community Server
下载页面如图所示:
1.1 安装之前环境的检查
以下载bundle.tar包为例进行安装。
在安装之前先检查系统是否已经安装过mysql,其命令如下:rpm -qa|grep mysql,如果存在使用 yum remove 命令进行下载,然后再安装。
1.2 安装mysql
解压上传到系统上的tar包,进入到解压后的目录执行下面两个命令进行安装
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
其他的rpm包可根据实际情况选择是否安装,其安装方法同上。
1.3 启动mysql
systemctl start mysqld
systemctl status mysqld 可查看mysql的状态
systemctl enabled mysqld 可设置为开机自启动
1.4 查看初始密码
cat /var/log/mysqld.log 可查看文件内容
cat /var/log/mysqld.log | grep password 可直接查看初始密码
1.5 修改初始密码并授权远程连接
首先查看密码策略:show variables like '%password%';默认是高等级,可以通过
set global validate_password_policy=LOW;降低密码强度。修改密码的限制位数通过 set global validate_password.length=4;将密码的长度改为最低4位。
修改密码的命令为:alter user 'root'@'localhost' identified by ‘password’;
授权可以通过远程工具进行连接的命令为:grant all on . to 'root'@'%' identified by 'root';
这里的'%'表示任意的ip都可以两节,也可以指定特定的ip才能连接。
1.6配置文件
mysql的配置文件,名称为 my.ini或者my.cnf,如果在mysql的安装目录不存在该文件,可以自行创建,当要对mysql进行一些配置的时候,可以在文件中进行配置,其在mysql服务启动时,会自动读取该文件。
二、mysql常用的SQL表达式
2.1 select 语句表达式
select 表达式 from 表名 [where 条件] [group by 条件] [having 条件] [order by 条件] [limit 条件]
其执行顺序如下:
2.2 子查询
在一个表达式中调用另一个表达式,被调用的表达式就成为子查询
2.3 表连接
当不同表的数据组合到一张表中时就叫表的连接
sql当中使用 join ....on...语句进行不同表之间的连接。
根据使用方法的不同又分为了内连接和外连接。外连接又分为了左外连接、右外连接、全连接。
内连接: inner join ... on ...;如果直接使用join ... on...表示的也是内连接。
左外连接: left outer join ... on...
右外连接: right outer join ... on ...
对于外连接和内连接在使用都可以省略其 outer 或者 inner
自然连接:对于多个连接且连接列中的名字相同,且只有一个连接列(on后面的列条件只有一个且相同),则可以使用自然连接。语法如下:table1 natural join table2
在连接当中,附加条件(非连接条件)在where当中和 on 中的区别:
两个例子sql如下:
select t.PLAYERNO ,t.TEAMNO ,p.PAYMENTNO from teams t left join penalties p on t.PLAYERNO =p.PLAYERNO
where DIVISION = 'second'
select t.PLAYERNO ,t.TEAMNO ,p.PAYMENTNO from teams t left join penalties p on t.PLAYERNO =p.PLAYERNO
and DIVISION = 'second'
第一个sql分析: 首先根据 on后面的连接条件筛选出符合条件的数据;
然后where根据上一步中的结果再次进行筛选。
第二个sql分析:首先根据 on后面的连接条件筛选出符合条件的数据;
第二步:由于没有where条件且使用得是外左连接,因此在select时会把team表中筛掉的数据重新补充上来。
2.4 where表达式
1、where中可以使用一个标量子查询作为条件(只返回一行作为结果,且只包含一个值才行)
2、exists:是否存在,表示检查是否有一个非空结果,只包含一个exists运算符的条件,如果非空返回true,否则返回false。在带有exists运算的条件中,mysql关注的是其是否有结果返回,而不关注其返回的内容
2.5 case表达式
形式一: case 表达式 when 条件 then 值1 else 值2 end
形式二: case when 条件 then 值1 when 条件 then 值2 end
2.6 常用函数
2.6.1聚合函数
一个select子句如果包含一个聚合函数,这个表达式最终只会产生一行作为结果。
使用规范:当使用的表达式不包含group by时:只产生一行作为结果;嵌套聚合函数不允许;select语句中包含了聚合函数,则select中的列指定,只能出现在聚合函数中。
count(*):统计表中总共有多少行的记录数;count(列名):统计指定列中不包含空值的记录数
max/min:如果给定的一行中的一个列只有空值,则函数的值为空值;在空结果上执行,其函数值为空值。
sum/avg:
group_concat: 将属于同一个组中的指定列的值以逗号连接起来,表示一个字符串;其字符串长度有限制,系统变量group_concat_max_len表示最大长度,标准值是1024,可通过set语句调整。
2.6.2 其他函数
concat(str1,str2):拼接两个字符串
now():获取当前时间
datediff(日期1,日期2):计算两个日期之间的天数差
year(日期1):提取年
month(日期1):提取月
day(日期1):提取日
2.7关键字
distinct:可以用来去重,其针对的是整行,而不是紧跟在其后的表达式
2.8 group by子句
1、对单列分组
2、对多个列分组:当这几个列的值都相同的一行才会被分成一组。
3、表达式分组
4、having子句常于group by子句配合使用,选择其中的一行,但也可以单独使用,此时会将表中的所有行分为一行。having子句中指定的列必须在聚合函数中或者在group by子句中
2.9 limit子句
格式一: limit n: 获取前n行记录,当有排名相同时,如果不指定选取哪几行,mysql会从中随机选取。
格式二: limit m,n(limit n offset m);跳过前m行从m+1行开始,选择n行
2.10 更新语句
方式一:insert into 表名(字段名1,字段名2,....) values(值1,值2,...)
方式二:insert into 表名(字段名1,字段名2,....) values(值1,值2,...),(值1,值2,...),...
方式三:通过一张表中的数据,填充另一张表中的数据:insert into 表名(字段1,字段2,...) select 字段1,字段2,... from 表名 [where 条件]
方式四: update 表名 set 字段1=值1,字段2=值2 [where 条件]
方式五:多个表更新:update 表1,表2 set 表1.字段名=值1,...,表2.字段名=值2,... [where 条件]
方式六:替代并更新(此时,如果主键冲突,则会使用新值覆盖旧值): replace into 表名(字段名1,字段名2,....) values(值1,值2,...)
方式七:delete from 表名 [where 条件];它也可以一次性删除多张表,其用法和update类似。
方式八:当表中的数据较多时,要删除一个表中的数据时使用 truncate更好。
方式九:在插入时如果存在该记录就更新(前提:有唯一键):insert into 表名(字段1,字段2,...) values(值1,值2,...) on duplicate key update 字段1=值1,字段2=值2...
三、其他操作
3.1用户变量--set命令
命名格式一: set @变量名=值,其中@符号是必须的,用来区分系统变量和列名。
命名格式二:select @变量名:=值
用户变量只能在同一个会话当中使用,如果该会话销毁,用户变量也会销毁。
系统变量也用此命令操作
3.2 表操作
表的重命名:
方式一:rename table old_table to new_table
方式二:alter table old_table to new_table
删除表:drop table 表名
添加一列:alter table 表名 add [column] 字段名 类型 [约束]
修改列名(属性): alter table 表名 change [column] 旧字段名 新字段名 类型 [约束];
修改属性: alter table 表名 modify [column] 字段名 新类型
删除一列: alter table 表名 drop [column] 字段名
添加约束: alter table 表名 add constraint 约束名 约束关键字(列名);
删除约束:alter table 表名 drop constraint 约束名;
新建索引:create index 索引名 on 表名(列名)
删除索引:drop index 索引名 on 表名;
添加用户:create user 用户名@ip indentified by 密码;如果Ip为%表示任意ip都可以
删除用户: drop user 用户名@ip
修改用户名:rename user 用户名@ip to 用户名@ip:
修改密码:alter user 用户名@ip identified by 新密码'
赋予权限:grant [select|insert|update|drop|create|index|alter|all] on 表名 to 用户名@ip [with grant option 使用了此语句,表示该用户可以将自己的权限传递给其他人]
3.3 其他操作
1、show命令
show grants:查看拥有的权限
show variables:显示系统和用户变量
show [full] columns from 表名:查看指定表中的(全)列信息
show index from 表名:查看指定表中的索引信息
show variables like '变量名':查看指定变量的信息
show variables like 'log_bin':是否开启binlog日志
show table status:查看当前库下所有表的信息
select * from information_schema.tables:查看所有表的信息
其中information_schema库中存有mysql的表,列,数据库等的元信息
2、describe命令
describe 表名:查看指定表中的列信息
四、数据库中的常见术语
4.1 数据定义语言(Data Definition Language DDL)
影响数据对象结构的SQL语句语句,例如 create table,create view,create Index, drop table等。
4.2 数据操作语言(Data Manipulation Language DML)
查询或改变表中内容的语句,例如 insert,select update等。
4.3 数据控制语言(Data Control Language DCL)
与数据的安全性和权限有关,例如 grant语句等。
五、忘记root登录密码时如何登录mysql
1、修改mysql配置文件 my.cnf,在mysqld块中添加 skip-grant-tables,然后保存,重启mysql服务
2、免密登录后,修改root用户密码,然后再将刚才密码登录的语句注释,重启mysql,此时mysql又必须有密码才能登录。