MySQL中的约束和查询DQL

SQL约束:

约束用于规定表中的数据规则。

如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定(通过create table 语句),或者在表创建之后规定(通过 alter table 语句)。

约束是对数据表中的数据进行限制的一种设置。

约束的统一写法:

create table 表名(
字段1 数据类型(长度) 约束;
字段2 数据类型(长度) 约束;    
);
--对某个列进行约束

主键约束:

一般每个表都要至少一个主键,一般主键都是id列。

在sql中约束有以下几种:

primary key: 对主键进行约束,约束后主键不能重复,不能为空。

not null: 该字段(列)不能为空

unique:该字段(列)中的数据必须是唯一存在的。该值不能重复但是可以允许多个null。

default:默认值约束,在插入新的数据时,如果该字段没有指定数据,那么系统讲默认值赋给该字段,如果我们不设置默认值的话,系统默认值为null。

auto_increment:自增约束,一般配合主键使用。当灭有值时,直接自增,从 1 开始依次递增。虽然设置递增,也可以自己自己再随意设置主键值。执行delete删除数据,不会影响递增顺序。

constraint fk _ 子表_ 父表 foreign key(列) references 父表名(列):给所键的表添加外键,作用是表和表之间的约束。(外键列必须是主键)

可以使用alter命令修改表,添加外键

alter table stu3 add constraint fk_stu_tea foreign key(tid) references teacher(tid);

注意:子表不能乱插入和修改数据.即不能插入或更新被引用表中没有的数据。

删除时/更新时:

  • restrict:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;

  • no action:同 restrict,也是首先先检查外键;

  • cascade:父表delete、update的时候,子表会delete、update掉关联记录;

  • set null:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;

delete和truncate都是用来删除表中的数据的他们的区别是:

deletetruncate
语言DMLDDL
范围指定删除哪几行数据只能删除全表数据
性能删除数据会产生碎片不会产生碎片,清空大表时效率高
关于自增删除数据时,不影响自增顺序自增会从1开始
原理DELETE语句则是逐条的删除数据表中保存的记录先执行删除(drop)数据表的操作,然后再根据有效的表结构文件 重新创建数据表

DQL:【重点】

查询的完整语法:

SELECT selection_list      /*要查询的列名称*/
  FROM table_list         /*要查询的表名称*/
  WHERE condition       /*行条件*/
  GROUP BY grouping_columns  /*对结果分组*/
  HAVING condition      /*分组后的行条件*/
  ORDER BY sorting_columns /*对结果分组*/
  LIMIT offset_start, row_count  /*结果限定*/

基本查询:

查询语句select 是数据库中最基本的和最重要的语句之一,其功能是从数据库中查询满足条件的数据。

  • select <目标列名 序列> --需要哪些列

  • from <表名> [ join <表名> on <链接条件> ] --来自哪些表

  • where <选择条件> -- 根据什么条件

  • group by <分组的依据>

  • having <组选择的条件>

  • order by <排序的依据条件>

  • where 和 having 的区别 where 是分组前过滤,having 是分组后 where 后面不可以使用聚合函数的,having后面可以使用聚合函数。

where 常用的查询条件:

查询条件谓词
比较大小=,>, <, >=,<=, !=, <>
确定范围between ...and(闭区间,包含两边数据),not between ..and(在二者之外的数据,不包含本身)
确定集合in 包含的,not in 不包含的
字符匹配like是用来模糊查找的,后面跟百分号(%)或下划线(-)下划线只能延申一位,not like
空值is null 是空,is not null 不是空
多重条件and需要同时满足, or 是或者的意思

条件查询:

语法格式:

select 字段 from 表名 where 条件(所查询的项需要满足的条件)

模糊查询:

语法格式:查询那个里面是否包含什么东西

select 字段 from 表名 where 查询的项 like '%包含的元素%'

排序查询:

语法格式:需要排序的项目

select 字段 from 表名 order by 需要排序的项目 asc(升序)/desc(降序)

注:可以在 select 后的字段上做运算,还可以给列去别名用 as, 在需要取别名的地方写 as 后面跟 别名。

聚合函数:

  • COUNT(字段):统计指定列不为NULL的记录行数;

  • MAX(字段):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

  • MIN(字段):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

  • SUM(字段):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

  • AVG(字段):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

  • 注:除了COUNT(*)外,其他函数均忽略NULL值。

去重查询:

语法格式:需要去重的项

select distinct 需要去重的项 from 表名;

分组查询:

语法格式:

select 字段 from 表名 group by 需要分组的项

分页查询:

语法格式:

limit  数量;展示前几条
limit X,Y;展示的是从 X 处开始到的 Y 条数据。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值