操作数据库(DDL)
连接数据库
mysql -u用户名 -p enter password:密码

退出数据库
exit quit
查看已经创建的数据库
SHOW DATABASES;
注意
- mysql不严格区分大小写
- 分号作为结束符,必须写
查看数据库版本
select version();
创建数据库
CREATE DATABASE 数据库名;
CREATE DATABASE 数据库名 charset=utf8;
注意
- charset:指定编码为utf8
查看创建数据库的命令
SHOW CREATE DATABASE 数据库名;
查看当前使用的数据库
SELECT DATABASE();
使用数据库
USE 数据库名;
删除数据库
DROP DATABASE 数据库名;
注意
- SQL语句不区分大小写
- 每行必须以英文状态下分号作为结束
- 当数据库名称有特殊字符时,使用
`包括。如:Logic_edu`
操作数据表
查看当前数据库中所有表
SHOW TABLES;
创建表
CREATE TABLE 数据表名(字段 类型 约束[, 字段 类型 约束])
约束
| unsigned | 无符号(正数) |
|---|---|
| zerofill | 前导零填充 |
| auto_increment | 自增 |
| default | 默认值 |
| not null | 非空 |
| PRIMARY KEY | 主键 (非null并不重复) |
| unique | 唯一性 (可以为null但不重复) |
| index | 常规索引 |
查看表的创建语句
SHOW CREATE TABLE 数据表名;
查看表描述信息
DESC 数据表名;
添加表字段
ALTER TABLE 数据表名 ADD 字段 类型;
修改表字段
ALTER TABLE 数据表名 MODIFY 字段 类型; — 不重命名 ALTER TABLE 数据表名 CHANGE 原字段名 新字段名 类型及约束; — 将字段重命名
删除表字段
ALTER TABLE 数据表名 DROP 字段;
练习
添加字段
- 字段名称:birthday
- 字段类型:DATETIME
修改字段
- 字段类型:DATE
修改字段
- 字段名称:birth
- 字段类型:DATE
删除该字段
操作数据
新增数据
整行插入
INSERT INTO 数据表名 VALUES(值1,值2,值3…);
指定列中插入数据
INSERT INTO tabname (字段1, 字段2,…) VALUES (值1,值2,….);
指定列中插入多条数据
INSERT INTO 数据表名 (字段1, 字段2,…) VALUES (值1,值2,…),(值1,值2,…);
修改数据
UPDATE 数据表名 SET 字段1=新值,字段2=新值 [WHERE 条件];
删除数据
DELETE FROM 数据表名 [WHERE 条件];
查询数据
查询整个表数据
SELECT * FROM 数据表名;
查询指定字段数据
SELECT 字段1,字段2 FROM 数据表名;
查询指定字段数据,并给字段起别名
SELECT 字段1 as 别名,字段2 as 别名 FROM 数据表名;
查询指定字段并去重
SELECT DISTINCT 字段1 FROM 数据表名;
注意,如果有多个字段时,是比较一整行数据是否重复,如果有一个字段不重复那都算不重复。
where子句
where子句通常结合增删改查使用,用于做筛选的条件。
比如,查询当id=1的数据
select * from Student where id=1
不仅如此,经常结合运算符使用。
比较运算符
| 运算符 | 描述 |
|---|---|
| = | 等于 |
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| !=或<> | 不等于 |
逻辑运算符
| 运算符 | 描述 |
|---|---|
| a and b | 当同时满足a,b时,则为True |
| a or b | 当满足a或b其中一个时,则为True |
| not a | 否定 |
模糊查询
like关键字用来进行模糊查询,并且结合%以及_使用。
- % 表示任意多个任意字符
- _ 表示一个任意字符
select from students where name like “__” — 仅有两个字符的学生信息 select from students where name like “__%” —至少含有两个字符的学生信息
范围查询
| 关键字 | 描述 |
|---|---|
| in | 表示在一个非连续的范围内 |
| between…and… | 表示在一个连续的范围内 |
select from students where id in(1,3,5); — id是1,3,5的信息, in里面的内容是or关系 select from students where id not in(1,3,5); — id不是1,3,5的信息 select from students where id between 2 and 4; — id是2~4的信息 select from students where id (between 3 and 5) and gender=”男”; —id是3~5且是男的信息
空判断
| 关键字 | 描述 |
|---|---|
| is null | 判断空 |
| is not null | 判断非空 |
常用聚合函数
count 总数
- 求students总人数
- 求男性的人数
- 女性的人数
select count() from students; —查询表有多少条数据 select count() from students where gender=”男”; —查询男的总人数
max() 最大值
- 查询最大的年龄
- 女性最大的id
select max(age) from studers; —查询最大的年龄
min() 最小值
- 查询未删除的学生的最小编号
select min(age) from studers; —查询最小的年龄
sum 求和
- 查询男生年龄和
select sum(age) from studers where gender = 1; —查询男的年龄总和
avg 平均值
- 查询未删除女生的年龄的平均值
- 计算男性的平均年龄,保留2位小数
select avg(age) from studers where gender = 1; —查询男的平均年龄,默认保留4位小数 加上round(avg(age), 2)可以限制保留的小数
分组与分组之后的筛选
分组

在数据库中,通过 group by 将查询结果按照1个或多个字段进行分组,字段值相同的为一组。
select … from students group by 需要分组字段;
group_concat(…)
我们通过group_concat(…)查看每组的详细信息
分组后的筛选

排序
order by 字段 默认升序 order by asc 字段 指定升序 order by desc 字段 指定降序
限制
limit start,count
- start 为偏移量,默认起始0
- count 为条数
注意:
- limit 不能写数学公式
- limit只能写在末尾
表连接
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回mysql。这时我们就需要使用表连接。
分类:
- 内连接
- 外连接
- 左连接
- 右连接
内连接
内连接仅选出两张表中互相匹配的记录
select * from 表1 inner join 表2 on 表1.列 = 表2.列;

左连接
查询的结果为两个表匹配到的数据,左表持有的数据,对于右表中不存的数据使用null填充
select * from 表1 left join 表2 on 表1.列 = 表2.列;

练习:
- students表左连接classes表 并查看班级为null的数据
- 左连接 并且 查询 s.is_del=1 并且 s.name=”amy” 的数据
右连接
查询结果为两个表匹配到的数据,右表持有的数据,对于左表中不存在的数据使用null填充。
select * from 表1 right join 表2 on 表1.列 = 表2.列;
子查询
某些情况下,当进行查询的时候,需要的条件是另外一个 select 语句的结果,这个时候,就要用到子查询。
