mysql外键约束分数_MySQL提高(外键约束)

外键约束

1.条件语句的写法

在sql中可以通过'where 条件语句' 来对操作对象进行筛选 -筛选

a.比较运算符:=,<>,,<=,>=

注意:判断一个字段的值是否为空不用使用=和<>,而是使用'is null'和'is not null'

select number from t_course where title is null; 判断是否为null

select number from t_course where tirle=''; --判断是否是空串

b.逻辑运算:and,or,not

c.where 字段名 between 值一 and 值二; -- 筛选指定的字段的值在值一和值二之间的数据

select title,birth from t_course where birth between '1990-1-1' and '1999-12-31';

d.where 字段名 in 集合 --筛选出字段值是集合中的元素;(集合是使用括号括起来里面多个值)

select * from t_course where title in ('历史','高数','语文');

e.like操作,上一篇文章

2.数据类型

varchar(size):不定长字符串,size决定的是最大长度

char(size):定常字符

text: 不限长度

int/tinyint(-128~127):

float(size,d)/double(size,d) - 这的size环绕d的值都有约束效果

bit: 只有0和1两个值

date/datetime/time: 值可以是时间函数的结果,也可以是时间字符串,计算或者是比较的时候内部是按时间处理的

3.去重

select distinct credits from t_course;

添加约束

1.创建表的时候添加约束

create table if not exists t_college

(

collid int,

collname varchar(20) not null, -- 创建表的时候添加约束

website varchar(1024),

intro varchar(200),

primary key(collid)

)

2.通过添加约束索引的方式添加约束

alter table 表名 add constraint 索引名 约束 (字段名);

说明:索引名 - 自己随便命名约束(字段名);

说明:索引名 - 自己随便命名,用来指向当前添加的约束;约束 - 添加的约束

alter tabler t_college add constraint con_website unique (website);

给t_college表中的website添加unique的约束,约束索引为con_website

b.删除约束

alter table 表名 drop index 约束索引;用来指向当前添加的约束

alter table t_college drop index con_website;

外键和E.R图

1.什么是外键:表中的某个字段的值是根据其他表中主键的值来确定的,那么这个字段就是外键

1.1多对一的外键的添加:将外键添加到多的一方对应的表中。

一对一的外键添加:将外键随便添加到哪一方,同时添加值唯一约束

多对多的外键添加:关系型数据库中,两张没法实现多对多的关系,需要一个中键表(中间表有两个表的外键分别参照多对多的两个表的主键)

1.2怎么添加转眼间

a.外键对应的字段

alter table t_student add column collid int;

b.给设计好的外键对应的字段添加外键约束

alter table 表1 add constraint fk_collid_stu(##索引名) foreign key(表1字段名1) references 表2(字段2);

将表1中的字段1设置为外键,并且让这个外键的值参照表2中的字段2

c.删除外键约束

alter table 表名 drop foreign key 外键索引名;

可以删除外键约束,但是外键索引还在,需要把额外的索引删除

注意:外键约束直接删除约束的索引无效,必须先将约束删掉,然后再删除索引

alter table tb_student drop foreign key fk_collid_stu;

alter table tb_student drop index fk_collid_stu;

d.多对多的外键约束

例子

-- =============1.学生表===============

CREATE TABLE IF NOT EXISTS tb_student

(

stuid int not NULL auto_increment,

stuname VARCHAR(20) not NULL,

tel CHAR(11) not NULL,

birth date DEFAULT '2019-10-21',

addr VARCHAR(100),

PRIMARY key(stuid)

);

-- ===============2.课程表================

CREATE TABLE IF NOT EXISTS tb_course

(

couid int NOT NULL auto_increment,

couname VARCHAR(20) NOT NULL,

startdate date NOT NULL DEFAULT '2019-10-21',

intro VARCHAR(200),

credit int NOT NULL,

PRIMARY key(couid)

);

-- =================3.学院表====================

CREATE TABLE IF NOT EXISTS tb_college

(

collid int auto_increment,

website VARCHAR(200) UNIQUE,

collname VARCHAR(50),

PRIMARY KEY(collid)

);

-- =================4.老师表====================

CREATE TABLE IF NOT EXISTS tb_teacher

(

teaid int NOT NULL auto_increment,

teaname VARCHAR(20) NOT NULL,

teaage INT,

tel char(11),

PRIMARY KEY(teaid)

);

1.什么是外键:表中的某个字段的值是根据其他表中主键的值来确定的.那么这个字段就是外键

-- 1.1多对一的外键的添加:将外键添加到多的一方对应的表中

-- 1.2怎么添加外键:

-- a.外键对应的字段

alter table t_student add column collid int;

-- b.给设计好的外键对应的字段添加外键约束

-- alter tabler 表1 add constraint fk_collid_stu(##索引名) FOREIGN KEY (表1字段名1) references 表2(字段2);

-- 将表1中的字段1设置为外键,并且让这个外键的值参照表2中的字段2

-- c.删除外键约束

-- alter table 表名 drop foreign key 外键索引名; - 可以删除外键约束,但是外键索引还在,需要额外的把索引删掉

-- 注意:外键约束直接删除约束的索引无效,必须先将约束删掉,然后再删除索引

alter table tb_student drop foreign key fk_collid_stu;

alter table tb_stubent drop index fk_collid_stu;

-- 一对多

alter table tb_student add column collid int;

alter table tb_student add CONSTRAINT fk_collid_stu FOREIGN key (collid) REFERENCES tb_college (collid);

alter table tb_teacher add column collid int;

ALTER TABLE tb_teacher add CONSTRAINT fk_collid_tea FOREIGN key (collid) REFERENCES tb_college (collid);

alter table tb_course add column teaid int;

alter table tb_course add CONSTRAINT fk_teaid_cou FOREIGN key (teaid) REFERENCES tb_teacher (teaid);

-- 多对多

create table if not EXISTS tb_score

(

scoreid int not null auto_increment,

mark FLOAT(4,1) comment '分数',

stuid int comment '学生外键',

couid int comment '课程外键',

PRIMARY KEY (scoreid)

);

alter table tb_score add CONSTRAINT fk_stuid_score FOREIGN key (stuid) REFERENCES tb_student (stuid);

alter table tb_score add CONSTRAINT fk_couid_score FOREIGN key (couid) REFERENCES tb_teacher (couid);

-- 添加成绩

INSERT INTO tb_score (mark) VALUES (89),(45.5),(100),(95),(60),(77),(90),

(97),(49),(66),(56),(71),(80.5),(33),(87),(56),(74),(68),(80),(92),(34),(75);

select mark from tb_score; -- 获取表中的所有分数值

select MAX(mark) as maxmark from tb_score; -- 获取表中所有分数的最大值

select min(mark) from tb_score;

select sum(mark) from tb_score;

select avg(mark) from tb_score;

select count(mark) from tb_score;

查询的高级操作

1.聚合:max/min/sum/avg平均数/count

select 聚合函数(字段) from 表名 where 条件;

按条件对表查询指定字段的数据,然后将查询到的结果做相应的聚合运算,聚合运算的结果是最后的结果

select mark from tb_score;

select max(mark) as maxmark from tb_score;

select min(mark) from tb_score;

select sum(mark) from tb_score;

select avg(mark) from tb_score;

如果计算平均数的时候如果参与运算的对象是null,那么这个数据不会参与计算

select count(mark) from tb_score;

2.分组

select 字段操作 from 表名 where 条件 group by(字段2);

将指定表中的满足条件的记录按照指定字段进行指定的聚合操作

求每个学生的平均数

select stuid,avg(mark) from tb_score group by(stuid);

注意:a.字段操作的位置除了分组字段不用聚合,其他字段都必须聚合

b.分组的时候where要放在分组前对需要分组的数据进行筛选

having:分组的时候,在分组后用having代替where来对分组后的数据进行筛选

获取平均成绩最高的学生的id

获取平均成绩大于60分的学生的id

select stuid,avg(mark) from tb_score group by(stuid) having avg(mark)>60;

3.子查询:将一个查询操作的结果作为另外一个查询的数据源

在tb_score表中获取成绩是大于90分的学生的id

select stuid from tb_score where mark>90 and stuid is not null;

获取成绩大于90分的学生的姓名

select stuname from tb_student where stuid in

(select stuid from tb_score where mark>90 and stuid is not null);

将一个查询结果作为查询对象提供给另外一个查询,但是第一个查询结果需要重命名

select mark from (select stuid,mark from tb_score where mark>90 and stuid is not null)as t2;

4e378e3ba8d5

TET%W$__[8~]}N%2Z1W706O.png

4e378e3ba8d5

{P{BCO4B87HY1@Y~Z7$O5VV.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Map中那些巧妙的设计

简介&#xff1a; 他山之石可以攻玉&#xff0c;这些巧妙的设计思想非常有借鉴价值&#xff0c;可谓是最佳实践。然而&#xff0c;大多数有关Java Map原理的科普类文章都是专注于“点”&#xff0c;并没有连成“线”&#xff0c;甚至形成“网状结构”。因此&#xff0c;本文基于…

java json转xml_关于JSON与XML的区别比较

现在互联网上&#xff0c;最流行的两大传输数据的标准就是json和XML了&#xff0c;关于谁是最好的&#xff0c;一直以来都是人们争论的话题&#xff0c;其实各有各的缺点和优点&#xff1b;1.定义介绍(1).XML定义扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用…

揭秘!阿里实时数仓分布式事务Scale Out设计

简介&#xff1a; Hybrid Transaction Analytical Processing(HTAP) 是著名信息技术咨询与分析公司Gartner在2014年提出的一个新的数据库系统定义&#xff0c;特指一类兼具OLTP能力&#xff08;事务能力&#xff09;和OLAP能力&#xff08;分析能力&#xff09;的数据库系统。 …

mysql对本地文件的读取_Mysql 任意读取客户端文件

load data infile "/etc/passwd" into table test FIELDS TERMINATED BY \n;实现&#xff1a;Mysql Server会读取服务端的/etc/passwd&#xff0c;然后将其数据按照\n分割插入表中&#xff0c;但现在这个语句同样要求你有FILE权限&#xff0c;以及非local加载的语句也…

使用了12个月的苹果 M1 芯片,我发现了它的「致命」弱点

作者 | Attila Vg译者 | 弯月出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;首先&#xff0c;我仍然相信苹果 M1 的芯片在技术上取得了巨大的飞跃&#xff0c;再次站在了创新的最前沿&#xff0c;然而一旦新鲜感消失之后&#xff0c;裂痕就会慢慢显现&#xff0c;…

spi 动态加载、卸载_理解 ServiceLoader类与SPI机制

对于Java中的Service类和SPI机制的透彻理解&#xff0c;也算是对Java类加载模型的掌握的不错的一个反映。了解一个不太熟悉的类&#xff0c;那么从使用案例出发&#xff0c;读懂源代码以及代码内部执行逻辑是一个不错的学习方式。一、使用案例通常情况下&#xff0c;使用Servic…

探秘RocketMQ源码——Series1:Producer视角看事务消息

简介&#xff1a; 探秘RocketMQ源码——Series1&#xff1a;Producer视角看事务消息1. 前言 Apache RocketMQ作为广为人知的开源消息中间件&#xff0c;诞生于阿里巴巴&#xff0c;于2016年捐赠给了Apache。从RocketMQ 4.0到如今最新的v4.7.1&#xff0c;不论是在阿里巴巴内部还…

三大院士、十大数据库掌门人,岳麓对话开启数字经济新时代!

10月23日&#xff0c;第二届“长沙 中国1024程序员节”在湖南长沙盛大开幕。大会以“开源开放、算据赋能——开启数字经济新时代”为主题&#xff0c;囊括岳麓尖峰对话、2021技术英雄大会、18场专业主题论坛/峰会&#xff1b;50企业创新展&#xff0c;联动100海内外高校&#…

java 队列_百战程序员:Java并发阻塞队列

阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构&#xff0c;BlockingQueue提供了线程安全的队列访问方式&#xff1a;当阻塞队列进行插入数据时&#xff0c;如果队列已满&#xff0c;线程将会阻塞等待直到队列非满&#xff1b;从阻塞队列取数据时&#xff…

select事件有哪些_Android 深入底层:Linux事件管理机制 epoll

在linux 没有实现epoll事件驱动机制之前&#xff0c;我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在linux新的内核中&#xff0c;有了一种替换它的机制&#xff0c;就是epoll。select()和poll() IO多路复用模型select的缺点&#xff1a;单个进程能够监…

如何从 0 到 1 开发 PyFlink API 作业

简介&#xff1a; 以 Flink 1.12 为例&#xff0c;介绍如何使用 Python 语言&#xff0c;通过 PyFlink API 来开发 Flink 作业。 Apache Flink 作为当前最流行的流批统一的计算引擎&#xff0c;在实时 ETL、事件处理、数据分析、CEP、实时机器学习等领域都有着广泛的应用。从 F…

殷浩详解DDD:如何避免写流水账代码?

简介&#xff1a; 在日常工作中我观察到&#xff0c;面对老系统重构和迁移场景&#xff0c;有大量代码属于流水账代码&#xff0c;通常能看到开发在对外的API接口里直接写业务逻辑代码&#xff0c;或者在一个服务里大量的堆接口&#xff0c;导致业务逻辑实际无法收敛&#xff0…

重度使用Flutter研发模式下的页面性能优化实践

简介&#xff1a; 淘宝特价版是集团内应用Flutter技术场景比较多&#xff0c;且用户量一亿人以上的应用了。目前我们首页、详情、店铺、我的&#xff0c;看看短视频&#xff0c;及评价&#xff0c;设置等二级页面都在用Flutter技术搭建。一旦Flutter有性能瓶颈&#xff0c;重度…

蚂蚁构建服务演进史

简介&#xff1a; 自动化构建和CI/CD往往是相辅相成的&#xff0c;可以理解为&#xff0c;自动化构建是温饱问题&#xff0c;解决了温饱就会有更多的提高生产力的诉求&#xff0c;也就是对应的CI平台&#xff0c;CI/CD本篇文章不做扩展。 作者 | 琉克 来源 | 阿里技术公众号 一…

这个云原生开发的痛点你遇到了吗?

简介&#xff1a; 上云从来都不是一片坦途&#xff0c;在此过程中我们总会遇到一些困难和挑战&#xff0c;得益于云原生技术的日益成熟&#xff0c;这些问题一定会有相应的解法。 作者&#xff1a;纳海 背景 在云原生时代&#xff0c;国内外众多云厂商释放出强大的技术红利…

mysql安装pymyaql_python安装mysql的依赖包mysql-python操作

一般情况下&#xff0c;使用pip命令安装即可&#xff1a;[rootdthost27 ~]# pip install mysql-python但是在实际工作环境中&#xff0c;往往会安装失败&#xff0c;这是因为系统缺少mysql的相关依赖组件。所以必须先安装mysql-devel类的包&#xff0c;而且必须要对应好mysql客…

「技术人生」专题第1篇:什么是技术一号位?

前言 什么是技术一号位、有哪些关注点、怎么做技术一号位&#xff1f; 做了研发团队的技术 leader 以后&#xff0c;要处理的事情非常多&#xff0c;如果对自己扮演的角色没有一个清晰的认知&#xff0c;就会出现该做的事情没有做&#xff0c;不该做的事情投入了过多的精力&…

服务器之后加码存储,浪潮信息重磅发布新一代 G6 存储平台

作者 | 宋慧 出品 | CSDN云计算 提到浪潮&#xff0c;业界首先想到的是浪潮信息服务器占有的优势和市场份额。不过&#xff0c;其实浪潮在存储领域也持续深耕和发力中。据国际分析机构 Gartner 报告显示&#xff0c;2021 年第一季度&#xff0c;浪潮存储在全闪存存储、分布式存…

技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数

简介&#xff1a; 以传递 name 和 pwd 参数为例&#xff0c;分别介绍此场景在 Android 小程序和 iOS 小程序中的实现过程。 前言 在部分场景下&#xff0c;需要向小程序的默认接收页&#xff08;pages/index/index&#xff09;传递参数。 本文将以传递 name 和 pwd 参数为例&…

腾讯安全发布安全托管服务MSS,推动网络安全建设向服务驱动转变

近年来&#xff0c;随着黑产组织逐渐规模化、产业化&#xff0c;网络攻击态势愈发严峻&#xff1b;同时&#xff0c;由于DevOps、云原生等新技术的落地&#xff0c;以及IT架构的变化&#xff0c;企业研发和运营的模型随之改变&#xff0c;风险应对策略也越发复杂&#xff0c;越…