-
MySQL的环境准备(win11环境)
- 安装mysql
-
mysql启动
- 在系统命令行中(管理员身份打开)
- 启动mysql
-
net start mysql80 - 关闭mysql
-
net stop mysql
-
配置环境变量
找到安装mysql的位置,复制路径
找到系统变量->path,点击新建,然后粘贴复制的路径
- 全部点击确定
-
-
测试
- 在终端中输入
-
mysql -u root -p
-
- 连接成功
-
表格结构
-
基本数据类型
| 类型 | 含义 |
| -------- | ---- | | INT | 整型 | | VARCHAR | 字符串 | | DOUBLE | 浮点型 | | DATETIME | 时间类型 | | BIGINT | 长整型 |
-
-
CURD
英文 中文 SQL HTTP CREATE 增加 INSERT POST READ 读取 SELECT GET UPDATE 更新 UPDATE POST DELETE 删除 DELETE DELETE -
CURD
-
创建表格
CREATE TABLE `user`( //创建名叫user的表格 `id` INT(10)NOT NULL,//创建字段 `mobile` VARCHAR(11) NOT NULL, `nickname` VARCHAR(40) NOT NULL, `gmt_created` datetime , `gmt_modified` datetime NOT NULL, PRIMARY KEY ( `id` )//约定主键 )ENGINE=InnoDB DEFAULT CHARSET=utf8;//约定存储引擎和编码格式-
删除表格
drop table table_name; //都行 DROP TABLE IF EXISTS table_name;-
INSERT
后续案例所用表格
INSERT INTO table_name(field1,field2,...fieldN) VALUES (value1,value2,...valueN); //example INSERT INTO `user` (`id`, `mobile`, `nickname`, `gmt_created`) VALUES (1, '13426069530', '叶冰', now()); //简化 INSERT INTO table_name VALUES (value1,value2,...valueN); //批量 INSERT INTO table_name VALUES (value1,value2,...valueN), (value1,value2,...valueN);-
SELECT
SELECT field1,field2,.... FROM table_name; //字段 //表名 //example SELECT id, hero_name FROM timi_adc; //查询全部字段 SELECT * FROM table_name;-
WHERE
SELECT * FROM table_name WHERE condition; //example SELECT* FROM timi_adc where win_rate > 0.5;-
LIMIT
SELECT * FROM table_name LIMIT parameter; //查询第6到第11行 SELECT* FROM timi_adc LIMIT 5, 6;// 第一个参数是从哪一行开始,第二个参数是数几个 //查询前5行 SELECT* FROM timi_adc LIMIT 5; //查询第五行 SELECT* FROM timi_adc LIMIT 4, 1;-
ORDER BY
SELECT * FROM table_name ORDER BY field_name; //按照win_rate排序 SELECT* FROM table_name ORDER BY win_rate; //按照win_rate排降序 默认是ASC SELECT* FROM timi_adc ORDER BY win_rate DESC;-
UPDATE
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 //example UPDATE timi_adc SET ban_rate = 0.01 WHERE hero_name = '艾琳';-
DELETE
DELETE FROM table_name [WHERE Clause] //example //删除id=4的数据 delete from user where id=4; //删除user所有数据 delete from user;-
优化查询
-
LIKE
%的位置会决定搜索结果的不同,%孙%示这个字符串含孙,孙%表示这个字符串以孙开头,%孙'表示这个字符串以孙结尾,
SELECT * FROM table_name WHERE condition LIKE condition; //包含孙 SELECT* FROM timi_adc WHERE hero_name LIKE '%孙%'; //孙开头 SELECT* FROM timi_adc WHERE hero_name LIKE '孙%'; //孙结尾 SELECT* FROM timi_adc WHERE hero_name LIKE '%孙'; //忘记第一个字 SELECT* FROM timi_adc WHERE hero_name LIKE '_尚香';-
AND/OR
SELECT * FROM table_name WHERE conditionA AND/OR condtionB;比如我们要查询timi adc表中胜率为百分之50%-51%或者胜率低于47%的英雄,那么我们可以这么写SQL:
SELECT* FROM timi_adc WHERE win_rate > 0.5AND win_rate < 0.51OR win_rate < 0.47; -
- 有时也需要加()分割
-
SELECT* FROM timi_adc WHERE ( win_rate > 0.5OR win_rate < 0.47 ) AND win_rate < 0.51; -
-
IN/NOT IN
-
-
SELECT * FROM table_name WHERE column IN (condtionA,condtionB); //要查询fever为T0和T3的 SELECT* FROM timi_adc WHERE fever IN ('T0', 'T3');
-
等价于
-
SELECT* FROM timi_adc WHERE fever = 'T0'OR fever = 'T3'; -
NOT IN子句就是在IN前面加一个NOT,NOT就是非的意思,相当于否定这个条件,比如我们要查询timi adc表中热度为TO以外英雄,那么我们可以这么写SQL:
-
SELECT* FROM timi_adc WHERE fever NOT IN ('T0'); -
NOT LIKE子句就是在LIKE子句前面加一个NOT,和NOT IN的用法很相似,比如我们要查询所有名字里面不带孙的英雄,那么我们可以这么写:
-
SELECT* FROM timi_adc WHERE hero_name NOT LIKE '%孙%'; -
-
NULL/NOT NULL
-
-
SELECT field_name1,field_name2 FROM table_name WHERE field_name2 IS NOT NULL/IS NULL;
- 我们根据语法,想要查询id,mobile,其中mobile不为NULL的数据,可以这么写SQL语句:
-
SELECT id, mobile FROM student WHERE mobile IS NOT NULL; -
-
MySQL字符串处理
-
-
-
CONCAT函数
-
-
SELECT column_name1,CONCAT(column_name2,str,column_name3),column_name4 FROM table_name;
- 比如现在我们想查询timi adc表中英雄的id,以及名字+胜率,我们可以利用concati函数,把结果的可阅读性变得更好
-
SELECT id, concat(hero_name, '的胜率是', win_rate) FROM timi_adc; - 配合WHERE语句
- 我们同样可以配合WHERE语句来使用CONCAT查询,比如在上面的例子中,我们想查询d=3的数据,那么我们可以这么写:
-
SELECT concat(hero_name, '的胜率是', win_rate) FROM timi_adc WHERE id = 3;
- 别名
- 我们优化拼接的结果,给他起一个别名,比如我希望查询结果的列名叫result,那么我们可以这么写:
-
SELECT concat(hero_name, '的胜率是', win_rate) as result FROM timi_adc WHERE id = 3; -
-
TRIM函数
-
- TRIM()函数的语法非常简单,就是把需要去除空格的数据放在TRIM()函数的空格里面,比如我们现在向timi adc中插入两条新的数据:
-
INSERT INTO timi_adc VALUES ( 20, ' 鲁班七号', 'T1 ', 0.5111, 0.2300, 0.0944, now(), now() ), ( 21, ' 后羿 ', 'QT1Q', 0.5111, 0.2300, 0.0944, now(), now() ); - 现在我们想要查询d为20的姓名和热度,我们期望去棹数据中的空格,我们可以这么写:
-
SELECTtrim(hero_name), trim(fever) FROM timi_adc WHERE id = 20;
- TRIM 并不会修改原数据修改原数据需要配合UPDATE/DELETE语句使用
- TRIM函数也可以精准的去掉前面或者后面的空格,或者其他的字符,语法如下:
-
TRIM( BOTH|LEADING|TRAILING removed_str FROM str);
- ·
- TRIM函数可以加上LEADING来只除去前面的空格,或者加上TRAILING来只除去后面的空格,如果都不加,则默认是BOTH。TRIM函数可以删除指定的字符串内容,如果不加,则默认删除空格。
- 比如我们要去掉id为21这条数据中fever)尾部的Q,那么我们可以这么写查询语句:
-
SELECTTRIM( TRAILING 'Q'FROM fever ) FROM timi_adc WHERE id = 21; -
-
REPLACE
-
- TRIM函数不能去掉字符串中间的值,如果要修改中间的值,我们可以使用REPLACE函数,它的语法如下:
-
UPDATE table_name SET colunm_name = REPLACE(column_name,string_find,string_to_replace) WHERE conditions;
-
Mysql关联查询
-
左连接
语法
SELECT*
FROM
TableA LEFT JOIN
TableB
ON condition;
- JOIN是关联查询的关键词,基础的结构是TableA JOIN TableB,即表A和表B关联查询,LEFT表示是左连接
- ON是关联查询的条件
左连接就是返回左表的所有数据,即使右表没有匹配的数据(此时右表会以NULL的形式匹配数据)。
-
右连接
语法
SELECT*
FROM
TableA RIGHT JOIN
TableB
ON condition;
多表关联查询
在实际应用中,我们有时候会对三张表以上进行关联查询,在这种情况下,我们往往会选中一张表作为主表,以它为基准,进行LEFTJOIN或RIGHT JOIN查询。
只会使用A LEFT JOIN B、A LEFT JOIN C。不要出现A RIGHT JOIN B、B RIGHT JOIN C这种情况
语法
SELECT*
FROM
TableA
LEFT JOIN TableB ON conditionA
LEFT JOIN TableC ON conditionB;