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都是用来删除表中的数据的他们的区别是:
delete | truncate | |
---|---|---|
语言 | DML | DDL |
范围 | 指定删除哪几行数据 | 只能删除全表数据 |
性能 | 删除数据会产生碎片 | 不会产生碎片,清空大表时效率高 |
关于自增 | 删除数据时,不影响自增顺序 | 自增会从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 条数据。