Mysql基础 02 外键、多表查询、索引

文章目录

  • 一、外键约束
  • 二、多表查询
    • 1、连接查询
      • (1)笛卡尔积查询
      • (2)内连接
      • (3)外连接
    • 2、复合条件连接查询
    • 3、子查询
  • 三、索引

一、外键约束

外键所依赖的表为主表,字段绑定外键的表为子表。
主表:

CREATE TABLE ClassCharger(id TINYINT PRIMARY KEY auto_increment,name VARCHAR (20),age INT ,is_marriged tinyint(1)
);

注:如果ClassCharger在s3库中,而当前库不在s3中,可以将表名写为:s3.ClassCharger

INSERT INTO ClassCharger (name,age,is_marriged) VALUES ("冰冰",12,0),("丹丹",14,0),("歪歪",22,0),("姗姗",20,0),("小雨",21,0);

子表:
创建表时添加外键:
[CONSTRAINT 外键名]FOREIGN KEY (charger_id) REFERENCES ClassCharger(id)

注:作为外键一定要和关联主键的数据类型保持一致。如果不写CONSTRAINT 外键名,则会自动获取一个外键名。

CREATE TABLE Student(id INT PRIMARY KEY auto_increment,name VARCHAR (20),charger_id TINYINT,CONSTRAINT abc FOREIGN KEY (charger_id) REFERENCES ClassCharger(id)
) ENGINE=INNODB;
INSERT INTO Student1(name,charger_id) VALUES ("alvin1",2),("alvin2",4),("alvin3",1),("alvin4",3),("alvin5",1),("alvin6",3),("alvin7",2);

由于外键的作用,下列两句sql都执行不成功。

delete from ClassCharger where id=1;
insert into student (name,charger_id) values('haha',10);

创建表后,也可以添加、删除外键:

ALTER TABLE student  ADD CONSTRAINT abcFOREIGN KEY (charger_id)REFERENCES  classcharger(id);
ALTER TABLE student DROP FOREIGN KEY abc;

INNODB支持的ON语句:
外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update

外键约束对父表的含义:在父表上进行update/delete,在子表中有对应匹配行的候选键时,父表的行为取决于在定义子表的外键时指定的 on update/on delete子句。

①cascade方式: 在父表上update/delete记录时,同步update/delete掉子表的匹配记录。
外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除

ALTER TABLE student  ADD CONSTRAINT abcFOREIGN KEY(charger_id)REFERENCES  classcharger(id)ON DELETE CASCADE;

②set null方式: 在父表上update/delete记录时,将子表上匹配记录的列设为null。
注:子表的外键列不能为not nul

ALTER TABLE student  ADD CONSTRAINT abcFOREIGN KEY(charger_id)REFERENCES  classcharger(id)ON DELETE SET NULL;

③Restrict方式 ④No action方式:这两种方式用的比较少,了解即可,都是拒绝对父表进行删除更新操作。

二、多表查询

1、连接查询

先准备两张表:
创建表employee,并插入记录

create table employee(emp_id int auto_increment primary key not null,emp_name varchar(50),age int,dept_id int
);
insert into employee(emp_name,age,dept_id) values('A',19,200),('B',26,201),('C',30,201),('D',24,202),('E',20,200),('F',38,204);

创建表department,并插入记录

create table department(dept_id int,dept_name varchar(100)
);
insert into department values(200,'人事部'),(201,'技术部'),(202,'销售部'),(203,'财政部');

(1)笛卡尔积查询

SELECT * FROM employee,department;

(2)内连接

A inner join B:找出A表和B表中匹配on条件的所有记录。

select * from employee,department where employee.dept_id = department.dept_id;

select * from employee inner join department on employee.dept_id = department.dept_id;

注:这里 inner join 前后两张表的顺序颠倒,查询结果一样。

(3)外连接

①左外连接
A left join B:在内连接的基础上,增加A表有B表没有的结果。

select * from employee left join department on employee.dept_id = department.dept_id;

②右外连接
A right join B:在内连接的基础上,增加B表有A表没有的结果。

select * from employee RIGHT JOIN department on employee.dept_id = department.dept_id;

③全外连接
可以理解为左连接和右连接的并集。
mysql不支持full join语句,可以使用union语句来实现全外连接。

select * from employee RIGHT JOIN department on employee.dept_id = department.dept_id
UNION
select * from employee LEFT JOIN department on employee.dept_id = department.dept_id;

注意:union与union all的区别:union会去掉相同的纪录

2、复合条件连接查询

查询员工年龄大于等于25岁的部门:

SELECT DISTINCT department.dept_nameFROM employee,departmentWHERE employee.dept_id = department.dept_idAND age>25;

3、子查询

子查询是将一个查询语句嵌套在另一个查询语句中。
内层查询语句的查询结果,可以为外层查询语句提供查询条件。
子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字。
还可以包含比较运算符:= 、 !=、> 、<等。

(1)查询employee表,但dept_id必须在department表中出现过

select * from employeewhere dept_id IN(select dept_id from department);

(2)复制employee到AA

create table AA (select * from employee);

注:这里只复制表字段和记录,不复制约束条件。

(3)带EXISTS关键字的子查询
EXISTS关字键字表示存在,返回Ture或False。
当返回Ture时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询。

select * from employeeWHERE EXISTS(SELECT dept_name from department where dept_id=205);

这里EXISTS返回False,外层select查询结果为Empty set。

三、索引

索引在Mysql中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引相当于字典的目录的页码,可以大幅提高查询速度。创建与维护索引会消耗很多时间与磁盘空间,但查询速度大大提高。
注:primary key主键也是一种索引。

unique是唯一索引。设置字段约束条件为unique时,会自动加一个unique索引。

create table test(id int primary key auto_increment,name varchar(20),salary int DEFAULT 1000
);insert into test(name) values("111"),("222"),("333"),("444");alter table test modify name varchar(20) unique;

创建表时,创建索引语法:

create table 表名 (字段名1 数据类型 [约束条件],字段名2 数据类型 [约束条件],...[unique | fulltext | spatial] index | key[索引名] (字段名[(长度)] [asc | desc])
);

创建索引时,如果不指定索引名,则会以字段名为索引名。

创建普通索引示例:

create table test1(id int,name varchar(20),index index_name (name) -- 关键字index换成key,效果相同
);

创建全文索引示例:
全文索引适合给大文本做索引。

create table test2(id int,name varchar(20),resume varchar(100),fulltext index index_name (resume)
);

创建多列索引示例:

create table test3(id int,name varchar(20),resume varchar(100),INDEX index_name_resume (name, resume)
);

在已存在表上创建索引:
方法一:

create [unique | fulltext | spatial] index 索引名on 表名 (字段名[(长度)] [asc | desc]);

方法二:

alter table 表名 add [unique | fulltext | spatial] index 索引名 (字段名[(长度)] [asc | desc])

示例:

create index index_name on test4 (name);
alter table test4 add unique index index_name (name);

删除索引:
语法: drop index 索引名 on 表名;

示例:

drop index index_name on test4;

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS/QGIS按掩膜提取或栅格裁剪后栅格数据的值为什么变了?

问题描述&#xff1a; 现有一栅格数据&#xff0c;使用ArcGIS或者QGIS按照矢量边界进行按掩膜提取或者栅格裁剪以后&#xff0c;其值的范围发生了变化&#xff0c;如下&#xff1a; 可以看到&#xff0c;不论是按掩膜提取还是进行栅格裁剪后&#xff0c;其值的范围均与原来栅…

劫持微信聊天记录并分析还原 —— 合并解密后的数据库(三)

本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。 程序以 Python 语言开发&#xff0c;可读取、解密、还原微信数据库并帮助用户查看聊天记录&#xff0c;还可以将其聊天记录导出为csv、html等格式用于AI训练&#xff0c;自动回复或备份等等作用。下面我…

python数据结构基础(7)

本节学习最后一种数据结构---图,在很多问题中应用图可以帮助构建思维空间,快速理清思路,解决复杂问题. 图就是一些顶点的集合,这些顶点通过一系列边链接起来.根据边的有向和无向,图分为有向图和无向图.有时图的边上带有权重,本节暂时不将权重作为重点. 计算机通过邻接表或者邻…

NAS的软件和生态才是王道!谈谈群晖是如何凭实力“躺平”的

NAS的软件和生态才是王道&#xff01;谈谈群晖是如何凭实力“躺平”的 哈喽小伙伴们好&#xff0c;我是Stark-C~ 近几年随着大家对于数据存储和管理需求的增加&#xff0c;以及各大网盘变相收费和涨价&#xff0c;并且还不合时宜的爆出隐私泄露问题。而NAS&#xff08;网络附…

阅读笔记 Contemporary strategy analysis Chapter 14

来源&#xff1a;Robert M. Grant - Contemporary strategy analysis (2018) Chapter 14 External Growth Strategies: Mergers, Acquisitions, and Alliances 合并、收购和联盟 Ⅰ Introduction and Objectives 企业并购与联盟是公司实现快速扩张的重要战略工具。通过这些手段…

Java 8 Stream API 详解

在 Java 8 中&#xff0c;引入了一个全新的 API——Stream API&#xff0c;它与传统的 java.io 包下的 InputStream 和 OutputStream 没有任何关系。Stream API 的引入主要是为了提高程序员在操作集合&#xff08;Collection&#xff09;时的生产力&#xff0c;而这一提升很大程…

VMware替代实战手册:更高效的MySQL数据库迁移方案

数据库作为数字化用户的核心资产&#xff0c;其迁移是一项复杂且重要的任务&#xff0c;特别是在VMware平台替换及IT基础设施更新换代之时&#xff0c;尤其需要保障数据库迁移过程的平稳、流畅。 深信服推出的数据库管理平台&#xff08;DMP&#xff09;是为关系型数据库量身打…

GaussDB高智能--库内AI引擎:模型管理数据集管理

3.2 模型管理 在机器学习算法进行训练后&#xff0c;生成的模型需要进行存储&#xff0c;以便后续推理进行使用。训练过程的时序图如下&#xff1a; 在训练过程中&#xff0c;最后一步是通过调用store_model接口&#xff0c;在系统表gs_model_warehouse中插入一条记录&#…

使用ookii-dialogs-wpf在WPF选择文件夹时能输入路径

在进行WPF开发时&#xff0c;System.Windows.Forms.FolderBrowserDialog的选择文件夹功能不支持输入路径&#xff1a; 希望能够获得下图所示的选择文件夹功能&#xff1a; 于是&#xff0c;通过NuGet中安装Ookii.Dialogs.Wpf包&#xff0c;并创建一个简单的工具类&#xff1a; …

求助帖【如何学习核磁共振的原理】

最近提前进组了 我完全不懂磁共振的相关知识 想问问各位大佬有没有推荐的学习路线 或者是学习资料、论坛都可以的&#xff08;我做的方向是磁共振成像技术&#xff09; 老师给了一本书&#xff0c;但是有点看不懂&#xff0c;全英文的 叫Principles Of Magnetic Resonance …

【自动化测试】如何在jenkins中搭建allure

相信大家在做自动化测试过程中&#xff0c;都会用到自动化测试环境&#xff0c;目前最常见的就是通过容器化方式部署自动化测试环境&#xff0c;但对于一些测试小白&#xff0c;不是很会搭建持续集成环境&#xff0c;特别是从0-1的过程&#xff0c;需要自行搭建很多依赖环境&am…

人才流失预测模型(机器学习)

1. 项目描述 ​ 企业的快速发展离不开人才的支撑&#xff0c;可是现在我国的企业的人才流失严重&#xff0c;人才流失问题现在已经成为了关系企业发展的一个重大的问题。这些企业要想在目前激烈的竞争中快速发展&#xff0c;就需要依靠自身的人力资源的来竞争。只有拥有比对方…

【Mac】安装 VMware Fusion Pro

VMware Fusion Pro 软件已经正式免费提供给个人用户使用&#xff01; 1、下载 【官网】 下拉找到 VMware Fusion Pro Download 登陆账号 如果没有账号&#xff0c;点击右上角 LOGIN &#xff0c;选择 REGISTER 注册信息除了邮箱外可随意填写 登陆时&#xff0c;Username为…

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

【el-pagination的使用及修改分页组件的整体大小修改默认样式的宽度详细教程】

今天遇到个bug&#xff0c;使用element-puls中的分页的时候&#xff0c;长度会超出盒子&#xff0c;今天教大家如何修改el-pagination的宽度&#xff0c;以及修改分页组件的整体大小 直接修改 style"width: 100%; margin-top: 10px"不生效 控制台修改el-pagination…

单体架构的 IM 系统设计

先直接抛出业务背景&#xff01; 有一款游戏&#xff0c;日活跃量&#xff08;DAU&#xff09;在两千左右&#xff0c;虽然 DAU 不高&#xff0c;但这两千用户的忠诚度非常高&#xff0c;而且会持续为游戏充值&#xff1b;为了进一步提高用户体验&#xff0c;继续增强用户的忠…

设计模式之单列模式(7种单例模式案例,Effective Java 作者推荐枚举单例模式)

前言 在设计模式中按照不同的处理方式共包含三大类&#xff1b;创建型模式、结构型模式和行为模式&#xff0c;其中创建型模式目前已经介绍了其中的四个&#xff1b;工厂方法模式、抽象工厂模式、生成器模式和原型模式&#xff0c;除此之外还有最后一个单例模式。 单列模式介绍…

具有扩展卷积的DCNN

目的&#xff1a; 进行了一系列实验来证明&#xff0c;在没有任何全连接层的情况下&#xff0c;具有扩展卷积的 DCNN 的性能并不比广泛使用的具有包含收缩&#xff08;无零填充&#xff09;卷积层和多个全连接层的混合结构的深度神经网络差。 DCNN&#xff1a;Deep convoluti…

【linux】查看不同网络命名空间的端口

在部署harbor时&#xff0c;内部用的是数据库postgresql&#xff0c;端口默认是: 5432&#xff0c;一开始以为这个数据库docker容器是在本命名空间中&#xff0c;一直用ss -lnt查询系统的端口&#xff0c;找不到5432端口。但是harbor要能正常使用&#xff0c;所有怀疑harbor的容…

W5500-EVB-Pico2评估板介绍

目录 1 概述 2 板载资源 2.1 硬件规格 2.2 硬件规格 2.3 工作条件 3 参考资料 3.1 RP2350 数据手册 3.2 W5500 数据手册 3.3 原理图 原理图 & 物料清单 & Gerber 文件 3.3 尺寸图 (单位 : mm) 3.4 参考例程 认证 CE FCC AWS 资质 Microsoft Azure 认证…