MySQL 基础语法

  • 语法规范
  • MySQL数据类型
  • 数值类型
  • 日期和时间类型
  • 字符串类型
  • 数据库的命令
  • 创建数据表
  • 插入数据
  • 查询数据
  • where 子句
  • 操作符
  • update 更新
  • delete 语句
  • like 子句
  • union 操作符
  • 排序
  • group by 语句
  • 连接的使用


语法规范

  1. 不管是SQL 还是 MySQL,他们程序的内部都是不区分大小写的。(但是我们自定义的数据库名,表名,表字段是区分大小写的)
  2. 每一次的操作语句需要使用 ;或者\g来收尾
  3. 每个子句之间一般分行来书写
  4. 每一次操作的关键字不能缩写,也不能分行
  5. 可以用首行的缩进来提高语句的可读性

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
);

Mysql语法书 mysql基础语法大全_数据库

  • 当我们定义一个字符串的时候,如果不想要这个字符串为NULL,可以在后面设置字段属性为not NULL。这样的话我们要是输入该字段为NULL就会报错
  • auto_increment 定义这个属性的列为自增属性,一般用于主码,数值会自动加一。如果+1后的数值超过了表示的范围,就会失效
  • primary key 关键字用于定义列为主码,一个表可以有多个主码,每个主码之间用,分隔开。
  • unsigned 关键字表示当前数据类型为无符号的数据

查看该表的结构

Mysql语法书 mysql基础语法大全_Mysql语法书_02

插入数据

insert into table_name
(field1,field2,....fieldN),
values
(value1,value2,.....valueN);

Mysql语法书 mysql基础语法大全_Mysql语法书_03

  • 如果我们要插入的数据为字符型,必须交单引号或者双引号,“dcl”
  • 其实对于带有 auto_increment 的属性我们可以选择不提供数据,因为该字段本身就是自增的。只是超过表示范围的话就会失效
  • 如果插入带有时间属性的数据时,可以使用now()函数,这是MySQL中的一个实例函数,可以返回日期和时间

查询数据

select column_name1,column_name2
from table_name
[where clause(条件)]
[limit N] [offset M];

Mysql语法书 mysql基础语法大全_数据库_04

  • 查询语句中可以多表查询,也可以单标查询,不同的表之间需要用,分隔开。
  • where关键字后可以跟查询的条件,可以根据条件从表中查询指定数据
  • select命令可以读取一条或者多条记录
  • *表示当前查询的表中满足条件的所有字段数据
  • limit可以设定返回的记录数,也就是从当前索引为 N 的数据开始查询
  • offect可以指定select语句在查询时的偏移量,在使用时需要配合limit 关键字来使用。默认偏移为0

Mysql语法书 mysql基础语法大全_数据_05


数据库中数据的下标跟数组是一样的,都是从0号下标开始

where 子句

select field1,...fieldN from table1,...tableN
where condition1 [and [or] ] condition2...;

Mysql语法书 mysql基础语法大全_基础指令_06

  • 查询中可以使用单表查询,也可以多表查询,表与表之间用,分隔开,并使用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]

Mysql语法书 mysql基础语法大全_基础指令_07

  • 可以同时更新一个或者多个字段
  • 可以在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";

Mysql语法书 mysql基础语法大全_mysql_08

  • 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]

Mysql语法书 mysql基础语法大全_Mysql语法书_09

  • 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] ];

Mysql语法书 mysql基础语法大全_数据_10

  • 可以使用任何字段来作为排序的条件,然后返回排序后查询的结果,也可以设定多个字段来进行排序
  • asc 关键字来设置升序排列,desc关键字来设置降序排列。默认为升序
  • 可以添加where…like子句为判断条件
  • 因为查询不改变数据库存储,所以排列后并不会改变原表的数据

group by 语句

该语句可以根据一个或多个列对结果集进行分组,可以统计一个属性有多少列,也就是这个属性出现的次数。

select column_name,function(column_name)
from table_name
where column_name operator value
group by column_name;

Mysql语法书 mysql基础语法大全_mysql_11

连接的使用

  • 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;

Mysql语法书 mysql基础语法大全_mysql_12

from table_name a

表示给一个表格在查询语句中起一个别名