数据库的约束和设计

article/2025/9/28 4:07:49

约束

  • 作用
    • 对表中的数据进行进一步的限制, 保证数据的正确性, 有效性和完整性
  • 种类
    • primary key : 主键约束
    • unique : 唯一约束
    • not null : 非空约束
    • default : 默认值
    • foreign key : 外键约束
    • auto_increment : 自增约束(适用于int数据类型)

主键约束

  • 特点
    • 非空且唯一
  • 注意事项
    • 通常不用业务字段作为主键, 单独给每张表设计一个id的字段, 把id作为主键; 主键是给数据库和程序使用的, 不是给最终的客户使用的; 所以主键有没有含义没有关系, 只要不重复, 非空就行
    • 每张表都应该有一个主键, 并且每张表只能有一个主键(可以一组字段作为一张表的主键)
1. 在创建表的时候给字段添加主键
create table 表名 (字段名 数据类型 primary key,字段名 数据类型,字段名 数据类型
);
create table 表名 (字段名1 数据类型,字段名2 数据类型,字段名3 数据类型,primary key(字段名1, 字段名2)
);2. 在已有表中添加主键
alter table 表名 add primary key(字段名);
alter table 表名 add primary key(字段名1, 字段名2);

自增约束(主键自增)

  • 作用
    • 能够设置主键为自动增长
    • 主键如果让我们自己添加很有可能重复, 我们通常希望在每次插入新记录时, 数据库自动生成主键字段的值
  • 注意事项
    • 只能给主键添加约束
    • 只能给一列添加自增约束
-- 示例1
create table test1 (id int primary key auto_increment,name varchar(10),age int
);
-- 示例2
alter table test1 modify id int primary key auto_increment;
alter table test1 modify id int auto_increment;

默认值

  • 注意事项
    • 主动插入null 不会被默认值替换
create table test1 (id int ,name varchar(10),age int default 18
);insert into test1(name, age) values('11', null); -- (null, 11, null)
insert into db4.test1(name) values('22'); -- (null, 22, 18);

表的关系和外键约束

  • 表的关系分为一对一, 一对多和多对多, 在处理多对多关系时我们需要引入第三张表, 作为多对多两张表的桥梁
  • 第三张表需要引入其余两张表的主键作为自己表中的外键
-- 前置条件
create table tb_order (id int primary key auto_increment,payment double(10, 2),payment_type tinyint,status tinyint
);create table tb_goods (id int primary key auto_increment,title varchar(100),price double(10, 2)
);create table tb_order_goods (id int primary key auto_increment,order_id int,goods_id int,count int
);
alter table 表名 add [constraint 约束名称]
foreign key(当前表中的列名) references 被引用的表名(被引用表的列名);-- 完整写法(给已经存在的表添加外键约束)
alter table tb_order_goods add constraint fk_order_id
foreign key(order_id) references tb_order(id);alter table tb_order_goods add constraint fk_goods_id
foreign key(goods_id) references tb_goods(id);-- 省略写法(给已经存在的表添加外键约束)
alter table tb_order_goods add
foreign key(order_id) references tb_order(id);alter table tb_order_goods add
foreign key(goods_id) references tb_goods(id);
-- 完整写法((创建表时就添加外键约束))
create table tb_order_goods (id int primary key auto_increment,order_id int,goods_id int,count int,constraint fk_order_id foreign key(order_id) references tb_order(id),constraint fk_goods_id foreign key(goods_id) references tb_goods(id)
);-- 省略写法(创建表时就添加外键约束)
create table tb_order_goods (id int primary key auto_increment,order_id int,goods_id int,count int,foreign key(order_id) references tb_order(id),foreign key(goods_id) references tb_goods(id)
);

在这里插入图片描述

  • 注意事项
    • 添加数据需要先添加主表, 然后添加从表
    • 删除数据需要先删除从表, 然后再删除主表

http://chatgpt.dhexx.cn/article/1WcOF0Kr.shtml

相关文章

MySQL:数据库的约束

目录 1.数据库约束 1.1 非空:not null 1.2 唯一:unique ​​​​​​​ 1.3 默认值:default 1.4 列描述:comment 1.5 主键约束:primary key 1.6 外键约束 1.7 综合案例 2.插入查询结果 3.聚合函数 4.group by…

oracle数据库:约束

约束简介 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到…

[数据库]表的约束

●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅…

MySQL数据库,数据的约束

目录 1.数据的约束 1.1约束的类型 1.2NULL约束 1.3UNIQUE约束 1.4DEFAULT约束 1.5PRIMARY KEY约束 1.6FOREIGN KEY约束 1.数据的约束 首先,创建一个名为test的数据库: mysql> create database test charset utf8; Query OK, 1 row affected …

MySQL数据库(数据库约束)

目录 数据库约束 数据库约束的类型: null约束 : unique约束(唯一约束): default约束(默认值约束): primary key约束(主键约束): for…

数据库中的8种常见约束定义

数据库中常见约束的定义理解和应用(附代码) 首先来说数据库中约束的定义是什么? 约束定义:按照表中的数据规则,如果存在违反约束的数据行为,行为就会被阻止。 一般在创建表之后就会创建相关列的约束&#…

基础SQL第二课:约束

一、约束: 什么是约束? 为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。 数据库完整性约束分…

sublime解决中文乱码问题

首先找到你选择的build-system,如下图所示: 第二步:找到preferences下的browse packages,点击进入目录 第三步:找到对应的.sublime-build文件 第四步:打开文件,将"env": {"LANG&…

sublime text 3211 安装中文包

sublime text 3211 安装中文包 安装步骤: 1、打开Sublime Text3,选择Preferences ->Package Contorol 2、在Sublime Text3 弹窗输入install package,选择对应命令,然后鼠标点击安装install package 3、等待一会Sublime Text3 的 insta…

Sublime 中文命名乱码(显示为方框)

今天在使用Sublime中发现,将文件名以部分文字以中文命名,非中文部分能正常显示,中文部分显示不出来。如下图所示 这里就是python能显示出来,其他的汉字就变成了方框。与此对应的现象还有部分文本的部分内容显示为繁体 &#xff0…

解决sublime汉化后部分中文显示为繁体字

解决sublime汉化后部分中文显示为繁体字 1. 问题描述2. 解决方法3. 修正之后的效果 1. 问题描述 使用插件下载汉化包之后,部门字体仍显示为繁体,如下图 这种字体看着实在是别扭的不行 2. 解决方法 找到首选项 -> 设置 添加以下内容 "font_o…

关于sublime中文上下跳动错位的解决方法

关于sublime中文上下跳动错位的解决方法 在preferences-settings打开 增加"font_options":[“gdi”] 对比效果如下:

Sublime text文本编辑器中文乱码解决方法

Sublime text 出现中文乱码的解决方法 问题描述 Sublime text文本编辑器用起来感觉挺好的,它的代码补全功能非常不错,界面也很漂亮。 最近在学习C语言,我感觉Dev-C的界面比较朴实,代码补全功能操作性太强。因此,我会…

Sublime Text3 中文错位解决办法

在使用prettytable库打印列表时偶然发现,相同的中英文混合字符串表格在Windoows控制台以及NotePad上能对齐显示,在SublimeText3以及EmEditor上无法对齐显示: Windoows控制台(能对齐显示): EmEditor&…

sublime离线插件安装

一、首先需要安装Package Control 参考官网:Installation - Package Control中的方法。 其中分联网自动下载安装和手动两种。本文介绍手动的。 Click the Preferences > Browse Packages… menuBrowse up a folder and then into the Installed Packages/ fold…

解决 Sublime Text 中文样式显示异常问题

目录 一、问题背景 二、问题解决 1)在工具栏中选择 Preferences → Settings ,打开配置文件 2)在右侧界面添加下方代码块中的内容, CtrlS 保存 三、效果展示 一、问题背景 最近在单位的Mac系统中使用Sublime Text感觉良好&a…

sublime text里面中文字体显示异常解决方案

sublime text下载之后一开始转成中文之后,会出现中文显示异常的问题,比如下图中“门”字显示异常 通过如下的设置可以解决该问题: 首选项--》设置 在该位置添加如下内容: {"font_options": ["gdi"],"dp…

Linux sublime设置中文,Sublime Text 3 设置为Ubuntu 14.04默认编辑器并支持中文

Ubuntu 14.04下设置Sublime Text 3支持中文输入 发现Sublime Text不支持中文,我用的是Fctix,查了好长时间教程搞定了,在此分享并记录下,最后附上本次所需文件的下载地址。 1、 复制如下的代码为sublime_imfix.c文件并放到sublime_…

sublime匹配汉字

需要处理的文本 GET/aaa/v1/xxx【门户】获取商机列表信息 POST/aaa/v1/xxx创建商机接口 POST/aaa/v1/xxx/approve审核渠道报备商机 GET/aaa/v1/xxx/areaSales根据区域编码获取对应的销售负责人(渠道经理) POST/aaa/v1/xxx/assign分派渠道报备商机 POST/aaa/v1/xxx/convert/ord…

解决SublimeText中文注释乱码

在使用Sublime Text过程中,出现文件中中文呈现乱码的情况 解决:安装Package Control --> 安装插件ConvertToUTF8 1. 安装Package Control 1)Preferences --> Browse Packages,进入打开上层目录,选择Installed…