MySQL约束(dql学习和约束)

一. dql学习

1. 排序查询

语法:
    order by 子句
    order by 字段一 排序方式1,子段二 排序方式2;...
     注意:
    1.排序方式有2种:升序 asc  降序 desc ,默认升序
    2.如 字段1 和 字段2 排序有冲突,字段1 优先满足。
    3.如字段1数据相同,再按照字段2的排序方式排序。

2.聚合函数

理解:将一列数据作为一个整体,进行纵向的计算
语义:
    1. count 统计个数
    2. max 求最大值
    3. min 求最小值
    4. sum 求和
    5. avg 求平均值
注意:
    1.聚合函数统计时会排序null值,即不统计字段为null 的记录
    2.可以使用ifnull() 解决
补充:
    count(*) 和 count(列名)的区别:
    1.count(*)不会排除null,意为:统计所有的记录数,哪怕某一行
    所有的列都是null,也会统计在内
    2.count(列名)会排除null,意为:统计某一列不为null的记录数
    3.count(数字)和count(*)等效

3.分组查询

理解分组:统计具有**相同特征**的**某一类**数据
语法:
    group by 字段
注意:
    1.分组查询中,select后面只能出现 分组的字段和聚合函数,不能出现其它字段,
    否则没有意义。
分组前条件 和 分组后条件 过滤结果集:
    -- where 分组前条件
    -- having 分组后条件
注意:
    1.where 在分组前进行条件过滤,不满足条件的记录不参与分组,不能跟 聚合函数
    2.having 在分组后进行条件限定,不满足限定的记录不会被查询出来, 可以跟 
    聚合函数。

4. 分页查询

引出分页:
    数据库中有大量符合搜索条件的数据,但是我们没有必要一次性全部展示,一来查询耗时,二
    来网络传输耗时,因此我们使用分页展示。
语法:
    limit offset,size
    -- offset 起始行数,从 0  开始计数,如果省略,默认就是 0
    -- size 每页展示的记录数 
公式--找出**当前页数**和**起始行数**之间的规律:
    起始行数 start=(currPage-1)*size
    -- currPage 当前页数
    -- size 每页展示的记录数
    注意:limit 语法是mysql的方言,其它数据库,对于分页有不同的实现方式。

二. 约束

概念:
       对表中的数据进行限定,从而保证数据的正确性,有效性,完整性。
分类:
       1.主键约束:primary key
       2.非空约束:not null
       3.唯一约束:unique
       4.外键约束:foreign key

1. 非空约束

语法:
    not null
使用:
1.在创建表时添加约束
    create table stu(
        id int,
        name varchar(20) not null
    );
删除非空约束:
    alter table stu modify name varchar(20);
2.创建表之后,添加约束
    alter table stu modify name varchar(20) not null;

2. 唯一约束

语法:
    unique -- 某一列的值不能重复
使用:
    -- 1.创建表时添加唯一约束
    create table stu (
    id int,
    phone_number varchar(20) unique );
    -- 2.删除唯一约束
    alter table stu modify phone_number varchar(20); -- 错误写法,不会真的删除
    alter table stu drop index phone_number; -- 删除phone_number的索引
    -- 3.创建表完成后,添加唯一约束
    alter table stu modify phone_number varchar(20) unique;
补充:
    index索引:
    1.一张表的索引可以看成是一本书的目录,添加索引可以提高查找效率。
    2.索引就是一张小表,用于存储某列值的地址值
    3.一张表中索引太多反而会增加查询工作量,延长时间,降低效率
    4.我们可以定义这个索引具有唯一性,所以唯一约束是通过索引index来实现的。

3.主键约束

 注意:
    1.主键含义:非空 且 唯一
    2.一张表只能有一个字段为主键
    3.主键就是表中记录的唯一标识
 补充:
    1.主键是一种特殊的唯一索引
    2.主键列不允许空值,而唯一性索引列允许空值
 使用:
     -- 1.在创建表时添加主键
     create table stu(
     id int primary key,
     name varchar(20));
     -- 2.删除主键
     alter table stu modify id int;-- 错误写法,不会真的删除主键
     alter table stu drop primary key; -- 删除主键,无需指定列,因为一个表只有一个列可以设为主键
     -- 3.创建完表后,添加主键
     alter table stu modify id int primary key;

3.1 主键约束–自增长

概念:如果某一列是数值类型,使用auto_increment 可以完成值的自动增长。
使用:
    -- 1.创建表时,设置主键自增长,默认从1开始自增长
    create table stu(
    id int primary key auto_increment,
    name varchar(20)
    );
    -- 2.创建表时,设置主键自增长,并指定自增长起始值为6
    create table stu(
    id int primary key auto_increment,
    name varchar(20)
    )auto_increment=6;
    -- 3.删除自增长,不会删除主键
    alter table stu modify id int;
    -- 4.创建表完成后,添加自增长
    ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;-- 注意:此次不能再指定主键,因为主键已经存在
    -- 5.创建表完成后,设置主键自增长的初始值--前提是表中已经设定过主键自增长
    ALTER TABLE stu AUTO_INCREMENT=100;

4. 外键约束

删除外键:
    alter table emp drop foreign key emp_dept_fk;-- 更改表,删除外键emp_dept_fk;
创建表之后,添加外键:
    alter table emp add constraint emp_dept_fk foreign key (dept_id) references dept(id);

4.1 外键约束–级联操作

级联修改:
    -- 先删除外键
    alter table emp drop foreign key emp_dept_fk;-- 更改表,删除外键emp_dept_fk
    -- 重新添加外键,并设置级联修改--末尾追加 on update cascade
    alter table emp add constraint emp_dept_fk foreign key (dept_id) references dept(id) on update cascade;
级联删除:
    -- 先删除外键
    alter table emp drop foreign key emp_dept_fk;-- 更改表,删除外键emp_dept_fk
    -- 重新添加外键,并设置级联修改和级联删除 
    alter table emp add constraint emp_dept_fk foreign key (dept_id) references dept(id) 
    on update cascade on delete cascade;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值