DataQuertyLanguage DQL(数据查询语言)
简单查询
查询所有列: select * from 表名;
查询指定列: select 字段名1,字段名2... from 表名;
别名查询: select 字段名1 as 别名, 字段名2 as 别名... from 表名 as 表别名;
清除重复值: select distinct 字段名 from 表名;
查询结果参与运算: select 列名1 + 固定值 from 表名;(参数运算的字段必须为数值型)
条件查询
格式:select * from 表名 where 条件;
比较运算符
> 大于
< 小于
<= 小于等于
>= 大于等于
= 等于
<> 、 != 不等于
逻辑运算符
and(&&) 多个条件同时满足
or(||) 多个条件其中一个满足
not(!) 不满足
数据库提供的方式:
between 值1 and 值2 类似与的关系
in(字段1,字段2) 类似或的关系
模糊查询 like
like
% : 模糊多位
_ : 模糊一位
排序 order by 字段
select * from 表名 where 条件 order by 字段名称 [desc | asc] , 字段名 [desc | asc] ;
asc(默认) : 升序 desc : 降序
聚合函数
count() : 计数
sum() : 求和
max() : 求最大值
min() : 求最小值
avg() : 求平均值
分组 group by 字段
select * from 表名 where 条件 group by 分组字段 [having 分组条件 ] ;
having与where的区别(面试题)
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合函数
分页
limit
select * from 表名 limit 起始数,查询几条;
查询顺序
select distinct *或者字段或者聚合 from 表名 where 条件 and 条件 或 btween 条件 或 or 条件 或 in 条件 group by 字段 having 条件 order by 字段 asc/desc limit a,b
数据库约束
约束:对表中的数据可以进行进一步的限制,来保证数据的唯一性,正确性和完整性
约束种类:
单表约束
PRIMARY KEY : 主键约束 代表该字段的数据不能为空且不可重复
NOT NULL : 非空 代表该字段的数据不能为空
UNIQUE : 唯一 代表该字段的数据不能重复
多表约束
外键约束
主键约束 primary key
一个表中都得需要主键约束 用来标注一条记录的唯一性
特征:
主键字段值唯一不可重复
主键字段值不能包含NULL值
一个表中只能有一个主键
实现方式:
添加主键
方式一 在创建表时,添加约束
格式
create table 表名 (
字段名称1 字段类型 约束,
字段名称2 字段类型 约束
);
方式二 在创建表时,结尾内添加约束
格式1:单一主键
create table 表名 (
字段名称1 字段类型,
字段名称2 字段类型,
primary key(字段名称1)
);
格式2:联合主键 特点:必须保证2个字段的值不能为空且唯一
create table 表名 (
字段名称1 字段类型,
字段名称2 字段类型,
primary key(字段名称,字段名称1)
);
在已有表中添加主键
alter table 表名 add primary key(字段名称);
删除主键
alert table 表名 drop PRIMARY KEY;
主键自增
自己去维护主键过于麻烦,可以让数据库帮助我们去维护
auto_increment
默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
唯一约束: unique
特征
被修饰的字段唯一,不可重复
注意: 一个表中可以有多个被unique修饰的字段,但对null不起作用
实现方式
方式1: 创建表时在字段后添加
create table 表名 (
字段名称1 字段类型 约束,
字段名称2 字段类型 约束
);
方式2: 创建表时结尾添加
create table 表名 (
字段名称1 字段类型,
字段名称2 字段类型,
unique(字段名1)
);
特点:保证2个字段同时满足
create table 表名 (
字段名称1 字段类型,
字段名称2 字段类型,
unique(字段名1,字段名2)
);
方式3: 创建完表后,通过修改表添加
alter table 表名 add unique(字段名1,字段名2);
删除:
alter table 表名 drop index 约束名称;
非空约束: not null
特征:
被修饰的字段不可为空
实现方式
直接在字段后面添加即可
删除:
alter table 表名 change 旧字段名称 新字段名称 类型 约束;
default : 默认值
数据备份与还原
命令方式
只能备份库中的表和数据
备份数据
mysqldump -u用户名 -p密码 数据库名 > 文件的路径
把指定数据库的表和表中的数据给备份了,没备份库
还原数据
还原的时候需要先登录MySQL,并使用对应的数据库
source 导入文件的路径;
图形化界面方式
备份整个数据库
多表的设计与实现
现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,老师和学生等
那么我们在数据库设计与之对应的表时,也应该体现出表与表之间的关系
数据库的表关系设计有三种:
1. 一对一(了解)
2. 一对多
3. 多对多
一对多
疑问:我们在数据库中有一张分类表和一张商品表,这两张表之间可不可以有关系?
如果有关系,在数据库里面,我们如何去创建这种关系?
实现:分类表和商品表
称一的一方为主表 称多的一方为从表
原则:在从表中(多的一方)创建一个字段为外键,然后让这个外键指向主表的(一的一方)主键
数据库提供了外键约束的语法来实现指向关系:
关系建立: alter table 从表 add constraint [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键)
关系删除: alter table 从表 drop foreign key 外键名称
外键约束的作用:能够保证数据的完整性和有效性
特征:从表中如果关联了主表的数据则强制主表的数据不能删除,保证数据的完整性和有效性
多对多
实现:学生表和课程表
原则:需要在外部创建一张中间表
这个中间表至少需要2个字段,然后让这2个字段分别作为外键只向各自表的主键
本质上就是两个一对多,添加中间表
一对一(了解)
人和身份证号,企业和法人
实现方式,一般都写在一张表中
如果非要拆分成两张表,可以有2种方式来建立它们之间的一对一关系
实现:
1 让双方的主键作为外键一一对应
2 在任意一方创建一个字段当成是外键指向另一方的主键,但是这个外键必须唯一
外键约束
添加外键约束
方式1: 创建表时添加
CREATE TABLE product(
pid INT PRIMARY KEY AUTO_INCREMENT,
pname varhcar(20),
c_id INT,
CONSTRAINT foreign key(外键字段) references 主表名称(主键字段)
);
方式2: 在已有表上添加外键约束
给从表的外键字段添加外键约束
alter table 从表 add [constraint 名称] foreign key(外键字段) references 主表名称(主键字段)
方式3:可视化图形方式(推荐)
在架构设计器中,直接指定外键拖向主键即可,简单方便快捷
删除外键
方式一和方式二:ALTER TABLE 从表 drop foreign key 外键名称;
方式三:在架构设计器中,选中指向关系右键删除即可