热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql数据库的主外键及几种查询

关键字使用showdatabasesusedmshowtables--需要两张

关键字使用

show databases
use dm
show tables
-- 需要两张表,再建一张stu表
-- 手动建,比较快
select * from class_f
SELECT * from stu
# 关键字的使用
-- in
-- in 满足查询子集中的某一个即可
select * from class_f WHERE age not in(20,22)
-- in 后面的子集也可通过SQL语句查询结果
select * from stu where cid
in(select cid from class_f where age in (20,22));


-- any some all 三个关键字
-- 三个与in类似,查询是否满足后面的子集中的条件
-- 但是,关键字后面不允许写固定值 只允许写SQL语句(只能通过嵌套获取子集)
-- >any 满足查询子集中的某一个即可 >any
select * from class_f where cid > 2;
select * from stu where cid >any
(select cid from class_f where cid > 2);
-- some 与any完全一致


-- all 满足子集中的全部才可以
select * from stu where cid >all (select cid from class_f where cid > 2);

select * from stu
where cid <all
(select cid from class_f where cid > 2);







集合操作

-- 集合操作
-- 并集(union)
-- 1.要求前后两个查询子集的列数是一致的
-- 2.类型没有要求
-- 3.拼接后显示的列名是前一个子集默认的列名
-- 4.union与union all的区别 建议使用union all
-- union合并后做去重复的处理 性能慢,出现重复元素,记录首次出现那一行
-- union all 将两个查询的字节直接做合并 不做任何处理 性能比较快
create table newclass_f as select * from class_f;
show TABLES
SELECT * FROM newclass_f
select * from class_f union select * from newclass_f;
select * from class_f union all select * from newclass_f;

主键,外键

        表与表之间的关系



-- 1.主键约束
-- 每一个表格内 只能有一个列被设置为主键约束
-- 主键约束通常是用来标记表格中的数据的唯一存在
-- 主键约束要求当前的列 不能为null 值
-- 主键约束要求当前的列 值是唯一存在的 不能重复
select * from stu
-- 添加主键
-- constraint 约束
-- 添加主键修改列,DDL数据定义语言(create创建 drop删除 alter修改)
-- alter table 表名 add constraint 约束名 约束类型(列)
-- 简写 alter table 表名 add primary key(classid);
alter table stu add constraint pk_stu primary key(sid)


-- desc 表名;描述表格信息
desc stu
-- 描述 添加主键约束后表格信息
show keys from stu


-- 添加主键并自增
alter table class_f modify cid int(4) auto_increment;
alter table class_f change cid cid int(4) auto_increment;


-- 没有起始值的说明 主键列的值会从一开始
alter table class_f auto_increment = 10;-- 从十开始
alter table class_f modify cid int(4);-- 取消自增
alter table class_f drop primary key; -- 删除主键
-- 注意:删除主键约束以后 不重复的特性取消了 非空特性还在
alter table class_f modify cid int(4) null;-- 设置为空




-- 唯一约束(unique[key])
-- 可以为表格中的某一个列添加唯一约束,与主键约束类似
-- 唯一约束 表示的是列的值不能重复,可以为空
-- 唯一约束 在表格中可以存在多个列
-- alter table 表名 add constraint 约束名 约束类型(列);
alter table class_f add constraint uk_class_f unique key(score);
-- 可以简写
-- 删除唯一约束 alter table 表名 drop index 约束名;
alter table class_f drop index uk_class_f;




-- 非空约束(not null)
-- 在表格的某一个列上添加非空约束,当前列不能为空not null
-- alter table 表名 modify 原列名 原类型 原长度 [not] null;
-- alter table 表名 change 原列名 新列名 新类型 新长度
alter table class_f modify age varchar(10) not null;
alter table class_f modify age varchar(10) null;-- 相当于修改为默认null
-- 不能为空时,不想添加数据,但想给个默认值 default关键字
alter table class_f modify age varchar(10) not null default 'man';




-- 外键约束(foreign key)
-- 表格中可以有多个列被设置为外键
-- 当前列值可以为空 可以重复
-- 当前列的值不能随便填写 值去另一张表格内去寻找
-- ***外键是当前列的值受到另外一张表格某一个列的影响
-- 另外一张表格的列 是唯一的约束(主键 唯一)
-- 添加外键约束
# alter table 表名 add constraint fk_当前表_关联表 foreign key(列) references 另一个表(列);
alter table stu add constraint fk_stu_class_f foreign key(cid) references class_f(cid);
-- 简写
-- alter table 表名 add foreign key(列) references 另一个表(列);
-- 删除外键约束
-- alter table 表名字 drop foreign key 约束名字;
alter table stu drop foreign key fk_stu_class_f;
alter table stu drop key fk_stu_class_f;-- 将生成的key删除
-- 通过上述语句已经删除外键约束,自动在当前表格添加一个新的key
-- 需要再次手动将生成的key删除,外键约束才算真正删除干净

-- 查看表的信息
-- show keys from 表;
-- desc 表;
-- show create table 表名;


联合查询

-- 表格之间联合查询
-- 广义笛卡尔积   select * from stu,class_f;      
-- 等值连接  select * from stu,class_f where stu.cid=class_f.cid;  > < =都行
-- 广义笛卡尔积 将两张或多张表格进行无条件的拼接 进行where筛选 ;
-- 任何表格都可以拼接
-- 外连接
-- 外连接最早的目的是替代笛卡尔积,查询效率快
-- select * from A left/right [outer] join B on 条件
-- 1.两张表格A和B 取决于谁的数据在左边显示
-- A表格先出现 A左边显示  B表格后出现 B右边显示
-- 2.left和right 来控制以哪一个表格的数据作为基准
-- 作为基准的表格数据必须全部显示出来 非基准的表格按照on条件与之拼接
-- 若找到条件拼接 则正常显示 若找不到满足条件的 则 null
select * from stu s left outer join class_f cf on s.cid = cf.cid;


-- 内连接(自连接)
select * from A inner join B on 条件;
-- 可以在当前表格中再次查询当前表格的信息
select * from stu s inner join class_f cf on s.cid = cf.cid;







推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
author-avatar
我爱你2602912303
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有