MySQL
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁 | 不支持它是表锁 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 极小 | 较大 约是2倍 |
在物理空间存在的文件
修改表
# 修改表名
alter table teacher rename as teacher1
# 增加字段
alter table teacher add age int(11)
# 修改表的字段
alter table teacher modify age varchar(11) --修改约束
alter table teacher change age age1 varcahr(11) -- 修改字段名称
# 删除字段
alter table teacher drop age1
# 删除表
DROP TABLE IF EXISTS teacher
所有创建和删除操作应当加上判断,以免报错
物理外键,数据库级别的外键,不建议使用,会很复杂的,避免数据库过多造成困扰!
DML语言
insert
# 插入语句 insert into 表名([字段1,字段2, 字段3]) values('值1', '值2', '值3')
update
# 修改谁, set 字段=新值 update 表名 set `字段1`=新值, `字段2`=新值 where `条件`=xx # 如果没有where 那整个表就都改了
delete
DELETE FROM `students` DELETE FROM `students` WHERE id = 1; DELETE 删除的问题,重启数据库,现象 - innodb 自增会从1开始,存在内存中,断电即失去 - myisam 继续从上一个自增开始,存在于文件中,不会丢失
TRUNCATE
TRUNCATE `students` # 重新设置 自增键会归零 # 不会影响事务
where 查询关键字
操作符 | 含义 |
---|---|
= | 等于 |
!= 或者<> | 不等于 |
> < >= <= | 大于小于 不大于 不小于 |
between and | 区间 |
and && | |
or || | |
like | |
in | |
DQL 查询数据
- 数据查询语言 select
- 数据库中最核心的语言
- 简单查询和复杂查询都可以使用
join
- left join
- right join
- inner join
MySQL函数
https://dev.mysql.com/doc/refman/5.7/en/sql-function-reference.html
MySQL 索引
索引index是帮助MySQL高效获取数据的数据结构
提取句子主干,就可以得到索引的本质: 索引是数据结构
-
主键索引 (primary key)
- 唯一的标识,主键不可用重复,只能有一个列作为主键
-
唯一索引 (unique key)
- 避免重复列出现,唯一索引可以重复,多个列都可以标识唯一索引
-
常规索引 (key / index)
- 默认的 index key关键字来设置
-
全文索引 (fulltext)
- 在特定的数据库引擎下才有,MyIASM
- 快速定位数据
索引=
-- 1. 创建表的时候给字段增加索引
-- 显示所有的索引信息
SHOW INDEX FROM student
-- 2. 增加一个全文索引 索引名(列名)
ALTER TABLE student
ADD FULLTEXT INDEX studentname
(studentname
)
-- 3. 增加索引
CREATE INDEX 索引名 ON 表(字段);
-- EXPLAIN 分析sql执行的状态
EXPLAIN SELECT * FROM student;
索引在小数据的时候,用户不打,但是在大数据量的时候很明显
创建索引的原则:
- 不要对经常变动的表加索引
- 索引不是越多越好
- 小数据量的表不要加索引
- 索引常用来加到经常查询的字段上
索引的数据结构
hash类型的索引
Btree:Innodb的默认
http://blog.codinglabs.org/articles/theory-of-mysql-index.html