mysql常用问题笔记
行转列,列转行
DROP TABLE IF EXISTS `TabName`;
CREATE TABLE `TabName` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(20) DEFAULT NULL,
`Date` date DEFAULT NULL,
`Scount` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO `TabName` VALUES ('1', '小说', '2013-09-01', '10000');
INSERT INTO `TabName` VALUES ('2', '微信', '2013-09-01', '20000');
INSERT INTO `TabName` VALUES ('3', '小说', '2013-09-02', '30000');
INSERT INTO `TabName` VALUES ('4', '微信', '2013-09-02', '35000');
INSERT INTO `TabName` VALUES ('5', '小说', '2013-09-03', '31000');
INSERT INTO `TabName` VALUES ('6', '微信', '2013-09-03', '36000');
INSERT INTO `TabName` VALUES ('7', '小说', '2013-09-04', '35000');
INSERT INTO `TabName` VALUES ('8', '微信', '2013-09-04', '38000');
SELECT Date ,
MAX(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
MAX(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信
FROM TabName
GROUP BY Date
统计分段
SELECT count(*) as '人数' ,age as '年龄段' from
(
SELECT
case s
)
a GROUP BY age
UNION用的比较多union all是直接连接,取到得是所有值,记录可能有重复 union 是取唯一值,记录没有重复
select 1 要求返回的结果是多个行,而不是具体的内容,与内容无关
not exists 比 not in 效率高,如果查询语句使用了not in 那么内外表都进行全表扫描,没用到索引,而not exists
的子查询依然能用到表上的索引,所以无论那么表大,用not exists 都比not in 要快
replace 字符串
SELECT replace('www.mysql.com’,’w’,’a’)返回 aaa.mysql.com
SELECT truncate(1.224,2) 返回1.22 后面的2是确定返回的小数点后面的有效数字
dayofweek(date)
SELECT EXTRACT(month from last_activity_date) month from account 提取月份的函数
子查询是指包含在另一个查询中的查询,子查询可以出现在select 语句中的各个部分并且被包含在圆括号中,
在from子句内,子查询的作用是根据其他子查询产生临时表
char 长度是固定的 varchar长度是变长的
truncate 删除表中的数据,但是结构没有破坏, delete是从一个表中删除某一行,执行速度 drop>truncate>delete
触发器是指一段代码,当触发某个事件时,自动执行这些代码,六种触发器:
before insert,after insert,before update ,after update ,before delete ,after delete
如何查询第n高的工资
select distinct(salary)from employee order by salary desc limit n-1,1
事务的四大特性,以及隔离级别
一数据库必须具备的四个特性
1:原子性 事务包含的所有操作要么全部成功,要么全部失败回滚,成功必须要完全应用到数据库,失败则不能对数据库产生影响
2:一致性:事务执行前和执行后必须处于一致性状态
3:隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要互相隔离
4:持久性:一个事务一一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事务的操作
*field 函数
SELECT * from test ORDER BY FIELD(id,1,3,5,2,4,6);按照指定的顺序排序,个人认为比case when 好用
SELECT `ID` FROM wp_posts WHERE `ID` in (1,2,3,4,5) ORDER BY FIND_IN_SET(`post_title`,'A,B,C,D,E')
*用case when 按照指定顺序排序
select * from test order by(
case
when id=1 then 1
when id=2 then 2
when id=3 then 3
when id=4 then 4
when id=5 then 5
else 6
end
)
终端进入数据库
/usr/local/MYSQL/bin/mysql -u root -p
password root