- 创建数据库:
create database base;
- 删除数据库
drop database base;
- 选择数据库
use base;
- 创建数据表
create table if not exists a(
id int,
date date
); #此处注意格式
- 插入数据
insert into a(id,date)
values
(1,now()),
(2,now());
- 查询数据
select * from a;
-
- where语句
select * from a where id=1;
-
- update语句
update a set date='2018-01-01' where id=1;#日期字符用引号
-
- delete语句
delete from a where id=1;
-
- like语句
select * from a where id like '%1';
-
- union语句
select id from a
union
select id from b
order by id;
-
- union all语句
select id from a
union all
select id from b
order by id;
*UNION 不能用于列出两个表中所有的id。如果两个表中id值相同每个id只会列出一次。UNION 只会选取不同的值。可以使用 UNION ALL 来选取重复的值
-
- order by语句
select * from a order by id asc #顺序排列
select * from a order by id desc #倒序排列
-
- group by 语句
详细:https://blog.csdn.net/kingszelda/article/details/72621971
- 主键:确定一条记录的唯一标识,比如身份证号列具有唯一性可以当作主键,同时主键值应非空.
-唯一性索引:普通索引允许被索引的数据列包含重复的值。而唯一性索引的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
-
- 主键一定是唯一性索引,唯一性索引并不一定就是主键.一个表中可以有多个唯一性索引,但只能有一个主键;主键列不允许空值,而唯一性索引列允许空值。
-
查询时使用联合索引的一个字段,如果这个字段在联合索引中所有字段的第一个,那就会用到索引,否则就无法使用到索引。
例如联合索引 IDX(字段A,字段B,字段C,字段D),当仅使用字段A查询时,索引IDX就会使用到;如果仅使用字段B或字段C或字段D查询,则索引IDX都不会用到。
这个规则在oracle和mysql数据库中均成立。 -
导致无法使用索引:
- or在非索引字段的使用(有索引字段 or 无索引字段)
- like%…%’全模糊的使用,但如果是like ‘…%’,是会使用索引的
- 使用 != 或 <> 操作符
- 在字段上进行运算如 where id+1=2
- 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。
- 1.将多个insert合并为一个insert,因为每一条insert,都会产生日志记录,合并后可以减少日志刷盘的量和频率,同时也能减少SQL语句解析的次数。(一条SQL的长度限制,可以修改max_allow_packet的值(默认是1M)).2.不自动提交事务而是每执行一定数量数据再提交一次(显式开启和提交事务)(事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。)。3.数据有序的插入,插入记录在主键上有序排列(由于数据库插入时,需要维护索引数据,无序的记录会增大维护索引的成本).来自(https://blog.csdn.net/qq_22855325/article/details/76087138)
- 加过排他锁的数据行在其他事务中是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制(https://www.cnblogs.com/boblogsbo/p/5602122.html)。
主从复制中中继日志:1.mysql执行命令需要一定时间,而当短时间内大量操作从主库二进制日志中发过来时可以使用中继日志起到一个缓冲作用 2.方便后期维护,比如从节点断开连接,后续恢复的时候可以根据中继日志查看操作记录进行恢复。
- MVCC:
在查询时要符合以下两个条件的记录才能被事务查询出来:
-
删除版本号未指定或者大于当前事务版本号,即查询事务开启后确保读取的行未被删除。(即上述事务id为2的事务查询时,依然能读取到事务id为3所删除的数据行)
-
创建版本号 小于或者等于 当前事务版本号 ,就是说记录创建是在当前事务中(等于的情况)或者在当前事务启动之前的其他事物进行的insert。
(即事务id为2的事务只能读取到create version<=2的已提交的事务的数据集)
https://www.cnblogs.com/FXqufei/p/9795435.html https://blog.csdn.net/w2064004678/article/details/83012387
-
意向锁:
意向锁的存在使得行锁和表锁可以共存。
https://www.jianshu.com/p/38dd4f64ebd1 -
MyISAM缺点
1.不支持数据库事务;
2.不支持行级锁和外键;
3.INSERT和UPDATE操作需要锁定整个表;
4.不支持故障恢复;
MyISAM适用场景
1.不需要事务的操作;
2.插入、更新少,读取频繁;
3.频繁的统计计算。 -
聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。
-
innodb中叶子节点存储了整个行数据,InnoDB会利用主键来生成其聚簇索引,根据主键进行查找可查找出主键所在行的数据,除了主键索引之外的索引,成为二级索引(Secondary Index)。二级索引可以有多个,二级索引建立在经常查询的列上。与聚簇索引的区别在于二级索引的叶子节点中存放的是主键值,然后使用主键值对聚簇索引进行二次查找找出所有信息。二级索引的叶子节点中不存放主键
地址是因为,防止主键地址发生变化后对二级索引的修改。减少大量的二级索引维护工作。 -
也就是innodb中,通过主键查找数据的时候,就会很快查找到数据(查找一次),但是通过次索引查找数据的时候,需要先查找到对应的主键id,然后才能查找到对应的数据(查找两次)。而myisam中, 主索引和次索引,都指向物理地址。