基本操作

  • 连接数据库: mysqld -uroot -p -h127.0.0.1 -p3306

  • 查看所有库: show databases;

  • 选择库: use laravel_dev;

  • 创建库: create database sxy_blog;

  • 删除库: drop database sxy_blog;

  • 查看所有表: show tables;

  • 查看表结构: show create table sxy_users;desc sxy_users;

  • 创建表:

create table shuxiaoyuan (
	`id` int unsigned not null auto_increment,
	`username` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`id`)
);
  • 清空表数据:TRUNCATE shuxiaoyuan;

  • 删除表: drop table shuxiaoyuan;

  • 添加字段: bbb ,默认为 null,在字段 username 后面

 ALTER TABLE `shuxiaoyuan` add COLUMN `bbbb` CHAR(50) NULL DEFAULT NULL AFTER `username`;
  • 删除字段: ALTER TABLE 表名 DROP COLUMN 字段名;

  • 修改字段

# 修改字段长度:
ALTER TABLE 表名 MODIFY COLUMN 字段名  数据类型(修改后的长度)

# 修改字段名称
alter table <表名> change <字段名> <字段新名称> <字段的类型>

drop、truncate和delete的区别

先放一个链接吧:点击此处

CURD(核心,哈哈哈)

insert、select、update、delete

insert into shuxiaoyuan (aaa,bbb,ccc) value('1','2','3');
select * from shuxiaoyuan where aaa = '1';
update shuxiaoyuan set bbb = 'bbbbbb' where id = 1;
delete from shuxiaoyuan where id  = 1;

三范式

  • 属性具有原子性,不可再分
  • 唯一性约束,每条记录有唯一标识,非主键必须依赖主键
  • 冗余性约束,非主键之间不能相互依赖

乐观、悲观锁

说明:查询时 select for update,然后再提交 update 操作

实际中更严谨一点,带上更新前的状态,例如:

update order_table set status = '更新为已付款' where order_id = 001 and status = '更新前为待支付' and ...

乐观锁

我们在使用乐观锁时会假设在极大多数情况下不会形成冲突,只有在数据提交的时候,才会对数据是否产生冲突进行检验。如果数据产生冲突了,则返回错误信息,进行相应的处理。

实现:MySql最经常使用的乐观锁时进行 版本控制时间戳,也就是在数据库表中增加一列,记为version,当我们将数据读出时,将版本号一并读出,当数据进行更新时,会对这个版本号进行加 1,当我们提交数据时,会判断数据库表中当前的version列值和当时读出的version是否相同,若相同说明没有进行更新的操作,不然,则取消这次的操作。

悲观锁

MySql的悲观锁就是打开事务,当启动事务时,如果事务中的sql语句涉及到索引并用索引进行了条件判断,那么会使用行级锁锁定所要修改的行,否则使用表锁锁住整张表。

事务

ACID 特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)

深入了解:事务隔离级别

存储引擎

请直接点击此处

索引

请直接点击此处

聚族索引与非聚族索引的区别

  • 聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针

如何优化数据库

范围太管,针对几个点回答一下就行

索引的正确使用和设计

mysql认知

三大范式是什么?

怎么区分三大范式?

数据库五大约束是什么?

主键是什么,怎么设置主键?

数据库的外键是什么?

innodb和myisam有什么区别?

什么是索引?

索引是个什么样的数据结构呢?

innodb索引的实现原理是什么?

btree和hash类型的索引有什么不同?

什么是覆盖索引?

B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据,什么是聚簇索引?

在建立索引的时候,都有哪些需要考虑的因素呢?

联合索引/多列索引的注意事项是什么?

导致索引失效的原因有哪些?

Explain 怎么用来做sql优化?

主键使用自增ID还是UUID?

字段为什么要求定义为not null?

drop、delete与truncate分别在什么场景之下使用?

MySQL中的varchar和char有什么区别?

varchar(10)和int(10)代表什么含义?

超大分页怎么处理?

关心过业务系统里面的sql耗时吗?统计过慢查询吗?

对慢查询都怎么优化过?

上面提到横向分表和纵向分表,可以分别举一个适合他们的例子吗?

LEFT JOIN 、RIGHT JOIN、INNER JOIN 区别?

UNION、UNION ALL区别?

说一说常用 的MySQL 函数

你的sql优化常用技巧有哪些?

同一个字段,用 int 还是 char 查询效率高?

SQL编写题,一些实例,考察一下

1、查询每个学生的学号、姓名和每门课的成绩;

2、查询都学过2号同学(sid=2)学习过的课程的同学的学号

3、查询“语文(cid=1)”课程比“数学(cid=2)”课程成绩高的所有学生的学号;

4、查询平均成绩大于60分的同学的学号和平均成绩;

5、查询所有同学的学号、姓名、选课数、总成绩;

6、查询姓“周”的老师的个数;

7、查询没学过“叶平”老师课的同学的学号、姓名;

8、查询学过“语文(cid=1)”并且也学过“数学(cid=2)”课程的同学的学号、姓名;

9、查询学过“叶平”老师所教的所有课的同学的学号、姓名;

10、查询课程编号“数学(cid=2)”的成绩比课程编号“语文(cid=1)”课程低的所有同学的学 号、姓名;

11、查询所有课程成绩小于60分的同学的学号、姓名;

12、查询没有学全所有课的同学的学号、姓名;

13、按平均成绩从高到低显示所有学生的“语文“、“数学”、“英语”三门的课程成绩,按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分

14、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

15、查询男生、女生人数 :以如下形式显示:男生人数,女生人数

16、查询课程名称为“数学”,且分数低于60的学生姓名和分数

17、查询两门及两门以上不及格课程的同学的学号及其平均成绩

18、检索“cid=4”课程分数小于60,按分数降序排列的同学学号

hash索引的实现原理是什么?

讲一下你理解的B+树索引是怎么实现的?

索引是如何存储在磁盘上的?

什么是事务?

事务的四大特性?

没有隔离级别的话,多事务并发进行会造成什么问题?

事务的隔离级别和各自解决的问题是什么?

InnoDB使用的是哪种隔离级别呢?

数据库事务的使用的规范有哪些?

InnoDB怎么实现的事务ACID特性?

InnoDB的事务为什么是原子性的?

InnoDB是如何保证隔离性的?

事务的持久性如何保证?

事务的一致性,指的是什么?

MVCC是什么,如何实现?

InnoDB的MVCC实现原理是什么?

可重复读(repeatable read)级别如何避免幻读?

mysql的锁了解么,如何分类?

乐观锁和悲观锁是什么,如何实现?

锁的粒度有哪几种?

锁的兼容性对比