基础部分
1、什么是sql mode?
影响了sql语言执行的行为,执行sql时的一些守则;
例如:现实中除数不能为0,也就是通过sql_mode来控制,或者现实中的日期、年份等。
2、字符集和校对规则:
字符集:
- utf8:最大能存储3字节的字符
- utf8mb4:最大存储4字节的字符,例如可以存储emoji字符;
校对规则(排序规则):
影响字符的排序,例如大小写字符的排序方法。
DDL 语言部分
创建表
1、创建表的的规则:
- 表名小写字符;(多系统的兼容性)
- 不能是纯数字;
- 不能使用保留字符
- 长度不要过长
2、查询表的相关信息: - 表的属性: desc table ‘表名字’
- 查询建表过程: show create table ‘table_name’
3、建立表
create table tablename(name1 属性,name2 属性);
表属性:
primary key not null uniqe key
其他属性; default auto_increment comment
修改表
1、添加列
- alter table table_name add column 表名 该列属性说明;
2、在定义表之后添加主键 - alter table stutb add primary key (NAME);
DML
1、删除数据
经典面试题:delete from table_name, drop table table_name, truncate table table_name有什么区别?
- 以上三条命令都可以删除全表数据;
- 区别在于:delete from table_name逻辑上是逐行删除,数据行多,操作慢;并没有真正从磁盘上删除,只是在存储层打标记,磁盘空间不会立即被释放。HWM高水位线不会降低。
- drop table table_name 是将表结构和物理层次删除。
- truncate table student 清空表段中的所有数据页,物理层次彻底删除,磁盘空间立刻释放,HWM高水位线会降低。
DCL
略。
DQL条件查询
例子:
条件查询语句:group by 用来站队、统计。
select stuAge count(stuId) from table_student group by stuAge;
2、having limit
3、select 多表查询连接介绍
内连接:
外连接
- 左外连接:左表所有数据、右表满足条件的数据
- 右连接
- joint sth on 条件;
- left join sth on 条件。
4、
– IN :查询某个范围内的数据.
– order by :排序.(desc是降序,asc是升序)
– limit num:从第一条开始取出num条记录.
5、查询结果去重复
select distint(stuname) from table_name;
6、information schema
MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。
例如:统计每个库占用空间的大小。
元数据:数据库中表示数据的数据。
7、concat命令,拼接
与group by联合使用
8、case语句,多次判断,多种输出
9、Btree
聚簇索引BTree结构, - 数据有主键
- 若没有主键,则自动选择唯一键的列(uniq)作为索引(innoDb独有)
- 以上都没有 ,mysql数据库引擎也能自动生成隐藏索引(根据数据的hash值)。
辅助索引:弥补非聚簇索引以外的列的索引
新的part
2020年6月初:我感觉看视频还是太慢了,然后去找了点相关是书籍,配合着看。
书我下载了**《sql必知必会》和《mysql技术内幕:sql编程》**的pdf版本。
sql必知必会比较浅显,读起来很友好,可以让我快速的了解各个方面。
同时,这本书还有配套的数据和源码,解决了我看视频时无法拿数据跟着做实验的痛点。