注:该学习笔记是根据莫振杰老师编写的《从0到1:MySQL即学即用》所学习整理的笔记。
第二章 SQL语法
这里写目录标题
一、SQL是什么
1、SQL简介
SQL即结构化查询语言,它是数据库的标准语言。SQL非常简洁,它只有6个常用动词:insert(增)、delete(删)、select(查)、update(改)、create(创建)、grant(授权)。
SQL可以分为三大类:数据定义语言、数据操纵语言、数据控制语言。
1)、数据定义语言
数据定义语言:主要用于对数据表进行创建、删除、修改等操作。
语句 | 说明 |
---|---|
create table | 创建表 |
drop table | 删除表 |
alter table | 修改表 |
2)、数据操作语言
数据操纵语言:主要用于对数据进行增、删、查、改的操作。
语句 | 说明 |
---|---|
insert | 增加数据 |
delete | 删除数据 |
select | 查询数据 |
update | 更新数据 |
3)、数据控制语言
数据控制语言:主要用于对数据库和表的权限进行管理。
语句 | 说明 |
---|---|
grant | 赋予用户权限 |
revoke | 取消用户权限 |
2、关键字
关键字指的是SQL本身“已经在使用”的单词或词组,因此在给数据库、表、列等命名时不能使用这些单词或词组。
常见的关键字有:select、from、where、group by、order by、distinct、like、insert、delete、update、create、table、alter、drop、is not、inner join、left outer join、right outer join、procedure、function等。
3、语法规则
1)、不区分大小写
对于表名、列名、关键字等,SQL是不区分大小写的。约定俗成是要求关键字一律大写,但是会增加初学者的辨识难度,所以可以不强求。
2)、SQL语句应该以分号结尾
如果执行一条SQL语句,则它的结尾加不加英文半角分号(;)都是可以的。但是如果同时执行多条SQL语句,则每一条语句的后面都必须加上银文半角分号才行。
4、命名规则
命名规则主要是针对数据库、表、列的。对于数据库、表、列的命名,需要遵循以下两条规则:
- 不能是SQL关键字
- 只能使用英文字母、数字、下划线
二、数据类型
MySQL的数据类型主要有以下四大类:
- 数值
- 字符串
- 日期时间
- 二进制
Mysq是不存在布尔类型的,但是在实际开发过程中,我们可以使用tinyint(1)、tinyint(0)这种方式来表示,其中1表示True、0表示False。
1、数值
数值是有0~9、正号(+)、符号(-)、小数点(.)组成的。
数值可以分为三大类:整数、浮点数、定点数
1)、整数
类型 | 说明 | 取值范围 |
---|---|---|
tinyint | 很小的整数 | -2^7 ~ 2^7-1(-128~127) |
smallint | 小的整数 | -2^15 ~ 2^15-1(-32768~32767) |
mediumint | 中等的整数 | -2^23 ~ 2^23-1 |
int(或integer) | 普通的整数 | -2^31 ~ 2^31-1 |
bigint | 大整数 | -2^63 ~ 2^63-1 |
2)、浮点数
类型 | 说明 | 有效位 |
---|---|---|
float | 单精度 | 7位 |
double | 双精度 | 15位 |
3)、定点数
类型 | 说明 | 有效位 |
---|---|---|
decimal(m,d) | 定点数 | 取决于m和d |
decimal(m,d)的m表示该数值最多包含的有效数字的个数,d表示有多少为小数。
2、字符串
字符串起始就是一串字符。在MySQL中,字符串都是使用英文半角单引号或双引号引起来的。常用的字符串类型有下列7种:
类型 | 说明 | 字节 |
---|---|---|
char | 定长字符串 | 0~255 |
varchar | 变长字符串 | 0~65535 |
tinytext | 短文本 | 0~255 |
text | 普通长度文本 | 0~65535 |
mediumtext | 中等长度文本 | 0~16777215 |
longtext | 长文本 | 0~4294967295 |
enum | 枚举类型 | 取决于成员个数(最多64个) |
实际开发中,最常用的是char、varchar、text、enum这4种类型。
1)、char
固定长度字符串,也叫作定长字符串,它的长度是固定的,存储相同数据时占用的空间大,但是性能稍高。
- 语法结构:
- char(n)
- 参数说明:
- n:表示指定的长度,它是一个整数,取值范围为0~255。
2)、varchar
可变长度字符串,也叫作变长字符串,它的长度是可变的,存储相同数据时占用的空间小,但是性能稍低。与char不同的是,varchar的占用空间是由字符串的实际长度来决定的。
- 语法结构:
- varchar(n)
- 参数说明:
- n:表示指定的长度,取值范围为0~65535。
3)、text
text相当于varchar(65535),它本质上也是一个变长字符串。
4)、enum
实际开发中,有些变量只有几种可能得取值,比如人的性别:男、女。星期的取值:1、2、3、4、5、6、7。
在MySQL中,可以将某个字段定义为enum类型,然后限定该字段在某个范围内取值。
如果enum类型加上not null属性,则其默认值就是枚举列表的第一个元素。如果不加not null属性,则enum类型将允许插入null,而且null为默认值。
3、日期时间
日期时间主要用于表示“日期(年月日)”和”时间(时分秒))“。MySQL的日期时间类型有5种,如下:
类型 | 格式 | 说明 | 举例 |
---|---|---|---|
date | YYYY-MM-DD | 日期型 | 2023-01-01 |
time | HH:MM:SS | 时间型 | 08:05:30 |
datetime | YYYY-MM-DD HH:MM:SS | 日期时间型 | 2023-01-01 08:05:30 |
year | YYYY | 年份型 | 2023 |
timestamp | YYYYMMDD HHMMSS | 时间戳型 | 20230101 080530 |
每个类型都有特定的格式以及取值范围,当指定不合法的值时,系统就会将“0”插入数据库中。
4、二进制
二进制类型适用于存储图像、有格式的文本(如Word、Excel等)、程序文件等数据。MySQL的二进制类型有5种。
类型 | 说明 | 字节 |
---|---|---|
bit | 位 | 0~255 |
tinyblob | 二进制类型的短文本 | 0~255 |
blob | 二进制类型的普通文本 | 0~65535 |
mediumblob | 二进制类型的中文本 | 0~16777215 |
longblob | 二进制的长文本 | 0~4294967295 |
实际开发中,并不推荐在数据库中存储二进制数据,主要是因为二进制数据往往非常大,占用的存储空间过多,这对数据库的性能会有所影响。
三、注释
方式1,适合单行注释
-- 注释内容
方式2,MySQL独有
# 注释内容
方式3,通用的注释方式,可注释多行
/*注释内容*/
/*
注释内容
注释内容
注释内容
*/