MySQL 基础语法
- 语法规范
- MySQL数据类型
- 数值类型
- 日期和时间类型
- 字符串类型
- 数据库的命令
- 创建数据表
- 插入数据
- 查询数据
- where 子句
- 操作符
- update 更新
- delete 语句
- like 子句
- union 操作符
- 排序
- group by 语句
- 连接的使用
语法规范
- 不管是SQL 还是 MySQL,他们程序的内部都是不区分大小写的。(但是我们自定义的数据库名,表名,表字段是区分大小写的)
- 每一次的操作语句需要使用
;
或者\g
来收尾 - 每个子句之间一般分行来书写
- 每一次操作的关键字不能缩写,也不能分行
- 可以用首行的缩进来提高语句的可读性
MySQL数据类型
数值类型
类型 | 大小 | 用途 |
tinyint | 1 byte(-128,127) | 小整数值 |
smallint | 2 byte(-32 768,32 767) | 大整数值 |
mediumint | 3 byte | 大整数值 |
int 或者 integer | 4 byte | 大整数值 |
bigint | 8 byte | 极大整数值 |
float | 4 byte | 单精度浮点数值 |
double | 8 byte | 双精度浮点数值 |
日期和时间类型
类型 | 大小 | 格式 | 用途 |
date | 3 byte | YYYY - MM - DD | 日期值 |
time | 3 byte | HH : MM : SS | 时间值或持续时间 |
year | 1 byte | YYYY | 年份值 |
datetime | 8 byte | YYYY - MM - DD HH : MM : SS | 混合日期和时间值 |
timestamp | 4 byte | YYYYMMDDHHMMSS | 混合日期和时间值,时间戳 |
字符串类型
类型 | 大小 | 用途 |
char(n) | 0 ~ 255 byte | 长度为n的定长字符 |
varchar(n) | 0 ~ 65535 byte | 最大长度为n的可变长字符 |
blob | 0 ~ 65535 byte | 二进制形式的长文本数据 |
text | 0 ~ 65535 byte | 长文本数据 |
数据库的命令
创建数据表
create table table_name(
column_name1 column_type,
column_name2 column_type
);
- 当我们定义一个字符串的时候,如果不想要这个字符串为NULL,可以在后面设置字段属性为not NULL。这样的话我们要是输入该字段为NULL就会报错
- auto_increment 定义这个属性的列为自增属性,一般用于主码,数值会自动加一。如果+1后的数值超过了表示的范围,就会失效
- primary key 关键字用于定义列为主码,一个表可以有多个主码,每个主码之间用
,
分隔开。 - unsigned 关键字表示当前数据类型为无符号的数据
查看该表的结构
插入数据
insert into table_name
(field1,field2,....fieldN),
values
(value1,value2,.....valueN);
- 如果我们要插入的数据为字符型,必须交单引号或者双引号,“dcl”
- 其实对于带有 auto_increment 的属性我们可以选择不提供数据,因为该字段本身就是自增的。只是超过表示范围的话就会失效
- 如果插入带有时间属性的数据时,可以使用now()函数,这是MySQL中的一个实例函数,可以返回日期和时间
查询数据
select column_name1,column_name2
from table_name
[where clause(条件)]
[limit N] [offset M];
- 查询语句中可以多表查询,也可以单标查询,不同的表之间需要用
,
分隔开。 -
where
关键字后可以跟查询的条件,可以根据条件从表中查询指定数据 -
select
命令可以读取一条或者多条记录 -
*
表示当前查询的表中满足条件的所有字段数据 -
limit
可以设定返回的记录数,也就是从当前索引为 N 的数据开始查询 -
offect
可以指定select语句在查询时的偏移量,在使用时需要配合limit 关键字来使用。默认偏移为0
数据库中数据的下标跟数组是一样的,都是从0号下标开始
where 子句
select field1,...fieldN from table1,...tableN
where condition1 [and [or] ] condition2...;
- 查询中可以使用单表查询,也可以多表查询,表与表之间用
,
分隔开,并使用where语句设置查询条件 -
where
语句中可以指定任何条件,不同的条件中可以用 and 或者 or 来连接,用法和C原因中的与,或相同 -
where
语句也可以使用与 Mysql 的delect 和 update命令 -
where
语句类似于C语言阶段的if
条件,根据MySQL表中的字段值来读取数据。
操作符
操作符 | 描述 | 实例 |
= | 等号,检测两个值是否相等,相等是返回 true | (2 = 3) 返回false |
<>,!= | 不等于,两个值如果不相等返回 true | (2 != 3) 返回true |
> | 大于号,如果左边的值大于右边的值返回 true | 2 > 1 返回 true |
< | 小于号,如果左边的值小于右边的值返回 true | 1 < 2 返回 true |
>= | 大于等于号,如果左边的值大于等于右边的值,返回 true | 1 >= 1 返回 true |
<= | 小于等于号,如果左边的值小于等于右边的值,返回 true | 1 <= 1 返回 true |
update 更新
update table_name
set field1 = new_values1, field2 = new_values2
[where cluse]
- 可以同时更新一个或者多个字段
- 可以在where子句中指定任何合理的条件
- 可以在一个单独表中同时更新数据
delete 语句
delete from table_name
[where clause];
- 如果没有指定where子句的条件,那么表中的所有数据都会被删掉,但是这个表不会被删除
- 可以在单个表中一次删除记录
like 子句
like
在字典中有像的意思,在查询的时候,我们有时不一定知道需要筛选的完整信息,可能只知道一半,这时就可以使用like来把所有含有这一半信息的字段数据都筛选出来。
select field1,...fieldN from table_name
where field1 like condition1 [and [or] ] field2 = "somevalue";
-
where
语句中可以使用like
子句 -
like
子句可以代替=
,通常与%
一起使用,类似于一个元字符的搜索(类似正则表达式那种)
union 操作符
可以连接两个表格之间的select查询结果到一个集合中,多个select语句会删除重复的数据。
select expression1, expression2, ... expression_n
from table_name
[where conditions]
union [all | distinct]
select expression1, expression2, ... expression_n
from table_name
[where conditions]
- expression1, expression2, … expression_n:要检索的列。
- table_name:要检索的数据表
- all:返回所有结果集合,包含重复数据
- distinct:删除结果集合中重复的数据,系统默认是删除重复数据的,所以可加可不加。
排序
可以使用 MySQL 的 order by
子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。
select field1,...fieldN
from table_name1,...table_nameN
order by field1 [asc [desc] ] ,....fieldN [ asc [desc] ];
- 可以使用任何字段来作为排序的条件,然后返回排序后查询的结果,也可以设定多个字段来进行排序
-
asc
关键字来设置升序排列,desc
关键字来设置降序排列。默认为升序 - 可以添加where…like子句为判断条件
- 因为查询不改变数据库存储,所以排列后并不会改变原表的数据
group by 语句
该语句可以根据一个或多个列对结果集进行分组,可以统计一个属性有多少列,也就是这个属性出现的次数。
select column_name,function(column_name)
from table_name
where column_name operator value
group by column_name;
连接的使用
-
inner join
(内连接,或等值连接):获取两个表中字段匹配关系的记录。 -
left join
(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 -
right join
(右连接): 与left join
相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
select fleld1,...fieldN
from table_name1 inner join table_name2
on table_name1.field1 = table_name2.field2;
from table_name a
表示给一个表格在查询语句中起一个别名