Skip to content

认识 SQL 语句

我们希望操作数据库(特别是在程序中),就需要有和数据库沟通的语言,这个语言就是 SQL:

  • SQL 是 Structured Query Language,称之为结构化查询语言,简称 SQL
  • 使用 SQL 编写出来的语句,就称之为 SQL 语句
  • SQL 语句可以用于对数据库进行操作

事实上,常见的关系型数据库 SQL 语句都是比较相似的,所以你学会了 MySQL 中的 SQL 语句,之后去操作比如 Oracle 或者其他

关系型数据库,也是非常方便的。

SQL 语句的常用规范:

  • 通常关键字使用大写的,比如 CREATE、TABLE、SHOW 等等;
  • 一条语句结束后,需要以 ; 结尾;
  • 如果遇到关键字作为表明或者字段名称,可以使用``包裹;

SQL 语句的分类

DDL(Data Definition Language):数据定义语言;

  • 可以通过 DDL 语句对数据库或者表进行:创建、删除、修改等操作;

DML(Data Manipulation Language):数据操作语言;

  • 可以通过 DML 语句对表进行:添加、删除、修改等操作;

DQL(Data Query Language):数据查询语言;

  • 可以通过 DQL 从数据库中查询记录;(重点)

DCL(Data Control Language):数据控制语言;

  • 对数据库、表格的权限进行相关访问控制操作;

接下来我们对他们进行一个个的学习和掌握。

SQL 的数据类型 – 数字类型

我们知道不同的数据会划分为不同的数据类型,在数据库中也是一样:

  • MySQL 支持的数据类型有:数字类型,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON 数据类型。

数字类型

  • MySQL 的数字类型有很多:
  • 整数数字类型:INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT
  • 浮点数字类型:FLOAT,DOUBLE(FLOAT 是 4 个字节,DOUBLE 是 8 个字节);
  • 精确数字类型:DECIMAL,NUMERIC(DECIMAL 是 NUMERIC 的实现形式);

SQL 的数据类型 – 日期类型

MySQL 的日期类型也很多:

YEAR 以 YYYY 格式显示值

  • 范围 1901 到 2155,和 0000。

DATE 类型用于具有日期部分但没有时间部分的值:

  • DATE 以格式 YYYY-MM-DD 显示值 ;
  • 支持的范围是 '1000-01-01' 到 '9999-12-31';

DATETIME 类型用于包含日期和时间部分的值:

  • DATETIME 以格式'YYYY-MM-DD hh:mm:ss'显示值;
  • 支持的范围是 1000-01-01 00:00:00 到 9999-12-31 23:59:59;

TIMESTAMP 数据类型被用于同时包含日期和时间部分的值:

  • TIMESTAMP 以格式'YYYY-MM-DD hh:mm:ss'显示值;
  • 但是它的范围是 UTC 的时间范围:'1970-01-01 00:00:01'到'2038-01-19 03:14:07';

另外:DATETIME 或 TIMESTAMP 值可以包括在高达微秒(6 位)精度的后小数秒一部分(了解)

  • 比如 DATETIME 表示的范围可以是'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999';

SQL 的数据类型 – 字符串类型

MySQL 的字符串类型表示方式如下:

CHAR 类型在创建表时为固定长度,长度可以是 0 到 255 之间的任何值;

  • 在被查询时,会删除后面的空格;

VARCHAR 类型的值是可变长度的字符串,长度可以指定为 0 到 65535 之间的值;

  • 在被查询时,不会删除后面的空格;

BINARY 和 VARBINARY 类型用于存储二进制字符串,存储的是字节字符串;

BLOB 用于存储大的二进制类型;

TEXT 用于存储大的字符串类型;

表约束

主键:PRIMARY KEY

  • 一张表中,我们为了区分每一条记录的唯一性,必须有一个字段是永远不会重复,并且不会为空的,这个字段我们通常会将它设

置为主键

  • 主键是表中唯一的索引;
  • 并且必须是 NOT NULL 的,如果没有设置 NOT NULL,那么 MySQL 也会隐式的设置为 NOT NULL;
  • 主键也可以是多列索引,PRIMARY KEY(key_part, ...),我们一般称之为联合主键
  • 建议:开发中主键字段应该是和业务无关的,尽量不要使用业务字段来作为主键;

唯一:UNIQUE

  • 某些字段在开发中我们希望是唯一的不会重复的,比如手机号码、身份证号码等,这个字段我们可以使用 UNIQUE 来约束:
  • 使用 UNIQUE 约束的字段在表中必须是不同的;
  • UNIQUE 索引允许 NULL 包含的列具有多个值 NULL;

不能为空:NOT NULL

  • 某些字段我们要求用户必须插入值,不可以为空,这个时候我们可以使用 NOT NULL 来约束;

默认值:DEFAULT

  • 某些字段我们希望在没有设置值时给予一个默认值,这个时候我们可以使用 DEFAULT 来完成;

自动递增:AUTO_INCREMENT

  • 某些字段我们希望不设置值时可以进行递增,比如用户的 id,这个时候可以使用 AUTO_INCREMENT 来完成;

外键约束也是最常用的一种约束手段,我们再讲到多表关系时,再进行讲解;