MySQL基础

#创建用户-权限管理
create user '用户名'@'host' identified by '密码';
--------------------------------------------------
#查看密码策略的相关信息
show variables like '%password%';
---------------------------------
#validate_password.policy 是密码策略,有 3 种
#(LOW,MEDIUM,STRONG),默认是 MEDIUM
通过执行以下格式的 SQL 语句,来改变密码策略
set global 策略类型 = 值
例如,修改 validate_password.policy 为 LOW,SQL 如下:
MySQL 高级 | 刘老师
set global validate_password.policy = 0;
那么我们如果想要设置 111111 为密码,就执行以下 SQL:
⚫ 密码策略设置为 LOW
set global validate_password.policy = 0;
⚫ 密码最小长度设置为 6
set global validate_password.length = 6;
⚫ 密码大小写字母设置为 0 个
set global validate_password.mixed_case_count = 0;
⚫ 密码特殊字符设置为 0 个
set global validate_password.special_char_count = 0;
----------------------------------------------------
#修改用户密码
alter user '用户名'@'主机名' identified by '新密码';
----------------------------------------------------
##刷新权限
flush privileges;
-----------------
#修改用户名
update mysql.user set user='新用户名' where user='旧用户名';
------------------------------------------------------------
#删除用户
drop user 用户名;
-----------------



ss




















#选择mysql数据库
USE mysql;
----------------------------
#在 mysql 数据库的 user 表中查看当前 root 用户的相关信息
SELECT host,user FROM user;
--------------------------------
#授权 root 用户的所有权限并设置远程访问
GRANT ALL ON *.* TO 'root'@'%';
---------------------------------
#上述报错则使用
update user set host='%' where user ='root';
-----------------------------------------------
#刷新命令,使修改生效
flush privileges
------------------
#更改加密方式:
alter user '用户名'@'主机名' identified by '密码'
password expire never;
--------------------------------------------------
#更新用户密码:
#mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8
#之后的加密规则是caching_sha2_password
alter user '用户名'@'主机名' identified with mysql_native_password
by '密码';
-------------------------------------------------------------------
#刷新权限
flush privileges;
=====================
#1)查询所有的数据库
show databases;
-----------------
#2)创建数据库的SQL 语句
create table 数据库名 default character set 字符编码
collate 字符编校验规则
----------------------------------------------------
#3)修改数据库的字符编码
alter database 数据库名 default character set 字符编码
-------------------------------------------------------
#4)删除数据库
delete database 数据库名
------------------------
#5)切换操作的数据库
use 数据库名
------------
------------
#整型(存整数的)
tinyint             1个字节 范围(-128~127)
smallint         2个字节    范围(-32768~32767)
mediumint     3个字节    范围(-8388608~8388607)
int         4个字节    范围(-2147483648~2147483647)
bigint         8个字节    范围(±9.22*10的18次方)
------------------------------------------------
#浮点型(存小数)
float(m,d)     单精度浮点型 8位精度(4字节)m整数个数,n小数位
double(m,d)     双精度浮点型 16位精度(8字节)m整数个数,n小数位
-------------------------------------------------------------
#定点数(存储精确的数值)
decimal(m,d)     定点数 m<65总个数,d<30 且 d<m个小数位
----------------------------------------------------
#字符串(存文本数据类型)
char(n)         固定长度,最多255个字符串
varchar(n)    固定长度,最多65535个字符串
tinytext(n)    可变长度,最多255个字符串
text        可变长度,最多65535个字符串
mediumtext     可变长度,最多2的24次方-1个字符串
longtext         可变长度,最多2的32次方-1个字符串
----------------------------------------------
#二进制数据(存图片、视频等)
tinyblob         可变长度,最多255个字符串
blob         可变长度,最多65535长文本数据
mediumblob     可变长度,最多2的24次方-1个字符串
longblob         可变长度,最多2的32次方-1个字符串
---------------------------------------------
#日期时间类型
date         日期'2008-12-2'
time         时间'12:00:22'
detemie         日期时间'2008-02-2 12:22:10'
timestamp     自动存储记录修改时间
---------------------------------
#查看当前数据库的所有表
show tables;
#创建表
create table 表名(
    字段名 字段类型 not null auto_increment,
    字段名 字段类型,
    ....,
    primary(字段名)
);
--------------------
#1)给表添加一个字段
alter table 表名 add column 字段名 字段类型;
--------------------------------------------
#2)给表添加多个字段
alter table 表名 add 字段名 字段类型,字段名 字段类型,....;
-----------------------------------------------------------
#3)修改字段数据类型
alter table 表名 modify column 字段名 字段类型;
-------------------------------------------------
#4)修改字段的名称
alter table 表名 change column 原字段名 新字段名 字段类型;
----------------------------------------------------------
#5)删除表的一到多个字段
alter table 表名 drop column 字段名,drop column 字段名....;
------------------------------------------------------------
#6)修改表名
alter table 原表名 rename to 新表名;
-------------------------------------
#删除表
drop table 表名;
-----------------
#查看表结构
describe lucy;
---------------
---------------
#查询表的所有数据
select * from 表名;
--------------------
#1)单条全量插入数据
insert into 表名 values (字段1 值,字段2 ,值,...,字段n ,值);
------------------------------------------------------------
#2)单条指定字段插入数据
insert into 表名 (字段1,字段2,...,字段n) values (字段1 的值,字段2 的
值,...,字段n 的值);
insert into 表名 (字段1,字段3,字段5) values (字段1 的值,字段3 的值,字
段5 的值);
---------------------------------------------------------------------
#3)批量插入数据
insert into 表名 values
(字段1 的值,字段2 的值,...,字段n 的值),
(字段1 的值,字段2 的值,...,字段n 的值),
...;
---------------------------------------
#1)修改一到多个指定字段的所有行的值
update 表名 set 字段名 = 值,字段名 = 值,...;
---------------------------------------------
#2)按条件修改指定字段的值
update 表名 set 字段名 = 值 where 字段名 = 值;
-----------------------------------------------
#3)按条件修改一到多个指定字段的所有行的值
update 表名 set 字段名 = 值,字段名 = 值,... where 字段名 = 值;
---------------------------------------------------------------
#1)按条件删除
delete from 表名 where 字段名 = 值;
------------------------------------
#2)整体删除,删除表当前的所有行数据
delete from 表名
-----------------
-----------------
#1)查询所有列
select * from 表名;
-------------------
#2)查询指定的列
select 字段,字段,...,字段 from 表名;
-------------------------------------
#3)给查询的指定列取一个别名
select 字段名 as 别名,字段名 as 别名.... from 表名;
-----------------------------------------------------
#4)合并列查询
select CONCAT(class,'-',name,'-',age,sex) '班级-姓名' from student;
-------------------------------------------------------------------
#5)查询时添加常量列
select name, age, (servlet + jsp) '总成绩', class, '光明小学' from
student;
---------------------------------------------------------------------
#6)去除某个列重复数据
select distinct 字段名 from 表名;
----------------------------------
————————————————————————————————————————————————————————————————————
#条件查询
select 字段,字段,...,字段 from 表名 where 查询条件;
---------------------------------------------------
#比较条件
---------------------------------------------
 符号                 含义
---------------------------------------------
    =                     等于
 !=                     不等于
    >                     大于
    <                     小于
    >=                     大于等于
    <=                     小于等于
 between and     a和b 两个值之间,包含a 和b
---------------------------------------------
#逻辑条件
-----------------
    符号         含义
-----------------
    and         并且
    or             或者
-----------------
#判空条件
-----------------------------------------------
    符号                     含义
-----------------------------------------------
    =''                     是空字符串''
    is nul                 是null 值
    is not null     不是null 值
    <>                         不是,非
    <>''                     不是空字符串'',也不是null 值
-----------------------------------------------
#模糊条件
---------------------
    符号                 含义
---------------------
    like                 包含
    not like         不包含
 --------------------
#聚合查询
---------------------
    函数         含义
---------------------
    sum         求和
    avg         求平均数
    max         最大值
    min         最小值
    count     计数
---------------------
#排序查询
---------------------------------------------
    排序                                 含义
---------------------------------------------
    order by 字段             正序
    order by 字段 asc     正序,正序可以省略asc
    order by 字段 desc     倒序
---------------------------------------------
#分页查询
limit 偏移量,步长
limit 步长,这种写法是默认偏移量的值是0
---------------------------------------------
#分组查询
group by 字段 [筛选条件having]
-------------------------------
——————————————————————————————————————————————————————————————————
#case 流程控制函数
CASE
WHEN 条件 THEN 需求
WHEN 条件 THEN 需求
WHEN 条件 THEN 需求
……
ELSE 需求
END
-------------------------------
#IF()函数
IF(条件,正确,错误)
-------------------
#字符串的集合操作ELT(把数值的值转化为中文)
ELT(N,str1,str2,str3,...)
==========================
#默认值
字段名 数据类型 DEFAULT 'xxx' -- 默认值
-----------------------------
#非空-限制字段必须有值
字段名 数据类型 NOT NULL
-------------------------
#唯一-字段的值不能重复
字段名 数据类型 UNIQUE
-----------------------
#主键-非空+唯一,加快查询效率
字段名 数据类型 PRIMARY KEY -- 主键
----------------------------
#自增长-字段的值自动递增
字段名 数据类型AUTO_INCREMENT
-----------------------------
#外键-约束两种表的数据
CONSTRAINT 外键名(自定义) FOREIGN KEY(外键字段,就是本表中要被外
键约束的字段名) REFERENCES 参考表(参考字段)
-----------------------------------------------------------------
#设置级联修改:
ON UPDATE CASCADE
-----------------
#设置级联删除:
ON DELETE CASCADE
==================
#子查询-就是查询中嵌套查询
select (字段名或者一个select 子查询语句) from 表A where 字段名 = (字
段值或者一个select 子查询语句)
#IN
where 字段名 in (值,值,值,....,值)
where 字段名 in (select 子查询单个字段值结果集)
-----------------------------------------------
#not in
where 字段名 not in (值,值,值,....,值)
where 字段名 not in (select 查询单个字段值结果集)
-------------------------------------------------
#EXISTS()查询返回一个布尔值true 或flase,
#它只在乎EXISTS()的查询中是否有记录,与具体的结果集无关
SELECT 字段 FROM 表名 WHERE EXISTS(子查询);
-------------------------------------------
#not exists 与exists 的逻辑相反
SELECT 字段 FROM 表名 WHERE NOT EXISTS(子查询);
------------------------------------------------
#多表关联查询
INNER JOIN --内连接
LEFT JOIN --左外连接查询
RIGHT JOIN --右外连接查询
join 查询中使用 USING
----------------------
#UNION 合并多个select 查询的结果集
SELECT * FROM 表1 UNION SELECT * FROM 表2 ...
UNION SELECT *FROM 表n
----------------------------------------------
#存储过程
delimiter $
create procedure 函数名(IN 参数名 数据类型,参数名 数据类
型...,OUT 参数名 数据类型....,INOUT 参数名 数据类型....)
begin
    条件
end $
---------
#设置接收输出结果的参数
set @变量名 := '内容';
----------------------
#执行存储过程
call 函数名();
--------------
#查看输出的结果
select @变量名;
---------------
#存储过程中使用内部变量(举例)
delimiter $
CREATE PROCEDURE pro_printstr(IN s VARCHAR(50))
BEGIN
#定义存储过程的内部变量
    DECLARE str VARCHAR(50) DEFAULT null;
        SET str = CONCAT(s,'!!');
            #用select 变量,相当于打印
                SELECT str;
END $
--------------------------------------------
#执行
call pro_printstr('hello word')
--------------------------------
#使用into 把查询的结果赋值给变量(举例)
delimiter $
CREATE PROCEDURE pro_areaname(IN c VARCHAR(10),OUT res
VARCHAR(20))
BEGIN
SELECT name INTO res FROM area where code = c;
END $
-----------------------------------------------
#执行
SET @area_name := '';
CALL pro_areaname('0002',@area_name);
SELECT @area_name;
-------------------------------------
#存储过程中的流程控制
1.IF ... THEN ... ELSE ... END IF --如果,否则
2.WHILE ... DO ... END WHILE --循环遍历
#1.if举例
delimiter $
CREATE PROCEDURE pro_abs(IN i INT(10),OUT m INT(10))
BEGIN
IF i < 0 THEN
SET m = i*(-1);
ELSE
SET m = i;
END IF;
END $
----------------------
#1.执行
SET @num := 0;
CALL pro_abs(9,@num);
SELECT @num;
----------------------
#2.while举例
delimiter $
CREATE PROCEDURE pro_addnum(IN n INT(2),OUT res INT(4))
BEGIN
#定义存储过程的内部变量
DECLARE i INT(2) DEFAULT 1;
DECLARE r INT(4) DEFAULT 0;
WHILE i <= n DO
SET r = r + i;
SET i = i + 1;
END WHILE;
SET res = r;
END $
-------------------
#2.执行
SET @num := 0;
CALL pro_addnum(3,@num);
SELECT @num;
--------------------
#查看存储过程列表
SHOW PROCEDURE STATUS;
----------------------
#删除存储过程
DROP PROCEDURE 存储过程名;
==========================
#触发器
监视地点(table)
监视事件(insert/update/delete)
触发时间(after/before)
触发事件(insert/update/delete)
-------------------------------
#触发器的创建与使用
create trigger 触发器名
    after/before [insert/update/delete] on 表名
        for each row; #这句话在mysql 是固定的
begin
    执行的SQL条件语句; #要触发的表
end;
------------------------------
#删除触发器
DROP TRIGGER 触发器名;
======================
#自定义函数
create function 函数名(变量名 数据类型,变量名 数据类型...) returns 数据
类型
begin
    sql 语句;
        return 值;
end;
-------------
#1.举例-查询student 表有多少条数据
CREATE FUNCTION fn_getcount() RETURNS INT
BEGIN
DECLARE i INT(10);
SELECT count(id) INTO i FROM student;
RETURN i;
END;
#执行函数
SELECT fn_getcount(1);
------------------------------------
#在MySQL 中创建函数时出现这种错误的解决方法:
1.在mysql 数据库中执行以下语句 (临时生效,数据库重启后失效)
SET GLOBAL log_bin_trust_function_creators = 1;
2.在配置文件/etc/my.cnf 的[mysqld]配置
log_bin_trust_function_creators=1
-------------------------------------------
#2.举例-查询student 表中某个班级有多少学生
CREATE FUNCTION fn_getcount_byclasses(c VARCHAR(10))
RETURNS INT
BEGIN
DECLARE i INT(10);
SELECT count(id) INTO i FROM student WHERE classes = c;
RETURN i;
END;
#执行函数
SELECT fn_getcount_byclasses('一班');
--------------------------------------
#3.举例-自定义计算绝对值的函数
CREATE FUNCTION fn_abs(i INT) RETURNS INT
BEGIN
DECLARE res INT;
IF i < 0 THEN
SET res = i*(-1);
ELSE
SET res = i;
END IF;
RETURN res;
END;
#执行
SELECT fn_abs(-11);


posted @ 2022-04-28 08:26  王小瘦的园子  阅读(19)  评论(0编辑  收藏  举报