侧边栏壁纸
博主头像
码途 博主等级

行动起来,活在当下

  • 累计撰写 72 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

mysql-笔记

htmltoo
2023-12-12 / 0 评论 / 0 点赞 / 65 阅读 / 0 字

1-基础命令

create database-建库

create database db_name

use-用库

use db_name

create table-建表

create table table_name{ 列字段描述}

insert into-插值入表

insert into table_name values (一行记录) ...

select-查表中记录

select fieldname1,fieldname2,* from table_name

alter-表中增新列

alter table table_name add 列字段描述

update-更新字段

update table_name set 列字段名= 赋值 where 条件

alter-删除表中一列

alter table table_name drop column 列字段名

delete-删除表中行

delete from table_name where 条件

drop-删除表

drop table table_name

alter-更改某一列的数据类型

alter table table_name alter column 列字段描述

select-查看特殊行

select top 百分比 percent * from table_name

select-查看特殊列

select fieldname1, fieldname2 from tablename order by columnnumber desc

select-创建临时表

select distinct fieldname1,fieldname2 into temp from tablename order by fieldname1

select-字段的字符串匹配

select * from tablename where 列字段名 like 'r%'

select-字段匹配

select * from table_name where 列字段名 in (数据列表)

select-范围搜索

select * from table_name where 列字段名 > 目标

select-判断字段是否为空

select * from table_name where 列字段名 IS NOT NULL

select-区间搜索

select * from table_name where 列字段名 between 边界下限 and 边界上限

select-计数

select count(*) as 定义别名 from table_name where 条件

select-求和/平均值

select sum/average(列字段名) as 定义别名 from table_name where 条件

select-求极值

select max/min(列字段名) as 定义别名 from table_name where 条件

select-条件过滤

select * from table_name where 条件1 group by 列字段名 having 条件2 order by 条件3

select-日期转换

SELECT CAST('2023-10-20 00:00:00.000' AS date) ;

SELECT CONVERT(date,'2023-11-22 00:00:00.000')

select-条件语句

select * when case1 then result1when case2 then result2else result3from table_name where 条件

字符串处理

TRIM,LTRIM,RTRIM,REPLACE,Substring,LOWER,UPPER

查询嵌套

在 select 、from、where 中使用 select 语句

PROCEDURE-存储过程创建与使用

CREATE PROCEDURE procname 目标语句;exec procname 条件

2-说明

2.1-SELECT

length

-删除少于字符数100的记录
SELECT * FROM dr_1_news_data_1 WHERE LENGTH(content) <= '100';
SELECT * FROM dr_1_news WHERE LENGTH(keywords) <= '20' 
delete from dr_1_news_data_1 where id in (111233,111237,111248,111250,111277,111473,111747,111751,111887,112199,112252,112278,112282,112309,112314,112333,112352,112386,112387,112423,112447,112457,112510,112625,112637,112639,112700,112707,112708,112709,112712,112724,112736,112764,112766,112787,112830,112842,112878,112974,112989,112999,113014,113037,113051,113069,113072,113121,113168,113258,113428,114018,116212,116710,116725,117939,118855,123716);

2.2-UPDATE

replace

update dr_1_page set content=replace(`content`,'原来的域名', '现在的域名');

2.3-TEMPORARY TABLE-临时表

CREATE TEMPORARY TABLE temptablename

3-提升MySQL效率

INDEX-高效索引

索引可以加快数据检索速度,使查询更加高效

众所周知,索引可以大幅提高SQL查询的性能,但索引的数量并不是越多越好

单个表中的索引数量应尽量控制在5个以内,单个索引中的字段数量也不应超过5个

CREATE INDEX 索引名 ON 表名 (列名);

CREATE INDEX idx_username ON users (username);
-复合索引
CREATE INDEX idx_name ON customers (first_name, last_name);

PROCEDURE-存储过程

存储过程支持封装SQL逻辑,使代码的维护和执行更具可管理性

DELIMITER //
CREATE PROCEDURE GetAllUsers()
BEGIN
SELECT * FROM users;
END //
DELIMITER ;

TRIGGER-触发器

触发器可以在特定数据库事件发生时自动执行动作

-可以使用触发器记录对表的更改
DELIMITER //
CREATE TRIGGER log_changes
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
  INSERT INTO audit_log (product_id, action) VALUES (OLD.id, 'update');
END //
DELIMITER ;

INNER JOIN-连接查询

了解不同类型的连接查询以及何时使用它们对于检索相关数据十分必要

-内连接查询的常见示例
DELIMITER //
CREATE TRIGGER log_changes
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
  INSERT INTO audit_log (product_id, action) VALUES (OLD.id, 'update');
END //
DELIMITER ;

VIEW-视图

视图是简化复杂查询的虚拟表,对于总结数据或创建可重用的查询模板很有用

CREATE VIEW top_selling_products AS
SELECT product_id, COUNT(*) AS sales
FROM order_details
GROUP BY product_id
ORDER BY sales DESC;

EXPLAIN-查询优化

MySQL的EXPLAIN语句可以帮助分析查询性能。它提供了MySQL执行查询的见解,让开发者能够优化查询以获得更好的速度

EXPLAIN SELECT * FROM products WHERE price > 50;

TRANSACTION-事务

事务是一种重要的数据库管理概念,它确保数据的完整性和一致性。通过将一系列SQL语句作为一个单元来执行,事务要么全部成功完成,要么完全回滚以保持数据的一致性

START TRANSACTION;
-- 这里是SQL语句
COMMIT;

GRANT-用户权限

为数据库用户授予适当的权限对于安全性非常重要。使用GRANT语句指定用户可以执行的操作

GRANT SELECT, INSERT ON database_name.* TO 'username'@'localhost';

REGEXP-正则表达式

MySQL支持正则表达式,可用于强大的模式匹配。以下是个简单示例:

SELECT * FROM products WHERE product_name REGEXP '^A';

mysqldump-备份和恢复数据

定期进行备份很重要。MySQL提供了诸如mysqldump用于备份和mysql用于恢复数据的工具

# 备份
mysqldump -u username -p database_name > backup.sql
# 恢复
mysql -u username -p database_name < backup.sql

4-SQL语句的执行顺序

  • FROM 子句

  • WHERE 子句

  • GROUP BY 子句

  • HAVING 子句

  • SELECT 子句

  • ORDER BY 子句

5-使用UNION 的3种典型用法

结果并集,查看包括重复的记录:

select field1,field2 from tablename1 union all select field1,field2 from tablename2

结果交集,去重并展示相同的数据:

select field1,field2 from tablename1 intersect select field1,field2 from tablename2

结果补集,去除相同的数据:

select field1,field2 from tablename1 expect select field1,field2 from tablename2

简单而言,JOIN是用于连接表,而UNION是用于合并查询结果集。

6-join

left join:找到两个表的交集,并包含左表中剩余的数据。

inner join:找到两个表的交集数据。

-inner join的示例:
select o.id,o.code,u.name 
from order o 
inner join user u on o.user_id = u.id
where u.status=1;
如果两个表使用inner join关联,MySQL会自动选择两个表中的小表驱动大表,因此在性能上不会出现太多问题

-left join的示例:
select o.id,o.code,u.name 
from order o 
left join user u on o.user_id = u.id
where u.status=1;

-如果两个表使用left join关联,MySQL默认使用左连接关键字驱动右侧的表。
-如果左表中存在大量数据,则可能会出现性能问题。

-需要注意的是,在使用left join查询时,应该将小表放在左侧,将大表放在右侧。
-如果可以使用inner join,应尽量避免使用left join

7-SQL的运行顺序

from --> where -- > group by -- > having -- > select -- > order by -- > limit

8-常用知识

select

筛选的字段名称

from

后面跟数据库名称

where

条件筛选

distinct - 去重

select distinct name, age

select count(distinct name)

distinct - 去重

select distinct name, age

select count(distinct name)

limit

offset 跳过多少页

limit 限制多少条数据

用于SQL查询最后使用

select name from table order by age asc limit 1

order by - 排序

order by age desc # 年龄倒序

order by age asc # 年龄升序

group by - 分组(去重)

group by 用于数据分组展示

select name from table group by name

having

一般和 group by 连用

group by having

用于 数据 筛选

group by name having name = 'zs'

like

1.% (任意字符) 的用法 查询名字以 网结尾的 
%占位符表示0个或多个字符,可放在查询条件的任意位置

select 
	name 
from 
	table 
where 
	name like '%网'

2._的用法 查询四个字符,并且是以 abc结尾
_占位符表示一个字符,可放在查询条件的任意位置用法和%类似

select 
	str
from 
	table 
where 
	name like '_abc'
	
3.[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符
like’[CK]ars[eo]n’ 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
like’[M-Z]inger’ 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。

4.[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符
like’M[^c]%’ 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。

5.* 它同于DOS命令中的通配符,代表多个字符
c*c代表cc,cBc,cbc,cabdfec等多个字符。

6.?同于DOS命令中的?通配符,代表单个字符
b?b代表brb,bFb等

between and

SELECT * 
FROM 
	table_name
WHERE 
	date_column BETWEEN '1998-01-01' AND '2020-01-01';

not - in

select 
	emp_no 
from 
	employees  where emp_no not in (select emp_no from dept_manager)

or

select age from table  where age > 10 or age < 5

逻辑判断

select if(score>60, '及格', '不及格') as 标准 from table

聚合函数

sum() 求和
max() 最大值
min() 最小值
count() 计数
avg() 平均值
median() 中位数
stdev() 标准差

case when

select 
	name, 
	case when home = 'beijing' then 'shoudu' 
	case when home = 'beijing' then 'shoudu'
	end as shoudu_yes 
from 
	table

9-常见函数

求和函数
	sum() 

平均值函数 
	avg()
中位数函数 
	median()
标准差函数 
	stddev()
求最大值函数 
	max()
求最小值函数 
	min()
计数函数 
	count()
类型转换函数 
	cast(字段名 AS 格式类型 )
日期格式转换函数
	date_format(date,'%Y %m %d %H:%i %s')
返回统计的年份
	select YEAR('2020-10-10') from table  
返回统计的月份
	MONTH()  
返回统计的天
    DAY()  
返回小时值
    HOUR()  
返回分钟值
    MINUTE() 
返回秒数 
    SECOND()
全年第几周   
    WEEK()  
取年-月-日函数
    DATE()
    
计算时间差函数,interval代表指定的单位,常用可选:
	timestampdiff(interval,start_time,end_time) 
	YEAR 年数
	MONTH 月数
	DAY 天数(返回秒数差除以3600*24的整数部分)
	HOUR 小时(返回秒数差除以3600的整数部分)
	MINUTE 分钟(返回秒数差除以60的整数部分)
	SECOND 秒
	
两个日期相减,返回天数,大的值在前
	datediff(end_time,start_time)

两个日期相减,返回 time 差值(时分秒格式),大的值在前   
	timediff(end_time,start_time)

百分比格式表示
	CONCAT(字段名,'%')   
替换函数          
	replace(字符串,原字符,新字符) 

字符串的截取函数
	substring(字符串,起始位置,截取字符数)
	
四舍五入函数
 Round()  --将数值四舍五入为指定数值,用法:Round(数值,返回的小数位)

0

评论区