学习笔记
数据库
1 | net start mysql |
表
1 | select name, max(age) from user where name is not null group by name having max(age) > 12 order by max(age) limit 0,5 |
1 | 插入 |
1 | 查询 |
1 | 修改 |
1 | 删除 |
查看所有表
1 | show tables; |
查看表的相关信息
①查看表的结构
1 | desc user; |
②查看表创建时的信息
1 | show create table user; |
③查看表本身的相关属性
1 | show index from user; |
④查询数据库test中所有表的信息
1 | show table status from test; |
查询以user开头的表的状态
1 | show table status from test like 'user%'\G |
创建表:
创建user表
1 | create table user( |
创建class班级表
1 | create table class( |
判断sql语句检索效率:
1 | desc select * from user where username='user1'\G |
修改表名
将user表重命名为student表
1 | rename table user to student; |
清空表数据(不会清除表结构)
①清空表数据,不会清除自增(继续自增)
1 | delete from user; |
②清空表数据,会清除自增(重新开始自增)
1 | truncate table user; |
③删除表(删除后表不存在)
1 | drop table user; |
增-insert
- 向user表中插入数据
1 | -- value/values |
- 向class表中插入数据
1 | insert into class(name,master) values('Class1','Tom'); |
删-delete
1 | delete from user where username='user1'; |
改-update
1 | update user set password='456' where id=1; |
查-select
- 1、查询表中所有数据:
1 | select * from user; |
1 | select * from class; |
- ①查看表中某一列(属性)的值
1 | select username from user; |
- ②去重查询
1 | select distinct password from user; |
- ③模糊查询(查询username中含有user的行)
1 | select * from user where username like '%8'; |
- ④起别名
1 | select username 用户名,password 密码 from user; |
2、查看表中值(不)为null
1 | select * from user where password is (not) null; |
3、查看表数据满足条件为…
1 | select * from user where id<=3; |
1 | select * from user where username='user1'; |
1 | select * from user where id>=3 and id<=8; |
1 | select * from user where id=3 or id=8 or id=10; |
1 | select * from user where username='user1'and password=123; |
4.将表中的值按一定顺序排列。(desc降序,asc升序)
1 | select * from user order by id; |
1 | select * from user order by username desc,password asc; |
5、limit限定查询数据条数(分页实现)
①查询前3条数据
1 | select * from user limit 3; |
②从第4条数据开始查询五条数据
1 | select * from user limit 3,5; |
6、concat字符串连接函数
1 | select concat('用户名:',username) name from user; |
1 | select concat('用户名:',username) usn,concat('密码:',password) pwd from user; |
将id加1然后查询
1 | select (id+1) id from user; |
7、rand随机数函数
打印随机数
1 | select rand(); |
按随机数排序并取出第一条数据
1 | select * from user order by rand() limit 1; |
8、count统计数量函数
统计一个表的总行数
1 | select count(*) from user; |
统计符合条件(id>=5)的行数
1 | select count(*) from user where id >=5; |
9、sum求和函数
id求和并输出
1 | select sum(id) from user; |
10、avg求平均值函数
id求平均值并输出
1 | select avg(id) from user; |
11、max、min求最大、最小值函数
取id最大值并输出
1 | select max(id) from user; |
取id最小值并输出
1 | select min(id) from user; |
12、分组聚合
输出每个班的第一个人
1 | select * from user group by class_id; |
输出每个班的总人数
1 | select concat(class_id,'班') 班级,concat(count(*),'人') 人数 from user group by class_id; |
13.普通多表查询
查询每个班里每个人的具体情况
1 | select * from user,class where user.class_id = class.id; |
查询1班里每个人的具体情况
1 | select * from user,class where user.class_id = class.id and class.id = 1; |
14.嵌套查询或子查询
查询user表里每个班级的相关信息
1 | select * from class where id in (select distinct class_id from user); |
(普通多表查询实现相同功能)
1 | select class.* from user,class where user.class_id = class.id group by class.id; |
15.连接查询
①左连接
总计每个班的总人数(要求班里没有人的也要显示)
1 | select class.name 班级, count(user.id) 人数 from class left join user on class.id = user.class_id group by class.id; |
②右连接
1 | select class.name 班级, count(user.id) 人数 from user right join class on class.id = user.class_id group by class.id; |
③内连接
1 | select user.username, class.name from user inner join class on user.class_id = class.id; |
(与普通多表查询一样)
1 | select user.username, class.name from user, class where user.class_id = class.id; |
1 | +----------+--------+ |
属性(字段)
删除某一属性(字段)
1 | alter table user drop username; |
为字段添加默认值
1 | alter table user alter age set default 20 |
删除字段的默认值
1 | alter table user alter age drop default |
修改列(属性)名
1 | alter table user change username newusername varchar(30) not null; |
将表中某一列某一数据改成另一数据
1 | update user set username='user7' where username='user1'; |
将表中某一列属性中,属性为某一数据的所在行删除(删除所有username=’Tom’的行)
1 | delete from user where username='Tom'; |
Mysql数据库优化
Mysql的基础操作
1.Mysql表复制(两步)
①复制表结构
1 | create table student like user; |
②复制表内容
1 | insert into student select * from user; |
2.Mysql索引
①查看索引
1 | show index from user\G |
②普通索引
创建
1 | create index i_age on user(age); |
删除
1 | drop index i_age on user; |
③唯一索引
创建
1 | create unique index u_username on user(username); |
删除
1 | drop index u_username on user; |
④主键索引
创建
1 | 创建表时直接在属性后加primary key |
删除
1 | alter table user modify id int not null;(先删除自增,若存在) |
3.Mysql视图(虚拟表,简化多次使用复杂的sql语句。表中数据发生变化时视图里的数据也会随之发生变化)
创建
1 | create view userclass as select user.username,class.name from user,class where user.class_id = class.id; |
删除
1 | drop view userclass; |
查看
1 | show tables; |
查看视图结构
1 | desc userclass; |
查看视图数据
1 | select * from userclass; |
4.Mysql内置函数
字符串函数:型
①字符串连接concat()
1 | select concat('Hello',' World'); |
②转换小写lcase()
1 | select lcase('HELLO WORLD'); |
③转换大写ucase()
1 | select ucase('hello world'); |
④长度length()
1 | select length('Hello World'); |
⑤去除左边空格ltrim()
1 | select length(ltrim(' Hello')); |
⑥去除右边空格rtrim()
1 | select length(rtrim('Hello' )); |
⑦重复repeat()
1 | select repeat('*',5); |
⑧替换replace()
1 | select replace('Hello World','Hello','Hi'); |
⑨截取substring()
1 | select substring('/www/root/php',5,4); |
1 | select substring('/www/root/php',6,4); |
⑩空格space()
1 | select concat('Hello',space(10),'World') space; |
数学函数:
①转换二进制bin()
1 | select bin(10); |
②取大于它的最小整数ceiling()
1 | select ceiling(10.4); |
③取小于它的最大整数floor()
1 | select floor(10.4); |
④最大值max()
1 | select max(id) from user; |
⑤最小值min()
1 | select min(id) from user; |
⑥平方根sqrt()
1 | select sqrt(100); |
⑦随机数rand()
1 | select rand(); |
随机排序
1 | select * from user order by rand(); |
日期函数:
①当前日期curdate()
1 | select curdate(); |
②当前时间curtime()
1 | select curtime(); |
③当前日期时间now()
1 | select now(); |
④当前时间戳unix_timestamp()
1 | select unix_timestamp(); |
⑤返回时间戳对应日期时间from_unixtime()
1 | select from_unixtime(1523969564); |
⑥返回第几周week()
1 | select week('2018-4-17'); |
⑦返回年数year()
1 | select year('2018-4-17'); |
⑧返回时间差datediff()
1 | select datediff('2018-4-12','2018-4-19'); |
1 | select datediff('2018-4-12 10:15:48','2018-4-19 18:21:32'); |
5.重排auto_increment值
①delete
1 | delete from user; |
②truncate
1 | truncate table user; |
二、常用的sql技巧
1.Mysql中help命令
1 | ? create |
1 | ? date% |
2.随机取出前三行rand()
1 | select * from user order by rand() limit 3; |
3.Mysql正则表达式
1 | 以user开头 |
1 | 以6结尾 |
三、sql语句优化
1.SQL语句优化
①优化SQl语句的一般步骤
1)通过show status命令了解SQL执行的频率
1 | show [session | global] status; |
1 |
|
2)定位执行效率低下的SQL语句
◇ explain或desc(已知SQL语句)
1 | explain select * from user where username='user1'; |
◇ 查看MySQL的慢查询日志(未知SQL语句)
※ 查看慢查询日志是否开启
1 | show variables like "%quer%"; |
※ 查看慢查询的次数
1 | show status like "%quer%"; |
※ 修改慢查询时间(my.ini)
1 | long_query_time=5; |
重启服务
1 | (测试:快速插入上万条数据,从自身插入数据,以2倍速度插入) |
②索引优化
③check与optimize使用方法
④常用SQL的优化
v1.5.2