mysql的约束和表关系

根据查询的结果,复制出一个新表

create table newTable AS select * from oldTable;

create table newPeople  AS select * from day2_test.people;

 

约束

引入:如果某一列如id列,有重复的数据,无法准确定位,有的列有空值null;

解决:需要给列约束,让数据合法

约束其实就是一种限制,用于修饰表中的列,通过这种限制来保证数据的准确性,有效性和完整性

约束名称关键字作用
主键约束primary key唯一+非空
唯一约束unique唯一
非空约束not null非空
默认值约束default 默认的值指定默认值
外键约束foreign key多表之间的关系约束

 主键约束

主键概述:设定表中某一字段,那么该字段所在列的数据能够唯一的标识表中每一行数据(作用)

设定为主键的字段一般和业务无关列有这些特点:1:唯一,2:非空,3:与业务无关

 主键的定义和删除语法

        1在建表的时候指定

create table 表名 (id int primary key,其他字段...);

        2在已有表中指定(原来表中没有主键) 

 alter table 表名 add primary key(字段名);

         3删除主键约束

alter table 表名 drop primary key;

-- 在已有表中添加索引
alter table people add primary key (id);-- 创建的时候添加
create table student2
(id int primary key,name varchar(10)
);
-- 删除主键约束
alter table student2 drop primary key;

 练习

create table student3
(id int primary key,name varchar(10),age int
);
-- 测试主键
insert into student3 values(1,'hhh',18);
insert into student3 values(1,'aaa',20);-- err
insert into student3 values(null,'ccc',56);-- err-- 删除主键
alter table student3 drop primary key ;-- 添加主键
alter table student3 add primary key (id);

主键列下数据不能重复

索引我们把主键列交给mysql(主键列的插入的数据,交给mysql管理)

主键自增:
主键如果让我们自己添加可能有重复的主键导致数据添加失败。所以我们每次插入新的记录时,数据库都是自己生成主键的值

        主键添加语法:

字段名 字段类型 primary key auto_increment;

注意,需要让主键自增,主键必须是整数类型

 

create table student4
(id int primary key auto_increment,-- 主键自动增加name varchar(10)
);insert into student4(name) values('aaa');
insert into student4(name) values('bbb');
insert into student4(name) values('ccc');
insert into student4 (id, name) values (null,'ddd');delete from student4 where id=3;-- 把第三行删除insert into student4(name) values('eee');-- id=5,可见把id=3删除后,之后生成的id不会重复insert into student4(id, name) values(100,'fff');--  使用100覆盖mysql管理的主键值
insert into student4(name) values('ggg'); -- id=101select * from student4;

        主键自增的注意事项

1.主键列下的数据由mysql维护(从1开始,每次增加1)

2.mysql维护过的主键值,不能重复使用

3.当程序员干预主键,就会拿插入的主键值,覆盖mysql管理的主键值 

        delete和truncate 删表对id的影响

1.delete删除表中的数据,不重复auto_increment的值

2.truncate摧毁表,重建表,auto_increment的值重置为1 

 唯一约束

一个表只能有一个主键 

作用

被唯一约束的字段,本列数据不允许出现重复的数据,null除外,null可以重复

 语法

1.create table 表名 (id int unique,字段名);

2.alter table 表名 add unique(字段名);

create table student5
(id int primary key auto_increment,name varchar(10)
);alter table student5 add unique (name);
-- 插入相同的name值时,会插入失败,但是id(主键值)还是会自增

 非空约束

 作用:

被非空约束的字段,本列数据不允许出现null数据。插入数据若为null就会报错

语法

1.create table 表名 (id int not null);

2.alter table 表名 modify 字段名 类型 not null;

create table student6
(id int primary key auto_increment,name varchar(10) unique not null
);alter table student5 modify name varchar(10) not null ;

 非空+唯一约束和主键约束的区别

1.主键约束在一张表只能存在一个,非空加唯一约束没有限制,可以存在多个

2.主键约束有自动增长,非空+唯一约束没有自动增长

默认值约束

作用

被默认值约束的字段(列),相当于给字端添加默认值,插入数据时如果字段没有被赋值,则使用默认值

语法

默认值约束需要使用的关键字:default

1.创建表时指定

create table 表名

(

字段名 字段类型 default 默认值,

其他字段

); 

2.给已有表指定字段添加默认值

alter table 表名 modify 字段名 字段类型 default 默认值;

create table student7
(id int primary key auto_increment,name varchar(10) not null unique,address varchar(10) default '天津'
);
-- 插入null值,不代表没有给数据
insert into student7 (id, name, address) values (null,'aaa',null);-- 没有给值
insert into student7 (name) values ('bbb');

 

表关系

 一对一

一对多

多对多

一对多表关系

例子:一个用户可以有多个订单,一个订单只能对应一个用于

我们约定,"一方"(用户表)叫主表或1表,"多方"(订单表)叫从表或多表 

设计表时,我们通常在多表中添加一个字段,用于存储主表主键的值,这个字段叫外键字段。

外键约束的作用:
1.建立表和表之间的关系

2.约束外键下的数据和主表数据下的数据保持一致(一致性,完整性)

多对多表关系

例子:老师和学生之间的关系

会创建第三张中间表(有两个字段,分别是学生和老师的主键),由中间表承担外键字段(降低多对多的复杂关系,变成两个一对多)

一是老师表和学生表,多是中间表

这个中间表中会有多个相同学生主键,和多个相同老师主键

所以一个学生对应多个相同的学生主键,一个学生主键对应一个学生

所以是一对多

 问题一:怎么建立表和表之间的关系

答案:外键字段+主键字段

问题二:外键字段应该创建在哪个表

外键字段创建,需要考虑多表关系

一对多:外键字段创建在多表上

多对多:创建第三张表,外键字段创建在中间表上

一对一:1.两张表合并为一张表

                2.(一定要外键字段)任选一张表为从表

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

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

相关文章

人脸清晰修复神器CodeFormer

随着AI技术在图像处理领域大展身手,AI去马赛克相关的项目也屡见不鲜,比如在Github上开源免费、备受欢迎的 CodeFormer 。不得不说利用这款神奇的人脸修复工具,真的是让我大开眼界,竟然可以这样搞! 不管面对的是多么模…

大模型+多模态实现

那么如何在预训练LLM的基础上引入跨模态的信息(包括图像、语音、视频模态),让其变得更强大、更通用呢?本节将介绍“大模型多模态”的3种实现方法。 以LLM为核心,调用其他多模态组件 微软亚洲研究院(MSRA&…

Java基础(运算符)

运算符 运算符和表达式 运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式;不同运算符连接的表达式体现的是不同类型的表达式。 算术运算符(加…

Linux基础命令[24]-su

文章目录 1. su 命令说明2. su 命令语法3. su 命令示例3.1 不加参数3.2 -(登录)3.3 -c(执行命令) 4. 总结 1. su 命令说明 su:以用户身份执行命令,基本信息如下: Usage:su [options] [-] [USE…

数据结构四:线性表之带头结点的单向循环循环链表的设计

前面两篇介绍了线性表的顺序和链式存储结构,其中链式存储结构为单向链表(即一个方向的有限长度、不循环的链表),对于单链表,由于每个节点只存储了向后的结点的地址,到了尾巴结点就停止了向后链的操作。也就…

架构师系列-消息中间件(九)- RocketMQ 进阶(三)-消费端消息保障

5.2 消费端保障 5.2.1 注意幂等性 应用程序在使用RocketMQ进行消息消费时必须支持幂等消费,即同一个消息被消费多次和消费一次的结果一样,这一点在使用RoketMQ或者分析RocketMQ源代码之前再怎么强调也不为过。 “至少一次送达”的消息交付策略&#xff…

Hive主要介绍

Hive介绍 hive是基于 Hadoop平台操作 HDFS 文件的插件工具 可以将结构化的数据文件映射为一张数据库表 可以将 HQL 语句转换为 MapReduce 程序 1.hive 是由驱动器组成,驱动器主要由4个组件组成(解析器、编译器、优化器、执行器) 2.hive本身不…

【安卓13-Framework】SystemUI定制之屏蔽下拉状态栏部分快捷按钮

1、需求 屏蔽下拉状态栏谷歌录屏、省电模式、二维码扫描器等快捷按钮。 2、修改路径 普及:安卓的SystemUI包提供了状态栏、导航栏、通知中心等重要的用户界面元素。 状态栏小部件UI显示修改路径:frameworks/base/packages/SystemUI/src/com/android/s…

Java虚拟机(jvm)常见问题总结

1.电脑怎样认识我们编写的Java代码 首先先了解电脑是二进制的系统,他只认识 01010101比如我们经常要编写 HelloWord.java 电脑是怎么认识运行的HelloWord.java是我们程序员编写的,我们人可以认识,但是电脑不认识 Java文件编译的过程 1. 程…

git lab 2.7版本修改密码命令

1.gitlab-rails console -e production Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux] GitLab: 14.9.0-jh (51fb4a823f6) EE GitLab Shell: 13.24.0 PostgreSQL: 12.7 2根据用户名修改密码 user User.find_by(username: ‘username’) # 替换’use…

无人驾驶(移动机器人)路径规划之RRT与RRTStar算法及其matlab实现

在自动驾驶与移动机器人路径规划时,必定会用到经典的算法RRT与RRT Star。下面是RRT与RRTStar的matlab实现效果。可以发现RRTStar效果明显改善。 目录 一、效果比较 1.1 RRT算法效果(黑色为障碍物,红色线为最终路径,蓝色三角形为…

C++之STL-vector+模拟实现

目录 一、vector的介绍和基本使用的方法 1.1 介绍 1.2 迭代器 1.3 vector的一些基本使用 1.3.1 构造函数 1.3.2 迭代器 1.3.3 有关容量的接口 1.3.4 增删查改 二、模拟实现vector 2.1 成员变量 2.2 迭代器的实现 2.3 容量接口的实现 2.3.1 size函数实现 2.3.2 capa…

阿斯达年代记三强争霸新手开荒注意事项 搬砖攻略和注意问题分享

阿斯达年代记三强争霸新手开荒注意事项 搬砖攻略和注意问题分享 阿斯达年代三强争霸这款游戏刚开始公测就获得了玩家们的集体关注,这是一款根据影视剧改编的MMORPG游戏,玩家将置身于名为阿斯大陆的奇幻世界,加入阿斯达、亚高、不法者三大势力…

Prompt之美:如何设计提示词让大模型变“聪明”

目录 一. Prompt关键要素 二. Prompt技巧 三. 实战中的Prompt优化 四. 参考文献 一. Prompt关键要素 Prompt是一个简短的文本输入,用于引导AI模型生成特定的回答或执行特定任务。换句话说,Prompt是你与AI模型沟通的方式。一个好的Prompt可以让AI更准…

从现在开始:让AI写代码,你只负责敲tab键

如果你是一名程序员,你一定有过这样的经历:在编写代码的时候,突然遇到了一个棘手的问题,需要花费大量的时间去查找资料、尝试不同的解决方案,甚至有时候还需要去问同事或者在网上寻求帮助。这样的情况不仅会浪费你的时…

用立方样条联合SHAP分析在危险因素鉴定中的作用

用立方样条联合SHAP分析在危险因素鉴定中的作用 1. SHAP分析告诉我们变量之间的关系 SHAP分析计算的SHAP值代表了某变量对于结局指标的贡献,代表了相关性的趋势,SHAP分析中的散点图是对以上关系的可视化,从中我们可以直观看到随着变量值的变…

百度 | 如何白嫖文心一言4.0,偷偷的用!

文心一言4.0 官方价一个月 59.9,贵不贵,很贵啊 现在有个白嫖文心一言4.0的方法 分享给大家 效果比3.0好用 如何使用 这里用到文心智能体平台,也是百度出的,和字节跳动的coze很像 这里打开文心智能体平台,自行百度…

diskMirror docker 使用容器部署 diskMirror 服务器!!!

Welcome to diskMirror-docker 获取项目 这个项目是 diskMirror-spring-boot 镜像版本的项目,您可以使用下面的命令将此项目编译为一个镜像! # 进入到您下载的源码包目录 cd diskMirror-docker# 点击脚本来进行版本的设置以及对应版本的下载 设置 和 编…

JavaEE:File类查询一个文件的路径(举例+源码 )

一、File类概述 Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。File 类中的方法可以对文件路径以及文件名等信息进行查询,也可以对文件进行各项增删改操作,本文主要介绍 File 类的查询方法。 二、代码示例 …

Python入门第10篇(编码)

目录 一、编码是什么? 二、Python中编码 1.读取文件引发的问题 2.其实是Windows的问题 3.试着改改问题 4.各种骚操作 5.终极解决 6.推荐方案 总结 Python系列文章目录 前言 编码存在于所有文件,比较常见的ASCII、utf8、gbk等。最常用的还是ut…