基础篇
通用语法及分类
- DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)
- DML: 数据操作语言,用来对数据库表中的数据进行增删改
- DQL: 数据查询语言,用来查询数据库中表的记录
- DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限
DDL(数据定义语言)
数据库操作
-
查询所有数据库:
show databases;
-
查询当前数据库
select database();
-
创建数据库
create database [if not exists] 数据库名;
-
删除数据库
drop database [if exists] 数据库名;
-
使用数据库
use 数据库名;
表操作
-
查询当前数据库的所有表
show tables;
-
查询表结构
desc 表名; # 但是不会显示出来注释信息,需要查询建表语句才能显示出来
-
查询指定表的建表语句
show create table 表名;
-
创建表
CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1注释], 字段2 字段2类型 [COMMENT 字段2注释], 字段3 字段3类型 [COMMENT 字段3注释], ... 字段n 字段n类型 [COMMENT 字段n注释] # 注意逗号 )[ COMMENT 表注释 ];
create table test_age( id int comment '编号', name varchar(50) comment '姓名', age int comment '年龄', sex varchar(1) comment '性别' ) comment 'test_7';
数据类型
age tinyint unsigned # 年龄 够用范围下的无符号数
score double(4, 1) # 整体长度为4,小数长度为1
varchar(10) # 超过10个字符串大小将报错
char(10) # 即使1个字符,也会占用10个字符的存储空间 性能好
# 一个汉字占用3个字节,但是是算一个字符
修改表
-
添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
-
修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
-
删除字段
alter table 表名 drop 字段名;
-
修改表名
alter table 表名 rename to 新表名;
-
删除表
drop table 表名;
-
删除表,并重新创建该表
truncate table 表名;
DML(数据操作语言)
添加数据
-
指定字段添加数据
insert into 表名 (字段名1, 字段名2...) values (值1, 值2...);
-
全部字段
insert into 表名 values (值1, 值2...);
-
批量添加数据
insert into 表名 (字段名1, 字段名2...) values (值1, 值2...),(值1, 值2...)...(值1, 值2...); insert into 表名 values (值1, 值2...),(值1, 值2...)...;
修改数据
-
修改数据
update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... [ where 条件 ]; # 没有where条件时就是修改表内所有的数据 update test set name = 'ucas' where id = 1;
-
删除表中数据
drop table 是删除整张表(结构和数据)
delete from 表名 [where 条件]; # 没有条件就是删除所有数据 # delete不能删除某一个字段的值(可以使用update更新某个字段的值为NULL)
DQL(数据查询语言)
select
字段列表
from
表名字段
where
条件列表
group by
分组字段列表
having
分组后的条件列表
order by
排序字段列表
limit
分页参数
基础查询
-
查询字段
select 字段1, 字段2, ... from 表名; # *为全部字段,但是在开发中尽量不要使用
-
设置显示别名
select 字段1 as '地址' from 表名; # as可以省略
-
去除重复记录
select distinct 字段1 from 表名;
条件查询
select 字段 from 表名 where 条件列表;
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
between… and… | 在某个范围内(含最小、最大值) |
in(…) | 在in之后的列表中的值,多选一 |
like占位符 | 模糊匹配:_匹配单个字符,%匹配任意个字符 |
is null | 是NULL |
逻辑运算符 | 功能 |
---|---|
and 或 && | 并且(多个条件同时成立) |
or 或 || | 或者(多个条件任意一个成立) |
not 或 ! | 非,不是 |
# 没有身份证
select * from employee where idcard is null ;
# 不等于
select * from employee where age != 30; #<> 30
# 年龄在20到30之间
select * from employee where age between 20 and 30;
# 下面语句不报错,但查不到任何信息
select * from employee where age between 30 and 20;
# 年龄等于25或30或35
select * from employee where age = 25 or age = 30 or age = 35;
select * from employee where age in (25, 30, 35);
# 姓名为两个字
select * from employee where name like '__';
# 身份证最后为X
select * from employee where idcard like '%X';
聚合函数
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
select 聚合函数(字段列表) from 表名;
select count(*) from emp where age = 88;
# NULL值不参与所有聚合函数运算 但select*还是会显示,只是单独的字段时