创建
**************************************************************************************************************
1、创建表
create table 表名(
字段 varchar(255) default 默认值,
........ char(255) not null ,
......... int(11) unique , 自动安排索引 pk也是
......... bigint() primary key 只能有一个 auto_increment 从1开始自动分数
......... clob() 非常多的字符
......... blob() 非常多的二进制
......... data() %y %m %d 默认格式 年-月-日 str_to_date('日期字符串','格式')
......... datatime() now() %h %i %s 默认格式 时:分:秒 data_format(字段,'格式')
unique()
primary key()
foreign key() references 父表(字段) 删除 先子后父 增或创建 先父后子
);
2、根据搜索结果创建表
create table 表名 as select.........
**************************************************************************************************************
删除
**************************************************************************************************************
drop table if existed 表名
**************************************************************************************************************
增
**************************************************************************************************************
insert into 表 (....) values (.....)
insert into 表 select....
**************************************************************************************************************
删
**************************************************************************************************************
delete from 表 where .... 只删数据不删表,速度慢,可找回
truncate table 表 快速删除,不能找回
**************************************************************************************************************
改
**************************************************************************************************************
update 表 set 字段=... where .....
**************************************************************************************************************
查
**************************************************************************************************************
select....from...where...group by...having....order by....limit.....
where:
1、<>=
2、between ........and......
3、is null / is not null
4、and 优先级大于 or
5、 in (..) 替换 or
6、 like % _ %多个字符,_一个字符
单行处理函数
.........................
分组函数
max()
min()
sum()
avg()
count()
额外
distinct() 去重
union 拼接查询结果
limit (pageno-1)*pagesize,pagesize
**************************************************************************************************************
事务
**************************************************************************************************************
增,删,改
commit 提交事务 本质:保存
rollback 回滚事务 本质:撤销操作,回到上一个保存点
Mysql 默认情况下 自动执行 commit
切换成手动:start transaction
事务四个特性:原子性,一致性,隔离性,持久性
事务和事务的隔离级别:
读未提交: read uncommited 低
读已提交: read commited oracle默认级别
可重复读: repeatable read mysql默认级别
序列化/串行化: serializable 高
查询隔离级别:select @@tx_isolation
**************************************************************************************************************
索引
**************************************************************************************************************
本质:自平衡二叉树
使用场景:数量庞大,经常出现在where 后,很少出现在 insert ,delete, update
建议:不要随意使用,因其需要维护,太多降低性能 建议使用pk 和 unique 查询
创建索引:
create index .....索引名..... on 表(字段)
删除索引:
drop index .......索引名.... on 表
索引失效:
1、模糊查询 like '%..' 会失效 ,因为以%开头,不确定
2、 or 使用 or 两端要么都有索引,要么都没有
3、使用复合索引 没有使用左侧列
4、where里面使用 索引列计算,索引失效
5、where 索引列 使用函数 失效
地位: 数据库优化重要手段
**************************************************************************************************************
视图
**************************************************************************************************************
站在不同的角度看同一份数据
create view ..... as select .....
**************************************************************************************************************
数据库范式
**************************************************************************************************************
数据库表 依据 数据库范式 避免冗余,但有时为了满足客户需求,可以用冗余换时间
第一范式 : 有主键 字段原子性不可分 解决: 分开字段
第二范式 : 第一范式基础上 完全依赖 不要产生部分依赖 解决:分表
第三范式 : 第二范式基础上 直接依赖 不要产生传递依赖 解决:分表
多对多 三个表, 多 多 对(外键)
一对多 两个表 一 对多(外键)