MySQL

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;

索引在小数据的时候,用户不打,但是在大数据量的时候很明显

创建索引的原则:

  1. 不要对经常变动的表加索引
  2. 索引不是越多越好
  3. 小数据量的表不要加索引
  4. 索引常用来加到经常查询的字段上

索引的数据结构

hash类型的索引

Btree:Innodb的默认

http://blog.codinglabs.org/articles/theory-of-mysql-index.html

博主 主页:http://blog.codinglabs.org/pages/about-me.html

原文地址:https://www.cnblogs.com/persisit/p/13855576.html