MySQL增删查改(进阶1)

一、数据库约束

约束:按照一定条件进行规范的做事;

表定义的时候,某些字段保存的数据需要按照一定的约束条件;

1.null约束

  • 字段null:该字段可以为空;not null:该字段不能为空
  • 不指定的话就是null

id int not null;

2.unique:唯一约束

表示某个字段,不能重复(实际可以使用多个字段来建立unique唯一约束)

null不进行unique唯一校验;

sn int unique;

当sn重复时便会报错

3.default:默认值约束

表示某个字段设置了default及默认值,插入的时候该列不插入,就会插入默认值。

显示的插入数据即使是null,默认值也不会生效

name varchar(20) default 'unkown';

插入的字段不使用name,才会插入默认值:

4.primary key:主键约束

主键一般用于某张表标识唯一的一条数据

  • primary key =not null unique

仅仅unique约束的字段,还可以保存多条null的数据,也不能标识唯一的数据

主键字段不插入或者插入重复的都会报错

 一张表一般都需要设计主键

如果使用整型主键还可以结合auto_increment,表示从1开始,++自增

 自增不是以最大值加1的方式,而是mysql记录了这个值来递增。

 再插入数据,id就可能不连续

5.foreign key:外键约束

用于设计表与表之间的关系

表1(主表:主键)-----表2(从表:外键):就可以建立表1和表2一对一或者一对多的关系

二、表的设计

数据库设计表关系

主表的主键关联从表的外键(建立外键,不一定非要使用主键来关联,只是常用主键和外键关联)

create table 主表(

  id int primary key auto_increment,

...

);

create table 从表(

  id int primary key auto_increment,

...

  主表_id int,

   foreign key (主表_id) references 主表(id)

);

上面两个表中 蓝色部分建立关系

foreign key (主表_id) references 主表id)--->

主表_id:从表的外键字段名

主表:主表的表名;

id:主表的关联字段名(一般使用主键)

1.一对一的关系

比如:人对身份证

id:主键

name:姓名

amount:存款

username:账号

password:密码

身份证

id:主键

身份证号:*******

住址:*******

......

user_id:外键

建立人的主键与身份证外键的联系

从现实看,其实可以设计成一张表,但是人这张表查询比较频繁,如果把身份证相关的字段也放在一起,那么比较频繁的又不获取身份证信息的查询效率就比较低。

设计为一对一关系的两张表目的是:

  1. 数据库表设计其实就是建模(建立一种对象模型)
  2. 解耦:模型之间的解耦
  3. 效率:不经常使用的数据,单独存储,效率会比较高

2.一对多的关系

班级表

班级id

班级名称

...

学生表

学生 id:主键

学生姓名

学号

班级id:外键

班级id就是班级表和学生表之间的关联

一对多其实是有方向的,包含:

(1)班级到学生:一对多,一个班级多个学生

(2)学生到班级,一对一,一个学生一个班级

3.多对多的关系

表设计的时候(这个多对多关系,在两张主表中没有外键体现):

(1)两张主表建立多对多关系

(2)使用一张单独的中间表来表示两张主表的多对多关系

学生和课程再某个业务发生后就可能产生关系:

考试:一个学生考多门课程,一门课程有多个学生考试

设计上使用中间表:

(1)两个外键:分别关联两张主表的主键

(2)还可能设计一些业务的字段,比如考试成绩

学生表和课程表是多对多的关系(逻辑上的多对多关系),主表没有关系的体系;

中间表(体现实际的多对多关系),两个外键其实就表现出多对多的关系;

插入数据:

 在MySQL中执行后:

 表结构上只有两个一对多关系;数据上,体现出两个一对多关系,及逻辑上的多对多关系;

  • 一个学生考多个试--->学生表:中间表=1:n
  • 一个课程有多个考试成绩--->课程表:中间表=1:m
  • 中间表(考试成绩表)--->学生:课程=n:m

三、新增

插入操作:insert into 表 select...from 表 where... order by ... limit;

使用场景:

(1)复制表

(2)提前准备一些统计的数据(统计的sql一般关联很多表,条件可能也很复杂,执行效率可能不高),很多系统就提前运行任务,将统计的数据准备在单独的一张表中

 把查询结果集返回的所有数据,按查询出来的字段顺序,插入到insert表给的字段。

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

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

相关文章

bigemap在林业勘测规划设计行业的一些应用

选择Bigemap的原因: 主要注重影像的时效性,软件的影像时效性比其他的更新快,更清晰。 使用场景: 1.林业督查,主要是根据国家下发的图斑,结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…

Kafka实战案例

kafka系统的生成,自顶向下 1. kafaka发送消息 1.1 是最初始外部调用kafaka的地方1.6 是最初调用kafaka的函数。中间是对kafaka的构建 1.1 向Kafka发送一条发布视频的message 在videoHandler的发布视频逻辑中,向Kafka发送一条发布视频的mq&#xff0c…

【轻松玩转MacOS】常用软件篇

引言 在本篇文章中,我将介绍如何安装和使用一些常用的软件,如Safari浏览器、邮件、日历、地图等。让我们一起来看看吧! 一、Safari浏览器 Safari是MacOS自带的浏览器,具有简洁、快速、安全的特点。 以下是一些Safari浏览器的使…

Zabbix自定义脚本监控MySQL数据库

一、MySQL数据库配置 1.1 创建Mysql数据库用户 [rootmysql ~]# mysql -uroot -p create user zabbix127.0.0.1 identified by 123456; flush privileges; 1.2 添加用户密码到mysql client的配置文件中 [rootmysql ~]# vim /etc/my.cnf.d/client.cnf [client] host127.0.0.1 u…

vue模版语法-{{}}/v-text/v-html/v-once

一、{{}}双括号:用于文本渲染 1、 {{变量名}}:data中返回对象的变量名 2、{{js表达式}}:可以直接进行js表达式处理 3、注意:双大括号中不要写等式书写 二、v-text 指令,用于文本渲染 1、为了解决双大括号渲染数据出现闪烁问题 三、v-cloak …

Qt中的基础数据类型

1.基础类型 因为Qt是一个C++ 框架, 因此C++中所有的语法和数据类型在Qt中都是被支持的, 但是Qt中也定义了一些属于自己的数据类型, 下边给大家介绍一下这些基础的数类型 QT基本数据类型定义在#include <QtGlobal> 中,QT基本数据类型有: 类型名称注释备注qint8signed ch…

盒子模型的基础

盒子模型 边框&#xff08;border&#xff09; border可以设置元素的边框&#xff0c;边框分成三部分&#xff0c;边框的&#xff08;粗细&#xff09;边框的样式&#xff0c;边框的颜色 <style>div {width: 100px;height: 100px;border-width: 200;border-style: 边框…

【面试HOT100】哈希双指针滑动窗口

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于LeetCodeHot100进行的&#xff0c;每个知识点的修正和深入主要参考…

openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制

文章目录 openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制92.1 不支持的特性92.2 MOT限制92.3 不支持的DDL操作92.4 不支持的数据类型92.5 不支持的索引DDL和索引92.6 不支持的DML92.7 不支持的JIT功能&#xff08;…

自然语言处理的分类

动动发财的小手&#xff0c;点个赞吧&#xff01; 简介 作为理解、生成和处理自然语言文本的有效方法&#xff0c;自然语言处理&#xff08;NLP&#xff09;的研究近年来呈现出快速传播和广泛采用。鉴于 NLP 的快速发展&#xff0c;获得该领域的概述并对其进行维护是很困难的。…

代码随想录算法训练营第四十五天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零

1049. 最后一块石头的重量 II 视频讲解&#xff1a;动态规划之背包问题&#xff0c;这个背包最多能装多少&#xff1f;LeetCode&#xff1a;1049.最后一块石头的重量II_哔哩哔哩_bilibili 代码随想录 &#xff08;1&#xff09;代码 494. 目标和 视频讲解&#xff1a;动态规划…

计算机竞赛 深度学习疫情社交安全距离检测算法 - python opencv cnn

文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习疫情社交安全距离检测算法 ** 该项目较为新颖&#xff0c;适合作为竞赛…

剑指offer——JZ34 二叉树中和为某一值的路径(二) 解题思路与具体代码【C++】

一、题目描述与要求 二叉树中和为某一值的路径(二)_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入一颗二叉树的根节点root和一个整数expectNumber&#xff0c;找出二叉树中结点值的和为expectNumber的所有路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过…

Youtube视频下载工具分享-油管视频,音乐,字幕下载方法汇总

YouTube视频下载方法简介 互联网上存在很多 YouTube 下载工具&#xff0c;但我们经常会发现自己收藏的工具没过多久就会失效&#xff0c;我们为大家整理的这几种方法&#xff0c;是存在时间较久并且亲测可用的。后续如果这些工具失效或者有更好的工具&#xff0c;我们也会分享…

c++day2

1.XMIND 2. 自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c;定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include &…

基于SSM的固定资产管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

网站强制跳转至国家反诈中心该怎么办?怎么处理?如何解封?

在互联网环境中&#xff0c;网站安全是非常重要的。然而&#xff0c;在实际操作过程中&#xff0c;不少网站可能因内容问题、技术安全漏洞等原因被迫下线甚至跳转至国家反诈骗中心网址。面对这一严峻问题&#xff0c;我们如何有效解决&#xff0c;让网站恢复运行并解除强制跳转…

点餐小程序实战教程06-首页开发

用户注册功能开发好了之后&#xff0c;我们就要开发小程序&#xff0c;首先我们是规划小程序的功能模块&#xff0c;我们一共是四个模块&#xff0c;分别是首页、订单、消息和我的。 首页我们主要是点餐的功能&#xff0c;可以选择菜品&#xff0c;加入到购物车&#xff0c;然…

【C++】stack/queue/deque

目录 一、stack 1.1 stack的接口 1.2 关于使用stack的例题 1.2.1 最小栈 1.2.2 栈的压入、弹出序列 1.2.4 逆波兰表达式求值 1.3 stack的模拟实现 二、queue 2.1 queue的接口 2.2 queue的模拟实现 三、deque 3.1 deque底层实现原理 3.1.1 头插实现原理 3.1.2 尾插…

Cocos Creator3.8 项目实战(五)背景无限滚屏效果如何实现

在游戏中&#xff0c;我们经常会实现背景无限滚动的效果。那这些效果是怎么实现的呢&#xff1f; 原理很简单&#xff0c;就是使用多张背景图&#xff0c;每张图&#xff0c;每一帧都同时移动&#xff0c;当图移出屏幕外时&#xff0c;将其位置设置到下一张图的初始位置&#x…