SQL语句

内容概述

1.SQL简介
2.SQL基本规则
3.MySQL数据库操作
4.MySQL数据库中的数据的类型
5.MySQL系统变量

内容详解

1.SQL简介

SQL简介

对数据库进行查询和修改操作的语言叫做 SQL(Structured Query Language,结构化查询语言)。
SQL 语言是目前广泛使用的关系数据库标准语言,是各种数据库交互方式的基础。著名的大型商用数据库 Oracle、DB2、Sybase、SQL Server,开源的数据库 PostgreSQL、MySQL,甚至一些小型的数据库 Access 等都支持 SQL。
近些年蓬勃发展的 NoSQL 系统最初是宣称不再需要 SQL 的,后来也不得不修正为 Not Only SQL,来拥抱 SQL.

SQL是什么?

SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。与其他程序设计语言(如 C语言、Java 等)不同的是,SQL 由很少的关键字组成,每个 SQL 语句通过一个或多个关键字构成。
# SQL具有如下优点:
1.一体化:SQL 集数据定义、数据操作和数据控制于一体,可以完成数据库中的全部工作
2.使用方法灵活:SQL 具有两种使用方式,可以直接以命令方式交互使用;也可以嵌入使用,嵌入C、C++、Fortran、COBOL、Java 等语言中使用。
3.非过程化:只提操作要求,不必描述操作步骤,也不需要导航。使用时只需要告诉计算机“做什么”,而不需要告诉它“怎么做”,存储路径的选择和操作的执行由数据库管理系统自动完成。
4.语言简介,语法简单:该语言的语句都是由描述性很强的英语单词组成,而且这些单词的数目不多。

1.)数据定义语言

创建或删除数据库以及表等对象
# DROP	删除数据库和表等对象
# CREATE	创建数据库和表等对象
# ALTER		修改数据库和表等对象的结构

2.)数据操作语言

用来变更表中的记录
# SELECT	查询表中的结构
# INSERT	向表中插入数据
# UPDATE	更新表中的数据
# DELETE	删除表中的数据

3.)数据查询语言

用来查询表中的记录,主要包含SELECT命令,来查询表中的数据

4.)数据控制语言

用来确认或取消对数据库中的数据进行的变更。除此之外,还可以对数据库中的用户设定权限,主要包含以下几种命令
# GRANT	赋予用户操作权限
# REVOKE	取消用户的操作权限
# COMMIT	确认对数据库中的数据进行的变更
# ROLLBACK	取消对数据库中的数据进行的变更

2.SQL基本规则

对于 SQL 初学者,在写 SQL 语句时,只要遵守下面几个书写规则,就可以避免很多错误。这些规则都非常简单,下面我们来逐一介绍。

SQL 语句要以分号;结尾

在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。
我们通常在句子的句尾加注标点表示这句话结束,中文句子以句号。结尾,英文以点号.结尾,而 SQL 语句则使用英文分号;结尾。

SQL 语句不区分大小写

可以根据个人喜好选择大写或小写(或混用)
# 关键字大写
# 数据库名,表名和列名等小写
需要注意的是,插入到表中的数据是区分大小写的

3.MySQL数据库操作

1.查看数据库

在SQL语言中,数据库相当于文件夹。主要用来存放某一个相同项目的数据。

# 查看所有数据库
show databases;

# 查看数据库定义
show create database 数据库名;

# 查看正在使用的数据库
use 数据库名;

2.创建数据库

MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写

IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。

[DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集。

[DEFAULT] COLLATE:指定字符集的默认校对规则。

格式:
CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>] [[DEFAULT] COLLATE <校对规则名>];

create database if not exists test01 character set utf8 collate utf8_general_ci;

3.修改数据库

在 MySQL 中,可以使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。
修改数据库的语法格式为:
ALTER DATABASE [数据库名] {[ DEFAULT ] CHARACTER SET <字符集名> | [ DEFAULT ] COLLATE <校对规则名>}
  # 语法说明:ALTER DATABASE 用于更改数据库的全局特性。使用 ALTER DATABASE 需要获得数据库 ALTER 权限。数据库名称可以忽略,此时语句对应于默认数据库。CHARACTER SET 子句用于更改默认的数据库字符集。
  show create database test01; 
  > ALTER DATABASE test01 -> DEFAULT CHARACTER SET utf8 
  -> DEFAULT COLLATE utf8_general_ci;
  show create database test01;

4.指定数据库

在 MySQL 中就有很多系统自带的数据库,那么在操作数据库之前就必须要确定是哪一个数据库。在 MySQL 中,USE 语句用来完成一个数据库到另一个数据库的跳转。

当用 CREATE DATABASE 语句创建数据库之后,该数据库不会自动成为当前数据库,需要用 USE 来指定当前数据库。其语法格式为:use 数据库名称
use tset01;

5.删除数据库

当数据库不再使用时应该将其删除,以确保数据库存储空间中存放的是有效数据。删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。

在 MySQL 中,当需要删除已创建的数据库时,可以使用 DROP DATABASE 语句。其语法格式为:
drop database if exists <数据库名>;
# 语法说明:
<数据库名>:指定要删除的数据库名。
IF EXISTS:用于防止当数据库不存在时发生错误。
DROP DATABASE:删除数据库中的所有表格并同时删除数据库。使用此语句时要非常小心,以免错误删除。如果要使用 DROP DATABASE,需要获得数据库 DROP 权限。

drop database tser01;

# 注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,系统数据库存放一些和数据库相关的信息,如果删除了这两个数据库,MySQL 将不能正常工作。

4.MySQL数据库中的数据的类型

1.MySQL整数类型

整数类型又称数值型数据,数值型数据类型主要用来存储数字。

MySQL 提供了多种数值型数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,所需的存储空间也会越大。

MySQL 主要提供的整数类型有 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。下表中列出了 MySQL 中的数值类型。
类型名称 说明
TINYINT 很小的整数
SMALLINT 小的整数
MEDIUMINT 中等大小的整数
INT (INTEGHR) 普通大小的整数
BIGINT 大整数

2.MySQL小数类型

MySQL 中使用浮点数和定点数来表示小数。

浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。

浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。

浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。

下表中列出了 MySQL 中的小数类型和存储需求。
类型名称 说明
FLOAT 单精度浮点数
DOUBLE 双精度浮点数
DECIMAL (M, D) 压缩的“严格”定点数

3.MySQL字符串类型

字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。

MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。

下表中列出了 MySQL 中的字符串数据类型,括号中的M表示可以为其指定长度。# 这里面用的比较多的还是CHAR和VARCHAR

VARCHAR 和 TEXT 类型是变长类型,其存储需求取决于列值的实际长度(在前面的表格中用 L 表示),而不是取决于类型的最大可能尺寸。
例如,一个 VARCHAR(10) 列能保存一个最大长度为 10 个字符的字符串,实际的存储需要字符串的长度 L 加上一个字节以记录字符串的长度。对于字符 “abcd”,L 是 4,而存储要求 5 个字节。
类型名称 说明 存储需求
CHAR(M) 固定长度非二进制字符串 M 字节,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT 非常小的非二进制字符串 L+1字节,在此,L<2^8
TEXT 小的非二进制字符串 L+2字节,在此,L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此,L<2^24
LONGTEXT 大的非二进制字符串 L+4字节,在此,L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目 (最大值为65535)
SET 一个设置,字符串对象可以有零个或 多个SET成员 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

4.MySQL日期和时间类型

MySQL 中有多处表示日期的数据类型:YEAR、TIME、DATE、DTAETIME、TIMESTAMP。当只记录年信息的时候,可以只使用 YEAR 类型。每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。
下表中列出了 MySQL 中的日期与时间类型。datetime 和 timestamp 之间的区别:
1、两者的存储方式不一样    
  对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。    
  对于DATETIME,不做任何改变,基本上是原样输入和输出。    
2、两者所能存储的时间范围不一样    
  timestamp所能存储的时间范围为:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。    
  datetime所能存储的时间范围为:‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
类型名称 日期格式 日期范围
YEAR YYYY 1901 ~ 2155
TIME HH:MM:SS -838:59:59 ~ 838:59:59
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-3
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC

5.MySQL二进制类型

MySQL 中的二进制字符串有 BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
类型名称 说明 存储需求
BIT(M) 位字段类型 大约 (M+7)/8 字节
BINARY(M) 固定长度二进制字符串 M 字节
VARBINARY (M) 可变长度二进制字符串 M+1 字节
TINYBLOB (M) 非常小的BLOB L+1 字节,在此,L<2^8
BLOB (M) 小 BLOB L+2 字节,在此,L<2^16
MEDIUMBLOB (M) 中等大小的BLOB L+3 字节,在此,L<2^24
LONGBLOB (M) 非常大的BLOB L+4 字节,在此,L<2^32

5.MySQL系统变量

在 MySQL 数据库,变量分为系统变量和用户自定义变量。系统变量以 @@ 开头,用户自定义变量以 @ 开头。

服务器维护着两种系统变量,即全局变量(GLOBAL VARIABLES)和会话变量(SESSION VARIABLES)。全局变量影响 MySQL 服务的整体运行方式,会话变量影响具体客户端连接的操作。

每一个客户端成功连接服务器后,都会产生与之对应的会话。会话期间,MySQL 服务实例会在服务器内存中生成与该会话对应的会话变量,这些会话变量的初始值是全局变量值的拷贝。

查看系统变量

可以使用以下命令查看MySQL中所用的全局变量信息
SHOW GLOBAL VARIABLES;

可以使用以下命令查看与当前会话相关的所有会话变量以及全局变量
SHOW SESSION VARIABLES;

其中,SESSION 关键字可以省略。
posted @ 2021-09-25 14:24  堇雪月寒风  阅读(135)  评论(0编辑  收藏  举报
Live2D