一、数据库基础

1.术语

(1)数据库:DataBase,DB
(2)数据库管理系统:DataBase Management System,DBMS
(3)SQL语言:结构化查询语言(Structured Query Language),定义操作所有关系型数据库的统一标准。

2.关系型数据库

        关系型数据库是建立在关系模型基础上的数据库,由多张能互联的二维表组成。

二、SQL语言

1.通用语法

(1)可多行书写,以";"结尾
(2)不区分大小写,但关键字建议用大写
(3)注释:
        1)单行注释:-- 注释内容 或 #注释内容(这是MySQL特有的)
【注意】--后面必须跟一个空格!
        2)多行注释:/* 注释内容 */

2.SQL的分类

(1)DDL:Data Definition Language,数据定义语言,用来定义数据库对象(数据库、表、列等);
(2)DML:Data Manipulation Language,数据操作语言,用来对数据库中表的数据进行增删改
(3)DQL:Data Query Language,数据查询语言,用来查询数据库中表的数据;
(4)DCL:Data Control Language,数据控制语言,用来定义数据库的访问权限安全级别创建用户

3.DDL

(1)DDL操作数据库:

show databases; 查看所有现有数据库。
create database name; 创建一个名为name的数据库
create database if not exits name;
创建一个名为name的数据库(判断如果不存在才创建)。
drop database name; 删除一个名为name的数据库
drop database if exits name;
删除一个名为name的数据库(判断如果存在才删除)
select database(); 查看当前使用的数据库。
use name; 使用(进入)名为name的数据库。

(2)DDL操作表(Set):

        1)创建表:
create table t_name(
    字段1 数据类型1,
  字段2 数据类型2,
     ... ,
  字段n 数据类型n
)
【注意】字段间用","隔开,最后一个就不用加","了。
        2)查询表:
show tables; 查看当前数据库下的所有表的名称。
desc name; 查看表name的表结构。
        3)修改表alter
alter table t_name rename to new_name; 修改t_name表名为新表名new_name。
alter table t_name add 列名 数据类型;
添加列。
alter table t_name drop 列名;
删除列。
alter table t_name modify 列名 新数据类型;
修改某一列的数据类型。
alter table t_name change 列名 新列名 新数据类型; 修改列名及其数据类型。
【tips】修改表时,都要先用alter table t_name,再接rename/add/drop/modify/change等具体操作。
        4)删除表:
drop table t_name; 删除表t_name;
drop table if exits t_name;
带判断的删除表操作。

4.MySQL中的数据类型

        MySQL支持多种数据类型,大致可以分为四类:数值型、浮点型、日期/时间、字符串(字符)类型。

(1)数值型

数据类型 大小(bytes) 说明
tinyint 1 相当于byte
smallint 2 相当于short
mediumint 3
int(integer) 4 相当于int
bigint 8 相当于long

(2)浮点型

float 4 单精度浮点数
double 8 双精度浮点数
decimal
可用来保存具有小数点而且数值确定的数值
【tips】:使用double需要确定两个参数,double(总长度,小数点后保留的位数),比如定义一个成绩字段,总分0-100,小数点后保留两位小数,则:
score double(5,2)
这里的总长度指的是整数部分+小数部分,所以是3+2=5。

(3)日期/时间

date 3 日期值,年月日
time 3 时间值或持续时间,时分秒
year 1 年份
datetime 8 日期和时间值,年月日时分秒
timestamp  4 日期和时间值 或 时间戳

(4)字符串类型(常用的两种)

char 0-255 定长字符串
varchar 0-65535 变长字符串
【tips】使用时都要给定长度:char(10)   varchar(20);
             ②char与varchar的区别:
                a. char是定长字符串,给定总长度后无论存储的数据多长,都是固定的等于总长度,小于总长度部分用空格填充;而varchar是变长字符串,存储数据多长就是多长;
                b. char浪费空间,节省时间;varchar浪费时间(需要判断存储的数据有多长),节省空间。

5.DML

(1)添加(insert)

insert into 表名(列1,列2) values (值1,值2); 给指定的列添加数据。
insert into 表名 values (值1,值2,...,值n);
给所有的列添加数据(省略列名即可)。
insert into 表名(列1,列2) values (值1,值2),(值11,值22),(值111,值222);
批量添加
insert into 表名 values (值1,值2,...,值n),(值11,值22,...,值nn),(值111,值222,...,值nnn);

(2)修改(update)

update 表名 set 列1=值1,列2=值2 where 条件; 按条件修改表中列1和列2的值。

(3)删除(delete)

delete from 表名 where 条件; 按条件删除表中数据。
【注意】不加where条件时,会删除整个表格里的数据!

6.DQL

(1)基础查询

select 字段列表 from 表名; 查询多个字段的数据,*代表查询所以字段的数据。
select from 表名;
select distinct 字段列表 from 表名; 查询多个字段的数据,并去除重复数据
select 字段1 as 别名1,字段2 as 别名2 from 表名;
查询多个字段的数据,并将字段重新命名
【tips】as可以省略,但要留个空格。

(2)条件查询(where)

select 字段列表 from 表名 where 条件列表;
按条件查询字段的数据。
【tips】①常见的条件判断符:
>、<、>=、<= 大于、小于、大于等于、小于等于
= 等于
<>或!= 不等于
between A and B 大于等于A,小于等于B
in(A,B,C) 多选一
like 占位符 模糊查询
is null 是null
is not null 不是null
and 或 &&
or 或 ||
not 或 !
          ②like 占位符:模糊查询。
              通配符:_,匹配单个任意字符;%,匹配多个(0,1,多都行)任意字符。
用法:查询姓“张”的学生信息:
select * from stu where name like "张%";
查询第二个字是“花”的学生信息:
select * from stu where name like "_花%";

(3)排序查询(order by)

select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
按排序要求查询字段的数据。
【tips】①排序方式有两种:升序asc(默认)和降序(desc)。
             ②当有多个排序条件时,前面的条件值一样时,才会根据第二条件排序,如:查询学生信息,按数学成绩升序排序(第一条件),如果数学成绩一样,再按英语成绩降序排序(第二条件)。
select * from stu order by math,english desc;

(4)分组查询(group by)

        1)聚合函数:对一列数据进行计算。
                a.聚合函数分类:
count(列名) 统计数量
max(列名) 求最大值
min(列名) 求最小值
sum(列名) 求和
avg(列名) 求平均值
                【tips】①使用count(列名)统计数量时,不能选用有null数据的列;
                             ②null不参与所有的聚合函数计算。
                b.聚合函数用法:查询数学成绩的最高分:
select max(math) from stu;
        2)分组查询语法
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];
分组查询
【tips】①分组之后,查询的字段必须为聚合函数或分组字段!
             ②where和having的区别
                    a.执行时机不同:where用在分组前,满足条件才参与分组;having用在分组后,满足条件才留下。
                    b.where不能对聚合函数进行判断,而having可以。
             ③执行顺序:where > 聚合函数 > having。

(5)分页查询(limit)

        1)语法:
select 字段列表 from 表名 limit 起始索引,查询条目数;
分页查询
【tips】这里的索引从0开始,id默认自增的话是从1开始。起始索引 =(当前页码 - 1)* 每页显示的条目数。比如,每页显示3条数据,查询第2页的数据:起始索引 =(2-1)*3 = 3,查询条目数 = 3。
        2)MySQL数据库中分页查询用limit,Oracle用rownumber,SQL Server用top。