DDL(Data Definition Language) 数据定义语言
用于创建、修改、删除数据库中的各种对象(数据库、表、视图、索引等)常用命令有create、alter、drop
数据库的增删选查
查看数据库:show databases;
创建数据库:create database 数据库名称;
选择使用数据库:use 数据库名称
删除数据库:drop database 数据库名称;
数据表的增删改查
创建数据表:create table 表名(字段名 数据类型 [约束条件],字段名2 数据类型2 [约束条件2]);
查看当前数据库中所有表:show tables;
查看表结构:desc 表名;(describe,简写为desc,descending 降序排序的简写也是desc )
删除数据表:drop table 表名;
修改表名:alter table 原表名 rename 新表名;
修改字段名:alter table 表名 change 原字段名 新字段名 数据类型 [自增/非空/默认] [字段位置];
修改字段类型:alter table 表名 modify 字段名 新数据类型 [自增/非空/默认] [字段位置];
修改字段的排列位置:
alter table 表名 modify 字段名 数据类型 [自增/非空/默认] first;
alter table 表名 modify 要排序的字段名 数据类型 [自增/非空/默认] after 参照字段;
添加字段:alter table 表名 add 新字段名 数据类型 [自增/非空/默认] [字段位置];
删除字段:alter table 表名 drop 字段名;
DML(Data Manipulation Language) 数据操作语言
用于操作数据库表中的记录,常用命令有insert、update、delete
插入数据
指定字段名插入数据:
insert into 表名(字段名1[,字段名2,…]) values(字段值 1[,字段值 2,…]);
不指定字段名插入数据:需要为表中每一个字段指定值,且值的顺序须和数据表中字段顺序相同
insert into 表名 values(字段值 1[,字段值 2,…]);
更新数据
update 表名 set 字段名1=字段值1[, 字段名2=字段值2[,…]][ where 更新条件];
删除数据
delete from 表名[ where 删除条件];
truncate 表名;(与delete from 表名一样,都是删除表中全部数据,保留表结构)
delete和truncate的区别:
delete可以添加where子句删除表中部分数据,truncate只能删除表中全部数据
delete删除表中数据保留表结构,truncate直接把表删除(drop table)然后再创建一张新表(create table),执行速度比delete快。
DQL(Data QueryLanguage) 数据查询语言
用于查询数据库表中的记录
基本结构:select <字段名> from <表名或视图名> where <查询条件>
单表查询
全表查询:select * from 表名;
查询指定列:select 字段1[,字段2,…] from 表名;
别名的设置:select 字段名 [as] 列别名 from 原表名 [[as] 表别名];
命名规则:字符(中文/英文)、数字和_,当别名中有空格或为纯数字时需要加引号
查询不重复的记录:select distinct 字段名[,字段名2,…] from 表名;
多个字段去重时,distinct关键字必须位于第一个字段前,多个字段完全一样的情况下,才会过滤
条件查询:条件查询:select 字段1[,字段2,…] from 表名 where 筛选条件;
空值查询:select 字段1[,字段2,…] from 表名 where 空值字段 is [not] null;
null空值是特殊的未知值,它不属于任何一种数据类型,跟任何类型的数据进行运算结果也都为null
模糊查询: select 字段1[,字段2,…] from 表名 where 字段 [not] like 通配符;
模糊查询只能用于字符串类型的字段
百分号(%)通配符:匹配0个或多个字符
下划线( )通配符:匹配一个字符
查询结果排序:select 字段1[,字段2,…] from 表名 order by 字段1[ 排序方向,字段2 排序方向,…];指定排序方向:asc升序,desc降序(没有指定排序方向时,默认是asc升序)
多字段排序时,先按第一个字段排序,第一个字段值相同时再按第二个字段排序,如果第一个字段值都是唯一的,则不会按照第二个字段排序
限制查询结果数量:select 字段1[,字段2,…] from 表名 limit [偏移量,] 行数;
limit接受一个或两个数字参数,参数必须是一个整数常量
第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目
如果只给定一个参数,表示返回最大的记录行数目
初始记录行的偏移量是0(而不是1)
分组查询:select 字段1[,字段2,…] from 表名[ where 查询条件] group by 分组字段1[,分组字段2,…];
将查询结果按照一个或多个字段进行分组,多个字段之间没有先后顺序,字段值相同的为一组,对每个组内的多条记录进行聚合计算
分组聚合后,select子句中只能出现分组字段和聚合字段
在mysql 5.7.5或之后的版本:
允许在select、having和order by中使用没有出现在group by中的字段
允许在group by和having子句中可以引用select子句中设置的别名
分组后筛选:select 字段1[,字段2,…] from 表名[ where 筛选条件] group by 分组字段1[,分组字段2,…] having 筛选条件;
having 子句支持 where 子句中所有的运算符,having子句中的筛选字段必须是分组字段和聚合字段
where与having的区别:
where子句作用于表,having子句作用于组
where条件查询的作用域是针对数据表进行筛选,而having条件查询则是对分组结果进行过滤
where在分组聚合计算之前筛选行,而having 在分组聚合之后筛选分组的行,因此where子句不能使用聚合函数
select语句执行顺序:
from–> where --> group by --> having --> select --> order by --> limit
DCL(Data Control Language) 数据控制语言
用于定义数据库访问权限和安全级别,常用命令有grant、revoke