一、概述
最近还在继续学习JavaWeb,曾经学习过数据库,这次就当是复习学过的知识了。由于自己学识浅薄,文章中可能出现错误或不足之处,恳请读者批评指正。
二、SQL简介
sql是结构化查询语言。一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
2.1语法结构
1、SQL语句可以单行或多行书写,以分号结尾。
如上图中两种形式都是可以的,但第一种形式可读性更强,另外需要注意的是在语句的结尾后要加上分号,证明语句的结束
2、SQL语句可以使用空格/缩进来增强语句的可读性
3、MySQL数据库的SQL语句不区分大小写。
4、注释
单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
多行注释: /* 注释内容 */
2.2数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
字符串类型
char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。
日期时间类型
2.3分类
SQL语句根据其功能被分为四大类:DDL、DML、DQL、DCL
我们只需要关注前三类即可,最后一类通常由数据库管理员使用
2.4DDL
2.3.1数据库操作
查询数据据库:
-- 显示所有的数据库,上面已演示过
show databases;
查询当前的数据库:
select database();
创建数据库:
语法:
create database [ if not exists ] 数据库名;
[ ]中的内容可以省略,但当被创建的数据库已存在是会报错:
使用数据库:
use 数据库名;
删除数据库:
drop database [if exists] 数据名;
当要删除的数据库不存在时,会报错,添加‘if exists’会避免报错;
上述所有的语句中,'database',可以换成schema 或 ‘databases’换成‘schemas’;
2.3.2表操作
DDL中关于表操作包括:创建表、删除表、查询表、修改表
创建表:
语法:
create table 表名(
字段1 字段1类型 [约束] [comment 字段1注释],
字段2 字段2类型 [约束] [comment 字段2注释],
......
字段n 字段n类型 [约束] [comment 字段n注释]
)[comment 表注释 ];
注意: [ ] 中的内容为可选参数; 最后一个字段后面没有逗号
下面用语句创建如下表:
建表语句:
create table tb_user (
id int comment 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
username varchar(20) comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '用户表';
创建的表结构如下:
我们添加数据时,可以发现ID这个唯一标识可以存在相同的值:
这是因为,虽然我们给id字段的注释了是唯一标识符,但我们并没有真正规定它是唯一不能重复的,这就要用到我们下面要讲到的约束。
约束
概念:约束就是作用在表中字段上的规则,用于限制存储在表中的数据。
在MySQL数据库当中,提供了以下5种约束:
案例:
创建表语句:
create table tb_user (
id int primary key comment 'ID,唯一标识',
username varchar(20) not null unique comment '用户名',
name varchar(10) not null comment '姓名',
age int comment '年龄',
gender char(1) default '男' comment '性别'
) comment '用户表';
当我们在添加id相同的信息是就会报错,因为主键约束 规定字段唯一且非空:
修改表:
添加字段:
语法
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
举例
alter table tb_user add qq varchar(11) comment 'QQ号';
执行完上述语句后,表头多出qq字段:
修改数据类型:
alter table 表名 modify 字段名 新数据类型(长度);
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
将qq字段由varchar(11)修改为varchar(13)
alter table tb_user modify qq varchar(13);
将qq字段名改为QQ,类型改为varchar(11)
alter table tb_user change qq QQ varchar(13);
删除字段:
alter table 表名 drop 字段名;
删除qq字段
alter table tb_user drop qq;
修改表名
rename table 表名 to 新表名;
将表名tb_user改为tb_user_1
rename table tb_user to tb_user_1;
删除
drop table [ if exists ] 表名;
删除表tb_user
drop table if exists tb_user;
2.5DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
2.5.1增加
向指定字段添加数据:
insert into 表名 (字段名1, 字段名2) values (值1, 值2);
向所有字段添加数据:
insert into 表名 values (值1, 值2, ...);
向指定字段批量添加数据:
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
向所有字段批量添加数据:
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
2.5.2修改
update语法:
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
2.5.3删除
delete语法:
delete from 表名 [where 条件] ;
2.6DQL
DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。在实际的业务中查询占有比重很多,所以非常重要。
语法结构:
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
2.6.1基本查询(不带条件的查询)
语法:
# 查询多个字段
select 字段1,字段2 from 表名;
# 查询所有字段
select * from 表名;
# 设置别名
select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名;
# 去除重复记录
select distinct 字段列表 from 表名;
2.6.2条件查询
语法:
select 字段列表 from 表名 where 条件列表 ;
在sql中构建条件的运算符分为比较运算符和逻辑运算符:
常用的比较运算符如下:
常用的逻辑运算符如下:
2.6.3聚合函数
之前我们做的查询都是横向查询,就是根据条件一行一行的进行判断,而使用聚合函数查询就是纵向查询,它是对一列的值进行计算,然后返回一个结果值。
语法:
select 聚合函数(字段列表) from 表名 ;
常用的聚合函数:
2.6.4分组查询
分组就是按列进行分类(指定列下相同的数据归为一类),然后可以对分类完的数据进行合并计算。分组查询通常会使用聚合函数进行计算。
语法:
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
2.6.5排序查询
select
字段列表
from
表名
[where 条件列表]
[group by 分组字段 ]
order by
字段1 排序方式1 , 字段2 排序方式2 … ;
排序方式:ASC:升序, DESC:降序 。默认情况下是升序排序
注意事项:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
2.6.6分页查询
语法:
select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
索引从0开始,查询语句的意思即为从起始索引开始,查询“查询记录数”个记录
第i页的起始索引=(i-1)* 查询记录数 ,i=1时起始索引可以省略