数据库:DataBase ( DB),是存储和管理数据的仓库。
数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。
SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
以上 “[…]” 内容表示可以省略, database 可以替换成 schema
创建表
create table 表名(
字段1 字段类型 [约束] [comment '字段1注释'],
...
字段2 字段类型 [约束] [comment '字段2注释']
) [comment '注释信息'];
查询表
修改表
删除表:drop table [ if exists ] 表名;
删除表时,表中的全部数据也被删除。
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性、有效性和完整性。
无符号数据类型要在数据类型后面加上 unsigned
添加数据(INSERT)
注意事项:
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
- 字符串和日期型数据应该包含在引号中。
- 插入的数据大小,l应该在字段的规定范围内。
修改数据(UPDATE):update 表名 set 字段名1=值1,字段名2=值2, …[ where条件];
删除数据(DELETE):delete from 表名 [ where条件];
注意事项:
- DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
- DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL。
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit
分页参数
条件查询:select 字段列表 from 表名 where 条件列表;
分组查询: select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];
where与having区别:
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
注意事项:
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
- 执行顺序: where >聚合函数>having 。
使用聚合函数查询:
语法:select 聚合函数(字段列表) from 表名;
聚合函数:
提示:
- null 值不参与所有聚合函数运算。
- 统计数量可以使用: count( * )、count(字段)、count(常量),推荐使用count( * )。
条件查询: select 字段列表 from 表名 [ where 条件列表 ] [ group by 分组字段 ] order by 字段1 排序方式1, 字段2 排序方式2, … ;
排序方式:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
分页查询:select 字段列表 from 表名 limit 起始索引, 查询记录数;
注意事项:起始索引从O开始,起始索引=(查询页码–1)*每页显示记录数。
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
案例:员工与部门的关系
关系:每个员工归属于其中一个部门,一个部门有多个员工
实现:在数据库表中多的一方,添加字段,来关联一的一方的主键
案例:用户与身份证信息的关系
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
案例:学生与课程的关系
关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
多表查询是指从多张数据表中查询数据。
多表查询分类:
隐式内连接:select 字段列表 from 表1,表2 where条件 … ;
显式内连接:select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 … ;
左外连接:select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 … ;
右外连接:select 字段列表 from 表1 right [ outer ] join 表2 on 连接条件 … ;
介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
形式:select * from 表1 where 字段1 = ( select 字段2 from 表2 …);
子查询外部的语句可以是insert / update / delete / select 的任何一个,最常见的是select。
分类:
事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务控制操作:
事务的四大特性(ACID):
索引(index)是帮助数据库高效获取数据的数据结构。
优缺点
优:
提高数据查询的效率,降低数据库的 lO 成本。
通过索引列对数据进行排序,降低数据排序的成本,降低 CPU 消耗。
缺:
索引会占用存储空间。
索引大大提高了查询效率,同时却也降低了 insert、update、delete 的效率。
MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。我们平常所说的索引,如果没有特别指明,都是指默认的 B+Tree (多路平衡搜索树)结构组织的索引。
创建索引:create [ unique ] index 索引名 on 表名(字段名,…);
查看索引:show index from 表名;
删除索引:drop index 索引名 on 表名;
注意事项:
- 主键字段,在建表时,会自动创建主键索引。
- 添加唯一约束时,数据库实际上会添加唯一索引。