数据库基础操作
DDL:操作数据库,表
操作数据库:CRUD
C (create): 创建
create dabatase 数据库名称; -- 创建数据库 create database if not exists 数据库名称; -- 创建数据库,判断不存在再创建 create database 数据库名称 character set 字符集名; --创建数据库,指定字符集 create database if not exists DB character set gbk; -- 指定字符集gbk,判断是否存在再创建
R (retieve): 查询
show databases; -- 查询数据库名称 show create database 数据库名称; -- 查询某个数据库的字符集:查询某个数据库的创建语句
U (update): 修改
alter database 数据库名称 character set 字符集名称; --修改数据库的字符集
D (delete): 删除
drop database 数据库名称; -- 删除数据库 drop database if exists 数据库名称; -- 判断数据库存在,存在再删除
使用数据库
select database(); -- 查询正在使用的数据库 use 数据库名称; -- 使用数据库
操作表
增加
create table 表名( 列名1 数据类型1, 列名2 数据类型2, ... 列名n 数据类型n -- 最后一列不加逗号 );
常用mysql数据库类型:
int | 整数类型 |
---|---|
double | 小数类型 |
date | 日期,只包括年月日 |
timestamp | 时间戳类型,包括年月日时分秒(如果不赋值,默认系统时间) |
datetimp | 日期,包括年月日时分秒 |
varchar | 字符串,varchar(20)最大20个字符的意思 |
查询
show tables; -- 查询某个数据库中的所有表名称 desc 表名; -- 查询该表结构
修改
alter table 表名 remove to 新表名; -- 修改表名 alter table 表名 character set 新字符集名称; -- 修改该表字符集 alter table 表名 add 列名 数据类型; -- 添加一列 alter table 表名 change 列名 新列名 新数据类型; -- 修改列名称,类型 alter table 表名 drop 列名; -- 删除列
删除
drop table 表名; -- 删除表 drop table if exists 表名; -- 判断是否存在,再删除表
DML:增删改表中数据
添加数据
insert into 表名(列名1,列名2...列名n) values (值1,值2...值n);
删除数据
delete from 表名 where 条件;
注意:
1. 如果不加条件,则删除表中所有记录 2. 如果要删除所有记录: + `delete from 表名; -- 不推荐,逐条删除,效率不高` + `truncate table 表名; -- 推荐,先删除整张表,再建一个一样的表`
修改数据
update 表名 set 列名1 = 值1, 列名2 = 值2 ...where 条件;
注意:如果不加任何条件,则将表中该列所有数据全部修改
DQL:查询表中的记录
语法:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
基础查询
-
多个字段查询:
select 字段名1,字段名2...字段名n from 表名;
注意:如果查询所有字段可以使用 * 来代替字段列表
-
去除重复:
distinct
-
计算列:
-
可以使用四则运算计算一些列的值(一般只会进行数值型的计算)
-
IFNULL(表达式1,表达式2):NULL参与运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
-
-
起别名:
as: as也可省略
条件查询
-
where 子句后跟条件
-
运算符:
<, >, =, >=, <=, =, <>
between..and..
IN(集合)
LIKE
: 模糊查询==> 占位符" _"(下划线),"%"例如:NAME LIKE '%陈%'
IS NULL
and 或 &&
or 或 ||
not 或 |
排序查询
-
语法:
order by 子句; order by 排序字段1 排序方式1, 排序字段2 排序方式2...;
-
排序方式:
ASC:升序,默认的
DESC:降序
-
注意:如果多个条件,则前边条件值一样时,才会判断下一个条件
聚合函数
函数名 | 说明 |
---|---|
count | 计算个数;一般选择非空的列(主键);count(*) |
max | 计算最大值 |
min | 计算最小值 |
sum | 计算和 |
avg | 计算平均值 |
聚合函数计算,排除null值
解决方案:
-
选择不包含非空列的计算
-
IFNULL函数
分组查询
-
语法:
group by 分组字段;
-
注意:
-
分组之后查询的字段:分组字段,聚合函数
-
where 和 having 的区别:
-
where 在分组前进行限定,如果不满足条件,则不参与分组;
-
having 在分组后进行限定,如果不满足条件,则不会被查出来
-
where 后不可以接聚合函数,having 后可以接聚合函数判断
-
-
分页查询
-
语法:
limit 开始索引, 每页查询的条数;
-
公式:
开始索引 = (当前的页码 - 1) * 每页显示条数
-
limit 是 mySQL 的"方言"
约束
非空约束:not null
创建表时添加约束:
create table 表名( 列名1 数据类型1, 列名2 数据类型2 not null );
创建表完后,添加非空约束:
alter table 表名 modify 列名 数据类型 not null;
删除非空约束:
alter table 表名 modify 列名 数据类型;
唯一约束:unique
创建表时添加唯一约束:
create table 表名( 列名1 数据类型1, 列名2 数据类型2 unique );
删除唯一约束:
alter table 表名 drop index 列名;
在创建表后,添加唯一约束:
alter table 表名 modify 列名 数据类型 unique;
主键约束:primary key
注意:
-
含义:非空且唯一
-
一张表中只能有一个字段为主键
-
主键就是表中记录的唯一标识
创建表时,添加主键约束:
create table 表名( 列名1 数据类型1 primary key, 列名2 数据类型2 );
删除主键:
alter table 表名 drop primary key;
创建表后,添加主键:
alter table 表名 modify 列名 数据类型 primary key;
自主增长:auto_increment
概念:
如果某一列是数值类型的,使用auto_increment可以用来完成自动增长
创建表时添加主键约束,并完成主键自动增长
自动增长多用于主键,故以主键 id 为例
create table 表名 ( id int primary key auto_increment name varchar(20) );
删除自动增长
alter table 表名 modify id int;
创建表后,添加自动增长
alter table 表名 modify id int auto_increment;
外键约束:foreign key
创建表时,添加外键:
create table 表名( ... 外键列 constrain 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) )
删除外键:
alter table 表名 drop foreign key 外键名称;
创建表后,添加外键:
alter table 表名 add constrain 外键名称 foreign key (外键列名称) references 主表名称(主表列名称);
级联操作:
-
添加级联操作:
alter table 表名 add constrain 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) on update cascade;
-
分类:
on update cascade; -- 级联更新 on delete cascade; -- 级联删除