热门标签 | 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;







推荐阅读
  • 本文总结了MySQL的一些实用技巧,包括查询版本、修改字段属性、添加自动增长字段、备份与恢复数据库等操作,并提供了一些常见的SQL语句示例。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 当面临数据库清理任务时,若无删除或重建数据库的权限,可以通过编写SQL脚本来实现批量删除用户自定义的数据表和存储过程。本文将详细介绍如何构造这样的SQL脚本。 ... [详细]
  • sqlserver动态分区方案例子
    sqlserver动态分区方案例子当我们存储的数据量比较大时,比如超过千万,上亿级别时单纯的使用索引可能效果不明显了,此时我们可以考虑采 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • Django xAdmin 使用指南(第一部分)
    本文介绍如何在Django项目中集成和使用xAdmin,这是一个增强版的管理界面,提供了比Django默认admin更多的功能。文中详细描述了集成步骤及配置方法。 ... [详细]
  • Oracle性能提升:深入探讨SQL优化与类型转换的影响
    本文详细分析了在Oracle数据库中如何通过正确的数据类型匹配来避免不必要的类型转换,从而提高SQL查询效率。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 深入理解Java MySQL数据库连接池实现
    尽管利用Apache Commons DBCP等工具可以轻松构建数据库连接池,但本文详细解析了数据库连接池的工作机制,提供了详尽的注释,帮助开发者深入理解其内部运作。这不仅有助于提高数据库操作的效率,还能增强应用程序的稳定性和性能。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 如何处理MySQL命令行中文乱码问题
    本文详细探讨了MySQL命令行中出现中文乱码的原因及解决方案,通过调整配置文件和执行特定SQL命令来确保字符集正确设置,为用户提供了一个有效的解决路径。 ... [详细]
  • 本文介绍了用于监控数据库运行状态的SQL查询,包括重做日志切换频率及PGA和SGA内存使用情况的检查方法。 ... [详细]
  • 本文探讨了如何利用 Hibernate 进行高效的批量更新和删除操作,包括直接使用 Hibernate API 的方法及其局限性,以及如何通过 JDBC 或存储过程实现更优的性能。 ... [详细]
  • Flowable 6.6.0 表单引擎在Web应用中的集成与使用
    本文档提供了Flowable 6.6.0版本中表单引擎在Web应用程序中的配置和使用指南,包括表单引擎的初始化、配置以及在Web环境下的具体实现方法。 ... [详细]
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社区 版权所有