MySQL数据库基本操作(中)

一. having子句的使用(结合聚合函数,gruop by 使用)

1.聚合函数

  • max(字段名) 获取某字段中的最大值
  • min(字段名) 获取某字段中的最小值
  • sum(字段名) 计算某字段值的和
  • avg(字段名) 计算某字段的平均值
  • count(字段名) 计算某字段值中不为null的记录数
  • count(*) 计算表中的总记录数

格式:
select 字段 fun_name from [where 条件] [group by filed1,fild2...] [with rollup] [having 条件]

(1). fun_name 表示要做的集合函数操作,也就是数集合函数.
(2). group by 关键字 表示进行分类聚合的字段.比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
(3). with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总
(4). having 关键字表示对分类后的结果再进行条件过滤。

示例:


员工表A.png

统计总人数
select count(1) from A;
统计各个姓的人数
select xing,count(1) from A group by xing;
既要统计各个姓的人数,又统计总人数
select xing,count(1) from A group by xing with rollup;
统计人数大4的姓
select xing,count(1) from A group by xing having count(1)>4;
统计薪水总额,最低薪资,最高薪资
select count(1),min(salary),max(salary) from A;

2.WHERE 子句作用于表和视图,HAVING 子句作用于组。

WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。
  因此,WHERE 子句不能包含聚集函数,因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。相反,HAVING子句总是包含聚集函数。
例如:
select name,email,count(*) as ct from 表名 group by email HAVING ct > 1
先用group by 对email进行分组,在用having来过滤大于1的,这样查找出来的就是重复的记录了.

二. 视图的应用


MYSQL中视图的操作>>>
MySQL视图解析>>>


视图保存的并不是真实的数据,而是一张虚拟的表,不占用内存空间,只是保存了计算需要的sql语句每次调用的的时候都会自己调用封存的sql语句,从而提高了重用性。并且视图显示的内容会跟原文件同步。视图 不可以与视图进行联结 可以与其他表联结 索引的话都是跟普通表查询一样的 会产生作用

1. 创建视图

create view 视图名 as select 查询语句
示例:

create view test_test1(name) as select name from test_function;

2. 查询视图

select * from 视图名
示例:

select * from test_test1

name
tom
alice

3. 插入数据

insert into 视图名 (列名) values(列值);
示例:

insert into test_function (name) values("张三")

name
tom
alice
张三

4. 删除视图

drop view 视图名

三. MySQL的约束

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
MySQL中,常见的集中约束:

约束类型 关键字 说明
主键 primary key 唯一,且不为空
外键 froeign key 关联外表中的主键,可以为空。一旦关联之后,主表中的数据不能先删除,必须先解除关联
唯一 unique 此列值在整个表都是唯一的,除了空(空和空不相等),可以两个列组合为唯一约束
非空 not null 确保当前列的值不为空值,非空约束只能出现在表对象的列上。
自增 auto_increment 自动增加,默认步长为1,一张表只能有一个自动增加字段
默认值 default 确保当前列的值不为空值

1. 主键约束( primary key)

主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

-- 基本模式
create table temp(
id int primary key [auto_increment],
name varchar(20)
);
-- 组合模式
create table temp(
id int ,
name varchar(20),
pwd varchar(20),
primary key(id, name)
);
-- 删除主键约束
alter table temp drop primary key;
-- 添加主键约束
alter table temp add primary key(id,name);
-- 修改主键约束
alter table temp modify id int primary key;

2. 外键约束 (foreign key)

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系.

-- 基本模式
-- 主表
create table temp(
id int primary key,
name varchar(20)
);
-- 副表
create table temp2(
id int,
name varchar(20),
classes_id int,
foreign key(id) references temp(id)
);
-- 多列外键组合,必须用表级别约束语法
-- 删除外键约束
alter table student drop foreign key student_id;
-- 主表
create table classes(
id int,
name varchar(20),
number int,
primary key(name,number,ON DELETE CASCADE = True)
);
-- 副表
create table student(
id int auto_increment primary key,
name varchar(20),
classes_name varchar(20),
classes_number int,
/表级别联合外键/
foreign key(classes_name, classes_number) references classes(name, number)
);
-- 删除外键约束
alter table student drop foreign key student_id;
-- 增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number);
级联操作的属性:

  • ON DELETE CASCADE 删除主表中的数据时,从表中的数据随之删除
  • ON UPDATE CASCADE 更新主表中的数据时,从表中的数据随之更新
  • ON DELETE SET NULL 删除主表中的数据时,从表中的数据置为空

3. 唯一约束(unique)

唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。

唯一约束不允许出现重复的值,但是可以为多个null。

同一个表可以有多个唯一约束,多个列组合的约束。

在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。

唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

-- 创建表时设置,表示用户名、密码不能重复
create table temp(
id int not null ,
name varchar(20),
password varchar(10),
unique(name,password)
);
-- 添加唯一约束
alter table temp add unique (name, password);
-- 修改唯一约束
alter table temp modify name varchar(25) unique;

-- 删除约束
alter table temp drop index name;

4. 非空约束 not null 与 默认值 default

非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

Null类型特征:
  所有的类型的值都可以是null,包括int、float 等数据类型

-- 创建table表,ID 为非空约束,name 为非空约束 且默认值为abc
create table temp(
id int not null,
name varchar(255) not null default 'abc',
sex char null
);
-- 增加非空约束
alter table temp
modify sex varchar(2) not null;
-- 取消非空约束
alter table temp modify sex varchar(2) null;
-- 取消非空约束,增加默认值
alter table temp modify sex varchar(2) default 'abc' null;

5. 查看指定表的所有约束

show create table 表名

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,147评论 0 33
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,766评论 5 116
  • 第一天 7月13日OCP笔记: Oracle Ocp11g准备资料: OracleFundmentals 书 管理...
    fjxCode阅读 2,792评论 0 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,141评论 0 9
  • 文/细嗅蔷薇88 六月初伏暑湿蒸 故国洗象动京城 临街庙会祈丰年 大户施粥连草棚 女儿省亲勤梳妆 秀才搭床忙晒经 ...
    夜雨残灯阅读 430评论 2 10