数据库操作:
查看,新增,删除 使用,退出
> show databases;
> create database lvjing default character set utf8mb4 callate utf8mb4_general_ci;
> drop database lvjing;
> use lvjing;
> exit;
表操作:
删除线格式 查看,新增,删除 结构,重命名 修改字段
> show tables;
> create table jing(id int primary key auto_increment,name varchar(10))default charset=utf8;
> drop table jing;
> desc jing;
> rename table jing to ljing;
> alter table jing add column age int;
> alter table jing modify age varchar(10); modify/change/drop
数据操作:
新增,删除,查询,修改 CRUD
> insert into jing values(),(); insert into jing () values(),();
> delete from jing where id = 1;
> select * from jing;
> update from jing set name = lvjing where id = 1;
数据类型:
char varchar
int
double decimal(9,2) number()
date time
图片/声音/视频 存本地地址
约束:
primary key
foreign key
auto_increment
not null
unique
int unsigned
check
default
函数:
upper() lower()
length()
subtr()
concat() concat_ws("-",a,a,a,a…) group_concat()
sname,group_concat(sid order by sid separator ‘-’) sid
replace()
round() ceil() floor()
uuid()
now() curdate() curtime() year,month,day,time,minute,second
last_day(now())
date_format(now(),’%Y-%m-%d %H:%i:%s’)
str_to_date(‘2014-06-14’,’%Y-%m-%d’)
\
where
or
distinct
like %
is null ifnull()
between and
limit 1,2
order by
as
聚合函数 count() max() min() sum() avg()
group by having
union union all
case when then else end
if(q,b,c)
timestampdiff(year,a,b)
子查询 : = in
表关联:
1:1
1:n
n:1
n:n 使用中间表存储两个表的主键(复合主键)
多表联查:
inner join 交集
left join 左联
right join 右联
on
索引:
create index index_name on tb_lvjing(
id
);
unique(phone)
id_phone(id,phone)
alert table emp drop index phone
show index from emp
explain 检查这个sql语句是否使用了索引
explain select * from teacher where tname = ‘易天’;
视图:
查询后的结果 创建一个视图, 下次查询相同的内容直接查视图就行
事务:
ACID 原子性,隔离性,一致性,持久性
隔离级别: 读未提交 读已提交 可重复读 串行化
并发问题: 幻读 脏读 不可重复度
回滚 : rollback
事务操作:
回滚: 删库之后执行一条查询show tables会报错,发生回滚
set @@autocommit=0;
begin;
savepoint lvjing;
执行语句 delete from jing; select * from jing; 出错
rollback lvjing;
release savepoint lvjing;
commit;
select * from lvjing;
sql定义:
select distinct column,...
agg_function(column or expression),...
from [left_table]
<join_type> join <right_table>
on <join_condition>
where <where_condition>
group by <group_by_list>
having <having_condition>
order by <order_by_list>
limit count offset count;
sql执行顺序:
1. from [left_table]
2. on <join_condition>
3. <join_type> join <reght_table>
4. where <where_condition>
5. group by <group_by_list>
6. agg_func(column or expression),...
7. having <having_condition>
8. select
9. distinct column,...
10. order by <order_by_list>
11. limit count offset count;
- where中不能使用聚合
- where 和 having 中条件判断的范围 --> group by 前后
SQL优化:
01. 索引 alter table lvjing add index index_name(name);
02. 视图
03. 先过滤表中的数据, 再进行分组 多表联查
4. 避免全表扫描
不使用select * ..(全表扫描) 使用具体字段 select id,name ..
where中or也会全表扫描
5. 数据类型的使用
字符串类型使用varchar 尽量不用cahr 占用内存
使用数值类型代替字符串类型 例: 1-男 2-女
6. like %
select id,name from lvjing where name like '吕%';
7. 索引失效
!=,<>,is null,is not null 使用这些会索引失效
distinct 过滤字段要少
where中对字段进行表达式操作
使用索引列上内置函数索引失效
8. 提升性能 优化表
批量插入数据性能提升 比一条一条快 原因: 新增sql语句主要事务控制,多条需要多个事务的开启关闭
分批删除数据 一次太多可能会造成锁表
伪删除 1-正常 0-已删除
group by 先过滤数据再分组
where和order by中常出现的字段就创建索引。
使用union all
SQL语句:
mysql -uroot -proot
status; --登录数据库后查看数据库版本
mysqldump -uroot -proot 数据库名(jt) > 导出路径(d:/jt.sql) --导出数据库