MySQL 常用开发技巧

MySQL 常用开发技巧

整理常用的 MySQL 开发技巧。

修改自增值

ALTER TABLE [NAME] AUTO_INCREMENT = 100;

正则查询大写字母

SELECT * FROM [TABLE] WHERE BINARY [FIELD] REGEXP '[A-Z]'

行列转换

1. 行转列

测试数据
表名:student_score
student_score

SQL 语句

SELECT
	name,
	SUM( CASE course WHEN 'Chinese' THEN score END ) AS 'Chinese',
	SUM( CASE course WHEN 'English' THEN score END ) AS 'English',
	SUM( CASE course WHEN 'Math' THEN score END ) AS 'Math' 
FROM
	student_score
GROUP BY
	name;

转换结果
结果

2. 列转行

测试数据
表名:permisson
permission
表名:sequence
sequence

SQL 语句

SELECT
	user,
	REPLACE (
		SUBSTRING(
			SUBSTRING_INDEX( auth, ',', a.id ),
			CHAR_LENGTH( SUBSTRING_INDEX( auth, ',', a.id - 1 ) ) + 1 
		),
		',',
		'' 
	) AS auth 
FROM
	`sequence` a
	CROSS JOIN (
	SELECT
		user,
		CONCAT( auth, ',' ) AS auth,
		LENGTH( auth ) - LENGTH( REPLACE ( auth, ',', '' ) ) + 1 size 
	FROM
	`permission` 
	) b ON a.id <= b.size;

转换结果
结果

删除重复数据

测试数据
表:user
测试数据

SQL 语句
利用 GROUP BYHAVING

SELECT
	name,
	COUNT(*) AS '重复次数' 
FROM
	`user` 
GROUP BY
name 
HAVING
	COUNT(*) > 1;

结果

删除重复数据,保留 ID 最大的

DELETE a 
FROM
	`user` a
	JOIN (
	SELECT
		name,
		COUNT(*),
		MAX(id) AS id 
	FROM
	`user` 
	GROUP BY
	name 
	HAVING
		COUNT(*) > 1 
	) b ON a.name = b.name 
WHERE
	a.id < b.id

测试结果
结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值