1、关系型数据库(只是一个保存数据的容器)
关系模型是把世界看作是由实体和联系组成的,而关系型数据库是将数据库表作为实体,以数据库的主键和外键的关联关系描述的一种数据库结构
表之间的关联关系:①一对一关系:一条主表记录对应一条从表记录,同时一条从表记录也对应一条主表记录
②一对多关系:一条主表记录对应多条从表记录,同时一条从表记录对应一条主表记录
③多对多关系:一条主表记录对应多条从表记录,同时一条从表记录对应多条主表记录(需要通过中间表来连接,由中间表来描述关系)
2、数据库管理系统DBMS(Database Management System)管理数据库中的数据
3、结构化查询语言SQL(Structured Query Language)
一种用于管理关系型数据库,并与数据库进行通讯的计算机语言
分类:①数据定义语言(DDL):创建、修改、删除数据库的内部数据结构
②数据查询语言(DQL):用于数据库中数据的查询
③数据操作语言(DML):用于数据库中的数据的修改,包括添加、删除、修改
④数据控制语言(DCL):控制数据库访问权限
4、mySQL中要掌握的数据类型:整型:int 浮点型:float、double、decimal 字符型:varchar 日期型:date
5、一些操作
-- 创建数据库
CREATE DATABASE 数据库名;
-- 删除数据库
DROP DATABASE 数据库名;
-- 创建表
CREATE TABLE t_student(
id INT PRIMARY KEY AUTO_INCREMENT, -- 编号
studentName VARCHAR(20), -- 学生姓名
sex VARCHAR(20), -- 性别
birthday DATE, -- 生日
tel VARCHAR(20) -- 电话 最后一列不用加逗号
);
-- 删除表
DROP TABLE t_student;
-- 查询表中所有的数据 *表示查询所有的列
SELECT * FROM t_student;
-- 添加记录
INSERT INTO t_student(studentName,sex,birthday,tel) VALUES('张三','男','1980-09-20','13890987672');
-- 添加多条记录 中间用逗号隔开
INSERT INTO t_student(studentName,sex,birthday,tel)
VALUES('张起灵','男','1967-07-17','18810895153'), ('王胖子','男','1977-05-31','13536377745'),('无邪','男','1980-09-16','13425743234');
-- 删除,"%"表示任意多个或零个字符 ,“ _ ”表示单一字符
DELETE FROM t_student WHERE studentName='张_'; -- 删除姓张的学生
DELETE FROM t_student WHERE studentName LIKE '%李%'; -- 删除姓名带有李的学生
-- 修改电话
UPDATE t_student SET tel='13425252353' WHERE studentName='张三';
-- 同时修改电话和生日
UPDATE t_student SET tel='13425251258',birthday='1998-10-11' WHERE studentName='张三';
-- 修改名字
UPDATE t_student SET studentName='吴邪' WHERE id='10';
-- 查询所有的男生
SELECT * FROM t_student WHERE sex='男';
SELECT * FROM t_student WHERE studentName LIKE '%张%'; -- 查询所有姓名有张的
-- 查询姓张的男生
SELECT * FROM t_student WHERE studentName LIKE '张%' AND sex='男';
-- 查询90后的学生
SELECT * FROM t_student WHERE birthday >= '1990-01-01' AND birthday < '2000-01-01';
-- 查询第三条到第五条记录
-- 第一个表示从第几个开始,第一条是0;第二个参数表示显示几条
SELECT * FROM t_student LIMIT 0,3;
-- 按年龄排序 asc升序 desc降序 默认升序
SELECT * FROM t_student ORDER BY birthday DESE;
-- 查询没有手机的学生,使用is NULL或ISNULL(),不能用=null
SELECT * FROM t_student WHERE ISNULL(tel);
SELECT * FROM t_student WHERE tel IS NULL;
-- 查询id为3和5、8的学生,in表示在什么范围之内
SELECT * FROM t_student WHERE id IN (3,5,8);
-- 查询所有学生的性别, distinct表示去除重复记录
SELECT DISTINCT sex FROM t_student;
6、条件判断使用case when
select e. * , (case when 条件 then 返回的语句
when 条件 then 返回的语句
else 返回的语句
end
)' 别名 ' from 表名 e; 别名可不要,e为表的别名
7、删除数据:删除所有数据:使用delete不加where条件
使用truncate直接删除, truncate table 表名
区别:delete会记录日志,意味着删除后的数据还可以恢复,但效率低
truncate不会记录日志,删除后的数据不能恢复,但效率高
8、聚合函数的分类:count:统计行数量,count (*)表示统计所有的记录,count(a)表示统计符合a的非空记录
sum:获取单个列的合计值
avg:计算某个列的平均值
max:计算某个列的最大值
min:计算某个列的最小值
9:、SQL语句的执行顺序:执行from -------where条件过滤 ------- group by 分组 ------- 执行select投影列 ------- having条件过滤 -------- 执行order by 排序
having和where的区别:两者都是过滤条件,where在运行分组前,因此不能执行任何聚合函数
having是运行在分组后,只能用在聚合函数的过滤
在分组查询中,能够查询的字段只能是分组字段和聚合函数
10、数据完整=可靠性+准确性
数据完整是为了防止立即数据的产生,从而影响数据库的执行效率
分类:①实体完整性 保证一行数据是有效的
实现方式:主键约束(primary key)和唯一约束(unique)
区别:唯一约束可以为空,并且可以在一张表中给多个列设置唯一约束;主键约束不能为空,也不能重复,一个表只能有一个主键
②域完整性 保证一列数据得输入是有效的
实现方式:非空约束(not null) 默认约束(default) 检查约束(check 但是mySQL不支持)
③引用完整性 保证引用的编号是有效的 实现方式:设置外键约束
④用户自定义完整性 保证自定义规则
两个表之间如果存在外键约束,那么删除表主表记录时,由于有外键约束存在,无法删除有从表记录引用的主表记录,这时,删除主表记录有两种方式:
1、级联删除:将主表记录对应的从表记录先删除,在删除从表记录
2、外键设空:将主表记录对应的从表记录外键设置为null,在删除主表记录
外键约束与外键:外键是指从表的某列与主表的某列存在依赖关系
外键约束是指外键关联主键上强制加上一个约束,如果违反约束,则不允许该条数据的修改
注意:没有外键约束不等于没有外键