目录
1. SQL的概述
1.1 SQL的基本概念
我们都知道MySQL是一种常用的数据库,那么什么是SQL呢?SQL是结构化查询语言(Structured Query Language)的缩写,首先它是一门语言,其次它也定义了操作所有关系型数据库的规则
1.2 SQL的分类
虽然说SQL是一门语言,但其实在SQL中也有不同语言种类的细分,这里及随后的文章主要介绍以下四种:
- DDL(Data Definition Language)数据定义语言:用于定义数据库对象,数据库、表等,关键字有:
create
、drop
、alter
等 - DML(Data Manipulation Language)数据操作语言:用来对数据库中表的数据进行增删改,关键字有:
insert
、delete
、update
等 - DQL(Data Query Language)数据查询语言:用来查询数据库中表的记录(数据),关键字有:
select
、where
等 - DCL(Data Control Language)数据控制语言:用来定义数据库的访问权限和安全级别以及创建用户,了解即可,关键字:
grant
、revoke
等
1.3 SQL的通用语法
前文说到SQL定义了操作所有关系型数据库的规则,但每一种关系型数据库都有其特有的操作方式,这种称为“方言”,因此我们需要来认识一下SQL的通用语法,在任何关系型数据库中都适用:
- SQL语句可以单行或多行书写,以分号结尾
- SQL语句可以用空格和缩进来增强语句的可读性
- 注释形式有两种:单行注释:
-- 注释内容
(注意- -后有空格,必须得有),多行注释:/* 注释内容 */
另外,MySQL数据库的SQL语句不区分大小写,关键字建议使用大写;在单行注释中,MySQL有特有的注释格式:
# 注释内容
(#后的空格有无都可)
1.4 MySQL的架构
我们都知道MySQL是一款数据库,那么这个数据库是怎么存储数据的呢?因此我们有必要来了解一下MySQL的架构,直观点,来看一个图
ok,明白了?那就继续看下面的内容
2. DDL操作数据库
数据库的操作主要就是增删改查,也就是CRUD(Create、Retrieve、Update、Delete),下面来了解一下相关的操作语句
2.1 数据库的创建与查询
创建(Create):
- 创建数据库:
create database 数据库名称;
- 创建数据库,判断不存在后再创建:
create database if not exists 数据库名称;
- 创建数据库,并指定字符集:
create database 数据库名称 character set 字符集名称;
- 创建数据库,判断不存在后再创建,并指定字符集:
create database if not exists 数据库名称 character set 字符集名称;
查询(Retrieve):
- 查询所有数据库的名称:
show databases;
- 查询某个数据库的字符集(查询某个数据库的创建语句):
show create database 数据库名称;
下面就来演示一下创建与查询的过程
2.2 数据库的修改、删除和使用
修改(Update):
- 修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;
删除(Delete):
- 删除数据库:
drop database 数据库名称;
- 删除数据库,判断存在后再删除:
drop database if exists 数据库名称;
使用数据库:
- 使用数据库:
use 数据库名称;
- 查询当前正在使用的数据库名称:
select database();
国际惯例,下面还是利用刚刚前文创建的db1演示一下
3. DDL操作表
前面已经介绍过了SQL的架构,表是在数据库中的,因此我们需要先进去数据库才能对表进行操作(即use 数据库名称;
),下面开始正事
3.1 表的查询
- 查询数据库中的所有的表:
show tables;
- 查询表的结构:
desc 表名;
- 查询表的字符集:
show create table 表名;
这里先不演示查询表的结构(因为还没说怎么创建呢),先演示一下查询数据库中的所有表
嗯?怎么是empty?废话,还没创建呢,下面看看如何创建
3.2 表的创建
说创建之前,我们先来想象一下我们平时接触到的表是咋样的,是不是有个标题栏,然后后面就存放数据,那定义一个表需要定义的显然就是这些标题栏,就是定义你希望这个表所存储的东西,好啦下面看看如何定义
- 创建表:
create table 表名(列名1 数据类型1, 列名2 数据类型2, ... , 列名n 数据类型n);
- 复制表:
create table 表名 like 被复制的表名;
咦,数据类型?这是我们在java中学的数据类型吗?其实不是,SQL也有自己规定的一套数据类型:
- 整数类型:
int
- 小数类型:
double(m,n)
,m位数据,n位小数 - 日期(只包含年月日):
date
,格式yyyy-MM-dd - 日期(包含年月日时分秒):
datetime
,格式yyyy-MM-dd HH:mm:ss - 时间戳(包含年月日时分秒):
timestamp
,格式yyyy-MM-dd HH:mm:ss - 字符串:
varchar(n)
,最多n个字符
注意,上述数据类型中,时间戳类型是挺常用的,在不赋值的情况下该类型的日期数据只需要稍作设置便可以实现自动写入当前系统时间,下面来介绍一下他的设置方法:
- 在创建新记录和修改现有记录的时候都对这个数据列刷新:
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它:
TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- 在创建新记录的时候把这个字段设置为0,以后修改时刷新它:
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
- 在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它:
TIMESTAMP DEFAULT ‘yyyy-MM-dd HH:mm:ss' ON UPDATE CURRENT_TIMESTAMP
另外,时间戳类型通常也会设定为非空约束(NOT NULL
),至于什么是非空约束后续的文章会继续介绍,这里只需要了解即可,这里以上述的第一个方式来给出它的定义方式:
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
好啦介绍了那么多,下面还是来操作一下
3.3 表的删除
- 删除表:
drop table 表名;
- 删除表,判断存在后再删除:
drop table if exists 表名;
操作很简单,还是演示时间
3.4 表的修改
- 修改表名:
alter table 表名 rename to 新表名;
- 修改表的字符集:
alter table 表名 character set 字符集名称;
- 往原表上添加一列:
alter table 表名 add 列名 数据类型;
- 修改列名称:
alter table 表名 change 列名 新列名 新数据类型;
- 修改列数据类型:
alter table 表名 modify 列名 新数据类型;
- 删除列:
alter table 表名 drop 列名;
几个命令都很好理解,照样还是演示时间
至此,DDL的相关操作已经介绍完了,随后的文章将会继续介绍DML、DQL以及约束等内容