一、SQL语言概述
对数据库进行查询和修改操作的语言叫做SQL。SQL的含义就是结构化查询语言(Structured Query Language)。SQL包含以下4个部分:
1、数据定义语言(DDL):DROP、CREATE、ALTER等语句;
2、数据操作语言(DML):INSERT、UPDATE、DELETE语句;
3、数据查询语言(DQL):SELECT语句;
4、数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK的语句。
二、SQL语句的书写规范
1、在数据库系统中,SQL语句不区分大小写(建议用大写) ,但字符串常量区分大小写。
2、SQL语句可单行或多行书写,以“;”结尾。
3、关键词不能跨多行或简写。
4、用空格和缩进来提高语句的可读性。
5、子句通常位于独立行,便于编辑,提高可读性。
6、MySQL注释:使用“#”来注释
三、SQL语句执行过程
1、连接层
(1)提供连接协议:TCP/IP 、SOCKET;
(2)提供验证:用户、密码,IP,SOCKET;
(3)提供专用连接线程:接收用户SQL,返回结果。
通过以下语句可以查看到连接线程基本情况
mysql> show processlist;
2、SQL层
(1)接收上层传送的SQL语句;
(2)语法验证模块:验证语句语法,是否满足SQL_MODE;
(3)语义检查:判断SQL语句的类型
DDL :数据定义语言、 DCL :数据控制语言、DML :数据操作语言、DQL: 数据查询语言等;
(4)权限检查:用户对库表有没有权限;
(5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案;
(6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
代价模型:资源(CPU IO MEM)的耗损评估性能好坏;
(7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
执行结果:在磁盘的xx位置上;
(8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能;
(9)提供日志记录(日志管理章节):binlog,默认是没开启的;
存储引擎层(类似于Linux中的文件系统);
负责根据SQL层执行的结果,从磁盘上拿数据;
将16进制的磁盘数据,交由SQL结构化化成表,
连接层的专用线程返回给用户。
四、常用数据类型
1、整数类型
取值范围
eg:
mysql> create table a1 (
-> id int(10),
-> stu_id tinyint
-> );
2、浮点数和定点数类型
注:不论是定点数还是浮点类型,如果用户指定精度超出精度范围,则会四舍五入进行处理。
eg:
mysql> create table a2 (
-> a float,
-> b double,
-> c decimal(4,2)
-> );
mysql> insert into a2 values
-> (6.5,8.9,4.506),
-> (7.5555,888.888,2.33)
-> ;
3、日期与时间类型
mysql> create table a3 (
-> year year, #第一个为字段名 第二个为字段类型
-> time time,
-> date date,
-> datetime datetime,
-> timestamp timestamp
-> );
mysql> insert into a3 values (2001,'12:34:54','2023-08-18','20230801122345','20050709184534');
4、文本类型
ENUM类型:是一个字符串对象,其值为表创建时在列规定中枚举的一列值。枚举最多可以有65535个元素。
SET类型:是一个字符串对象,可以有零个或多个值,SET列最多可以有64个成员,其值为表创建时规定的一列值,指定包含多个SET成员的SET值时,各成员之间用逗号(,)间隔开。
eg:
mysql> create table a4 (
-> a char(2),
-> b varchar(4),
-> c text,
-> d enum('1','2','3'),
-> e set('a','b','c','d')
-> );
mysql> insert into a4 values
-> ('22','rr','123456789','2','b,d')
-> ;