目录
一、数据库的基本架构:
- SQL语言:结构化查询语言
数据库中数据的特征:较小的冗余度,较高的数据独立性;易扩展性;为各个用户所共享。
在SQL语言中---DDL语言(数据库定义语言),提供了三个语句:create(创建),alter(修改),drop(删除),操作的对象是数据库中的基本架构----表。
备注:虽然数据库中存储的是各种各样的数据,但是数据是以表的形式来组织和存放的。
借助于SQL语言中---DML语言(数据库操作语言),实现对数据库中存储的数据进行增删改查的操作(insert,delete,update,select)
data,database,dbms,dbs的关系
数据库系统(DBS)=数据库(DB)+数据库管理系统(DBMS)+应用系统+数据库管理员(DBA)+用户
5.数据库系统经历的三个阶段:
6.数据库 架构: 图形结构 树形结构 表
- 信息的三种世界
2.实体-联系模型------>E-R图
3.联系:反映的是实体与实体之间的关联
4.关系模型(关系型数据库中数据的组织方式)
关键字:指的是列(可以把一个列或者多个列看成是关键字),做到唯一区分的作用。比如:学生信息表中的学号。一旦把某个列看成是关键字,就要求这个列的内容:唯一,不重复,不能为空。
5.关键字:
1.主键(主关键字);针对一个表中某个列来说的,假如把一个表中的某个列设置成主键,那么这个列就一定要求:唯一,不重复,不为空。
2.外键:针对两个表来说的,加强表与表之间的联系。外键的设置也是在于列
6.关系的完整性约束 约束--->限制
2.参照完整性:说的主键和外键之间的关系。(主表和从表的关系)
会把两个表分别拆分成一个主表,一个从表;参照关系:从表参照主表(列);
当从表需要做操作的时候,首先询问主表的意见,主表中有的,允许你从表做操作;如果主表中没有的,从表是没办法进行操作的。
当从表的某个列参照主表的某个列,要求主表的这个列必须是主键或者唯一约束
二、关系模型的规范化(范式)
1.定义:关系模型要满足的条件被称为规范化形式,简称范式NF。
2.目的:减少数据冗余,消除存储异常,保证数据的完整性和存储效率。一般是3NF。
第一范式(1NF):如果关系R的所有属性是简单属性:每个属性都不可再分,则称R满足第一范式
第二范式(2NF):如果关系R先满足第一范式,非主键字段完全依赖于主键,则称R满足第二范式
第三范式(3NF):如果关系R满足第二范式,非键字段之间不存在任何的依赖关系,则称R满足第三范式。
一个基本的关系型数据库要满足第一范式,一个完整的关系型数据库要满足第三范式。
三、Mysql数据库
1优点:体积小,速度快,成本低,开源,可以和开发语言来结合,可移植性(跨平台),可以在不同的操作系统中使用
decimal(5,2) 要求你传递过来的数据总长度是5位,小数位是2位 123.45
价格 decimal(3,2) -------------->9.99
datetime YYYY-MM-DD HH:MM:SS 精确到秒
姓名 char(10) tom-->3 10个字符-3=7个字符的空间 剩余的空间不会释放,系统会用空格给填充满
varchar(10) tom--3 还剩下7个字符空间,给释放出来
3.创建表语法格式:
数据库中注释:
4.切换数据库:use 数据库的名字;
删除表:drop table 表名;
5.修改表结构
1.添加列 :alter table 表名 add 列名 数据类型;
3.修改列的数据类型:alter table 表名 modify 列名 新的数据类型;
4.修改列名:alter table 表名 change 旧列名 新列名 数据类型;
- 6.主键约束:唯一,不重复,不能为空 primary key 一个表中有且只有一个主键约束
constraint 主键约束的名字 primary key(列名1)
alter table 表名 modify 列名 数据类型 primary key;
alter table 表名 add primary key(列名);
alter table 表名 add constraint 主键约束的名字 primary key(列名);---à通用
格式:alter table 表名 drop primary key;
联合主键:指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复
constraint 主键约束的名字 primary key(列名1,列名2)
2.针对已经存在表,添加联合主键
alter table 表名 add primary key(列名1,列名2);
格式三:
alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2);
- 7.唯一约束 unique
创建表的同时创建唯一约束 UN_列名
constraint 唯一约束的名字 unique(列名1),
constraint 唯一约束的名字 unique(列名2)
格式:alter table 表名 add unique(列名[,列名2]);
格式:alter table 表名 drop index 唯一约束的名字;
- 8.默认约束 default 当默认约束来修饰某个列的时候,修饰的列即使不写数据也会默认一个值的
列名1 数据类型 default ‘字符串类型或者日期类型的默认值’,
格式:alter table 表名 modify 列名 数据类型 default '值';
格式:alter table 表名 modify 列名 数据类型;
外键约束 foreign key(相对于两个表来说 一个主表, 一个从表)
constraint 外键约束的名字 foreign key(从表的列名1) references 主表表名1(列名1) --------引用
注意:关于引用的列是要求:从表的列和主表的列,列名可以不一样,但是,这两个列的数据类型和内容必须保持一致。
- 11.外键约束:
constraint 外键约束的名字 foreign key(从表的列名1) references 主表表名(主表的列名1)
alter table 从表表名 add constraint 外键约束的名字 foreign key(从表列名1) references 主表表名(主表列名);
格式:alter table 表名 drop foreign key 外键约束的名字;
四、SQL语言
1.DDL语句 数据库定义语言
create·创建库表 alter:修改表 drop:删除库表
insert 插入(增) delete 删除(删) update 更新(改)
- DML-insert 插入语句 插入的值和列要保持一一对应的关系
insert into 表名(列名1,列名2,列名3...) values(值1,值2,值3...);
insert into 表名 values(值1,值2,值3....);
insert into 表名 values(值1,值2,值3...),(值1,值2,值3...),(....);
- DML---delete 删除表中的数据
和drop区别:delete仅限于把表中数据给删除,表还在留着;drop是把表和数据一并给删除了
delete from 表名 where 条件; 根据条件来删除数据
and 条件是同时满足 delete from 表名 where 条件1 and 条件2 and 条件3....
or 多个条件只需要满足其中一个 delete from 表名 where 条件1 or 条件2 or 条件
update 表名 set 列名1=值1,列名2=值2...
- 查询语句:select语句
- select * from 表名; * 所有
对查询结果进行去重复 distinct
格式:select distinct 列名 from 表名;
- 别名查询:
select 列名1 ‘别名1’,列名2 '别名2',列名3 '别名3'... from 表名;
select 列名 as '别名',列名2 as '别名2'... from 表名;
五、选择查询
1.针对查询结果满足某个范围内的数据
select 列名 from 表名 where 列名 between 开始值 and 结束值;
不在某个范围之内的数据 not between .... and....
select 列名 from 表名 where 列名 not between 开始值 and 结束值;
2.通过in关键字使用户拿上条件可以和列表中任意值来做匹配,只要满足其中一个就会有查询结果
格式:select 列名 from 表名 where 列名 in(值1,值2,值3....);
不在这个列表范围之内的 not in --->不要列表中的内容
格式:select 列名 from 表名 where 列名 not in(值1,值2,值3....);
格式:select 列名 from 表名 where 列名 like '字符模式';
只说like是用来匹配到某个字符模式,假如我不想要某个字符模式怎么办呢?
select * from student where sname not like '王%';
4.空值查询 不确定的值 null
select 列名 from 表名 where 列名 is null;
select 列名 from 表名 where 列名 is not null;
除了count(*)外,其他函数再做操作时,均忽略空值(null)
格式:select 列名 from 表名 limit [指定开始查询的行,]查询的总行数;
select 列名,聚合函数 from 表名 group by 列名;
分组:1.先查询结果(先统计出相关的总数或者总和);2.统计出来之后或者查询出来之后,再来进行分组(依据某个列来进行的分组);
统计每个年级的总人数:1.先求出整个学校的总人数;2.求出总人数之后,再依据年级进行分组
8.having 在分组中进行条件限制(对分组的结果添加条件)
select 列名 from 表名 group by 列名 having 条件(一般情况下都是聚合函数当做条件);
注意:1.having必须和group by固定搭配;2.having后面可以写聚合函数,但是where后面不能写。
格式:select 列名 from 表名 order by 列名 [asc | desc];
格式:select 列名 from 表名 order by 列名1 asc,列名2 desc;
例子:查询成绩表中所有学生的记录,要求按照成绩升序排列,成绩相同时,按照学号进行降序排列
select * from 成绩表 order by 成绩 asc,学号 des