MySQL表的约束

camera 知识速查 本文总结了Camera开发中的常见问题排查方法和关键技术点。主要内容包括:I2C/MIPI不通的排查步骤、时序问题分析方法、Sensor/AF/Flash/PDAF的Bring Up流程、OTP调试方法、PDAF原理及调试、CTS/ITS问题解决思路、AE震荡解决方案、Systrace性能分析方法、Flicker产生原理、Tombstone问题定位等。还涉及V4L2框架解析、问题定位分层方法、Sensor Setting注意事项、时钟信号概念、第三方应用卡顿排查、大光圈概念、Monkey测试方法。 阅读详情

1. 表的约束概述

数据库中的数据类型提供了基础的约束,但不足以应对复杂业务逻辑。为了确保数据的合法性和正确性,需要使用额外的约束条件。常见的约束包括:NOT NULL、DEFAULT、COMMENT、ZEROFILL、PRIMARY KEY、AUTO_INCREMENT、UNIQUE KEY、FOREIGN KEY等。

1.1 空属性(NOT NULL)

字段默认可以为 NULL,但在实际业务中,建议尽量设置为 NOT NULL,因为 NULL 值无法参与运算。

示例:创建一个班级表,包含班级名和班级所在的教室。

站在正常的业务逻辑中:
        如果班级没有名字,你不知道你在哪个班级。
        如果教室名字可以为空,就不知道在哪上课。
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”。
CREATE TABLE myclass (
    class_name VARCHAR(20) NOT NULL,
    class_room VARCHAR(10) NOT NULL
);

插入数据时必须提供班级名和教室,否则会报错。

1.2 默认值(DEFAULT)

当插入数据时未指定某字段的值,可以使用默认值。

示例:

CREATE TABLE tt10 (
    name VARCHAR(20) NOT NULL,
    age TINYINT UNSIGNED DEFAULT 0,
    sex CHAR(2) DEFAULT '男'
);
INSERT INTO tt10 (name) VALUES ('zhangsan');

结果:age 自动为 0,sex 自动为 '男'。

1.3 列描述(COMMENT)

COMMENT 用于描述字段的含义,便于开发人员或DBA理解表结构。

示例:

CREATE TABLE tt12 (
    name VARCHAR(20) NOT NULL COMMENT '姓名',
    age TINYINT UNSIGNED DEFAULT 0 COMMENT '年龄',
    sex CHAR(2) DEFAULT '男' COMMENT '性别'
);

通过 SHOW CREATE TABLE tt12; 可以查看注释信息。

1.4 填充零(ZEROFILL)

当字段设置为 ZEROFILL 时,显示时会用0补齐到指定宽度。

示例:

CREATE TABLE tt3 (
    a INT(5) ZEROFILL,
    b INT(5)
);
INSERT INTO tt3 VALUES (1, 2);
SELECT * FROM tt3; 

注意:ZEROFILL 仅影响显示格式,不影响存储值。

1.5 主键(PRIMARY KEY)

主键用于唯一标识一条记录,字段值必须唯一且非空。

示例:

CREATE TABLE tt13 (
    id INT UNSIGNED PRIMARY KEY,
    name VARCHAR(20) NOT NULL
);

复合主键:

CREATE TABLE tt14 (
    id INT UNSIGNED,
    course CHAR(10),
    score TINYINT UNSIGNED DEFAULT 60,
    PRIMARY KEY (id, course)
);

插入时,id 和 course 的组合必须唯一。

添加/删除主键:

ALTER TABLE tt13 ADD PRIMARY KEY (id);
ALTER TABLE tt13 DROP PRIMARY KEY;

1.6 自增长(AUTO_INCREMENT)

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)。
自增长字段必须是整数。
一张表最多只能有一个自增长。
CREATE TABLE tt21 (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(10) NOT NULL DEFAULT ''
);
INSERT INTO tt21 (name) VALUES ('a'), ('b');
SELECT * FROM tt21;

获取上次插入的ID:

SELECT LAST_INSERT_ID();

索引

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结
构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。
数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。

1.7 唯一键(UNIQUE KEY)

保证字段值唯一,但允许为 NULL,且多个 NULL 不视为重复。一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。

示例:

CREATE TABLE student (
    id CHAR(10) UNIQUE COMMENT '学号',
    name VARCHAR(10)
);
INSERT INTO student (id, name) VALUES ('01', 'aaa');
INSERT INTO student (id, name) VALUES (NULL, 'bbb');  
INSERT INTO student (id, name) VALUES ('01', 'ccc'); 

1.8 外键(FOREIGN KEY)

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

示例:

foreign key (字段名) references 主表(列)
CREATE TABLE myclass (
    id INT PRIMARY KEY,
    name VARCHAR(30) NOT NULL
);

CREATE TABLE stu (
    id INT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES myclass(id)
);

插入数据时,class_id 必须在 myclass(id) 中存在,或为 NULL。

1.9 综合案例:商城数据库设计

需求:

商品表(goods)

客户表(customer)

购买记录表(purchase)

SQL实现:

CREATE DATABASE IF NOT EXISTS bit32mall DEFAULT CHARACTER SET utf8;
USE bit32mall;

-- 商品表
CREATE TABLE IF NOT EXISTS goods (
    goods_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品编号',
    goods_name VARCHAR(32) NOT NULL COMMENT '商品名称',
    unitprice INT NOT NULL DEFAULT 0 COMMENT '单价,单位分',
    category VARCHAR(12) COMMENT '商品分类',
    provider VARCHAR(64) NOT NULL COMMENT '供应商名称'
);

-- 客户表
CREATE TABLE IF NOT EXISTS customer (
    customer_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '客户编号',
    name VARCHAR(32) NOT NULL COMMENT '客户姓名',
    address VARCHAR(256) COMMENT '客户地址',
    email VARCHAR(64) UNIQUE KEY COMMENT '电子邮箱',
    sex ENUM('男', '女') NOT NULL COMMENT '性别',
    card_id CHAR(18) UNIQUE KEY COMMENT '身份证'
);

-- 购买记录表
CREATE TABLE IF NOT EXISTS purchase (
    order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单号',
    customer_id INT COMMENT '客户编号',
    goods_id INT COMMENT '商品编号',
    nums INT DEFAULT 0 COMMENT '购买数量',
    FOREIGN KEY (customer_id) REFERENCES customer(customer_id),
    FOREIGN KEY (goods_id) REFERENCES goods(goods_id)
);

STM32F429移植LVGL9.3.0:从源码配置到双缓冲优化实战 本文详细介绍了如何在STM32F429平台上移植LVGL 9.3.0图形库,涵盖从源码准备、工程配置、显示驱动适配到双缓冲优化等关键步骤。重点解析了利用STM32F429的硬件特性实现高效内存管理和流畅显示性能的实战技巧,为嵌入式GUI开发提供完整解决方案。 阅读详情

相关推荐

GaN功率放大器设计避坑指南:从仿真到实测的Doherty PA完整流程(基于ADS 2023)

本文详细介绍了基于ADS 2023软件,从理论计算、电路仿真到版图后仿真的GaN Doherty功率放大器完整设计流程。文章聚焦C波段应用,深入剖析了负载调制网络设计、稳定性处理、版图电磁仿真等关键环节中的常见误区与工程折衷,为工程师提供了一套从设计到实测的实战避坑指南。

weixin_29238147的博客 532

【MySQL】表的约束

想必大家在学校也学习过MySQL,可能学的懵懵懂懂,这个板块我们从入门开始,从最新的安装MySQL到学习MySQL语句,一步一步开始,一切都是新的,新的板块新的开始,大家一起努力,一起进步!!!二。

AAlykk的博客 1965

告别单调!3种方法给VS2019换上VSCode同款NightOwl主题(附字体优化技巧)

本文详细介绍了三种将VSCode热门NightOwl主题移植到VS2019的方法,包括扩展市场直装、官方主题库导入与增强以及手动调色实现像素级复刻。同时提供了字体优化与视觉增强技巧,帮助开发者打造更舒适的编码环境。

weixin_28836989的博客 214

表的约束(MySQL)

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key。

ljw的博客 3217

Windows Server 2012评估版过期自动关机问题:两种高效解决方案详解

本文针对Windows Server 2012评估版过期导致的自动关机问题,提供了两种高效解决方案。一是通过slmgr.vbs命令重置授权,临时延长评估期;二是使用DISM工具将评估版转换为正式版,一劳永逸。文章详细解析了两种方法的操作步骤、注意事项及适用场景,帮助用户快速恢复服务器稳定运行。

pytorchlight8的博客 1197

腾讯云TDSQL MySQL版 - 开发指南兼容性

语言结构 分布式实例支持所有 MySQL 使用的文字格式,包括: String Literals Numeric Literals Date and Time Literals Hexadecimal Literals Bit-Value Literals Boolean Literals NULL Values String Literals String Literals 是一个 bytes 或者 characters 的序列,两端被单引号'或者双引号"包围,TDSQL MySQL版

weixin_43872058的博客 911

【MySQL】005.MySQL表的约束(上)

本篇文章主要介绍了MySQL中表的约束中的 :空属性,默认值,列描述,zerofill,主键约束。

2301_81290732的博客 2613

C# WinForm项目目录结构详解:从入门到精通(附常见问题解决方案)

本文详细解析了C# WinForm项目目录结构,从解决方案与项目基础结构到核心文件功能,再到关键目录解析,帮助开发者快速掌握WinForm项目组织方式。文章还提供了常见问题解决方案,如引用丢失、配置文件不生效等,是WinForm开发从入门到精通的实用指南。

dream的博客 647

【MySQL】 表的约束(上)

本篇文章讲解了MySQL中关于约束的一些知识,包括空属性,default默认值,列描述,zerofill和主键等约束条件。

2302_81805546的博客 2204

黑猫带你学eMMC协议第4篇:eMMC概述

1 前言 声明: 本文依据eMMC JEDEC5.1协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 本文大约3000字,从emmc的内部结构框架、供电、总线、寄存器等各方面进行框架性的介绍,本章节内容不需要深入研究,读完本篇文章,只要能对emmc有个框架下的了解,就可以了。 2 内部结构框架 由图可以看出,emmc内部由两块组成:控制器 + 存储介质。emmc内部存储介质绝大部分为nand flash。 众所周知,我们需要存储数据到nand flash中,并

黑猫奥利奥的博客 3341

Qualcomm AI Engine Direct SDK(QNN)的使用介绍

Qualcomm AI Engine Direct SDK,高通新的AI模型推理框架,又名QNN,为AI开发提供统一API的底层框架。通过这个SDK,可以在高通的 CPU/GPU和HTP上对AI模型进行性能加速。2.Qualcomm AI Engine Direct SDK的公开英文文档。1.Qualcomm AI Engine Direct SDK的下载和安装。

u013250861的博客 6974

【MySQL】 表的约束(下)

本篇文章更加深入的讲解了MySQL的约束,包括了自增长,唯一键和外键等约束条件,每一种约束方式都有介绍,使用等方面的内容。最后还对约束方面的知识做了一个综合案例的实现。

2302_81805546的博客 1467

华为OD机试真题 新系统 - 8位LED控制器 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 1978

【MySQL基础】表的约束的类型与使用指南

【MySQL基础】表的约束内容超详解加全面使用指南!!

2301_80220607的博客 1859

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[MySQL初阶]MySQL(3)表的约束

[MySQL初阶]MySQL(3)表的约束 null/not null,default, comment, zerofill,primary key,auto_increment,unique key

石墨博客 1795

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MySQL——表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。 表的约束很多,这里主要介绍如下几个:,, , ,,,。 案例: 创建一个班级表,包含班级名和班级所在的教室。 站在正常的业务逻辑中:所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”。 所以设置了not null,这些字段必须有值,不能为空或者不填。默认值:某一种数据会经常性的出现某

想要上进的coder的博客 895

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【MySQL】:表的约束

MySQL数据库表的约束详细介绍!

Yikefore的博客 715

MySQL:表的约束

没有约束,就像我们平时往文件里写入,想怎么写就怎么写,完全取决于你的意志,但是我们为了让用户在数据库中安全的插入数据,无论你是编程小白的误操作还是编程大佬的恶意操作,我们都要想办法通过约束进行拦截(比如给年龄的一列插入了性别,身高的一列插入了体重,qq号那列插入了邮箱),来保证我们数据库内数据的合法性。(编译器其实也算是一种约束,你如果语法写错了会给你报错,所以经过编译器的代码虽然逻辑可能有问题,但是至少在语法是没有问题的)

weixin_51142926的博客 1849

MySQL-表的约束

MySQL表的约束是保证数据合法性和业务逻辑正确性的重要机制。主要约束类型包括:空属性(NOT NULL)、默认值(DEFAULT)、列描述(COMMENT)、零填充(ZEROFILL)、主键(PRIMARY KEY)、自增(AUTO_INCREMENT)和唯一键(UNIQUE KEY)。NOT NULL约束强制字段不能为空,DEFAULT设置默认值,COMMENT提供字段描述,ZEROFILL实现数字位数不足时的零填充显示(不影响实际存储)。这些约束共同作用,确保数据符合业务规则,如强制班级表必须有名称和

weixin_74865793的博客 628

MySQL 表的约束(一)

1. 主键是用来衡量一行一行表中的信息是唯一的,主键是唯一的2. 复合主键两个合起来是唯一的。

的博客 1001
上一篇: MySQL数据类型详解
下一篇: MySQL表的增删查改
FirstFrost --sy
博客等级 码龄3年 371粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值