MySQL 字段约束 null, not null, default, auto_increment

2023-11-16

转载自:http://www.xiaoxiaozi.com/2009/07/09/1111/

没有规矩,不成方圆,任何事物都是如此。

在 MySQL 中,每个字段定义都包含附加约束或者修饰符,这些可以用来增加对所输入数据的约束。

今天我们就来看一下 MySQL 的字段约束:

NULL 和 NOT NULL 修饰符、DEFAULT 修饰符,AUTO_INCREMENT 修饰符。


NULL 和 NOT NULL 修饰符

可以在每个字段后面都加上这 NULL 或 NOT NULL 修饰符来指定该字段是否可以为空(NULL),

还是说必须填上数据 (NOT NULL)。MySQL 默认情况下指定字段为 NULL 修饰符,如果一个字段指定为NOT NULL,

MySQL 则不允许向该字段插入空值(这里面说的空值都为 NULL),因为这是 “规定”。

/*
创建好友表,其中id ,name ,pass都不能为空
*/
create table friends (
id int(3) not null,
name varchar(8) not null,
pass varchar(20) not null
);

/*
错误提示,id列不能为空
#1048 - Column 'id' cannot be null
*/
INSERT INTO friends
VALUES (
NULL , 'simaopig', 'simaopig'
);
但是在自增列和 TIMESTAMP 字段中,这个规则并不适用。

向这些字段中插入 NULL 值将会导致插入下一个自动增加的值或者当前的时间戳。


DEFAULT 修饰符

可以使用 DEFAULT 修饰符为字段设定一个默认值。

当插入记录时,您老人家忘记传该字段的值时,MySQL 会自动为您设置上该字段的默认值。

/*
创建im表,将name字段设置为默认值'QQ'
*/
create table im (
id int(3) not null,
name varchar(25) not null default 'QQ'
);

/*
插入数据,不传name字段的值,MySQL会为其设置默认值的
您运行的 SQL 语句已经成功运行了。
*/
INSERT INTO im( id, name ) VALUES ( 2, 'MSN' ) ;

INSERT INTO im( id ) VALUES ( 3 ) ;

SELECT * FROM im LIMIT 0 , 30;

/*
id name
2 MSN
3 QQ
*/
如果一个字段中没有指定 DEFAULT 修饰符,MySQL 会依据这个字段是 NULL 还是 NOT NULL 自动设置默认值。

如果指定字段可以为 NULL,则 MySQL 为其设置默认值为 NULL。

如果是 NOT NULL 字段,MySQL 对于数值类型插入 0,字符串类型插入空字符串,

时间戳类型插入当前日期和时间,ENUM 类型插入枚举组的第一条。


AUTO_INCREMENT 修饰符

AUTO_INCREMENT 修饰符只适用于 INT 字段,表明 MySQL 应该自动为该字段生成一个数

(每次在上一次生成的数值上面加 1)。对于主键(稍候介绍),这是非常有用的。

因为其允许开发者使用 MySQL 为每条记录创建唯一的标识符。

/*
您运行的 SQL 语句已经成功运行了。 ( 查询花费 0.0170 秒 )
*/
CREATE TABLE items(
id int( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
label varchar( 255 ) NOT NULL
);

/*
插入三条数据,不指定id,采用默认值,加上AUTO_INCREMENT
您运行的 SQL 语句已经成功运行了。
*/
insert into items(label) values ('xxx');
insert into items(label) values ('yyy');
insert into items(label) values ('zzz');

/*
全显示出来,看一下数据,注意看id的变化
*/
select * from items;

/*
id label
1 xxx
2 yyy
3 zzz
*/

MySQL 表中只能有一个 AUTO_INCREMENT 字段,而且这个字段必须被定义为键。

除了字段的约束,MySQL 也允许表级的约束,比如主键和外键、索引和惟一约束。

这些约束置于 CREATE TABLE 命令的字段定义的后面。稍候为您介绍。敬请期待。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 字段约束 null, not null, default, auto_increment 的相关文章

  • 社交对象 - 数据库结构、过滤、排序、可扩展性的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正在 ASP NET MVC 中构建通用企业社交网络平台 任何社交网站的主要特征之一是社会对象由用户显式 文本更新 照片 博客 视频等 或隐
  • .Net 将 NULL 值从变量值插入 SQL Server 数据库

    也有类似的问题 但答案不是我想要的 如果引用为 NULL 或尚未分配值 我想将 NULL 值插入 SQL Server 数据库 目前我正在测试 null 它看起来像 String testString null if testString
  • 在 django 中创建“历史”类型模型的最佳方法是什么?

    我想为我的 Django 应用程序创建一个类似于 Django 管理员的 最近操作 的功能 以便存储其他模型的历史信息 例如 假设我有两个模型 分别称为 Book 和 Author 我想要第三个模型来存储信息 例如由谁以及何时对模型中的给定
  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • 在源代码管理中管理我的数据库

    由于我正在处理一个新的数据库项目 在 VS2008 中 而且我从未从头开始开发数据库 因此我立即开始研究如何在源代码管理 在本例中为 Subversion 中管理数据库 我找到了一些关于SO的信息 包括这篇文章 保持多个环境中的开发数据库同
  • 防止 Django 在并发请求时多次将同一对象保存到数据库

    对于我们的博客平台 我们有一个 文章 模型 其中包含一个 更新的 日期时间字段 class Article models Model updated models DateTimeField null True blank True 当任何
  • 每个“容器”类一个 DAO 还是每个表一个 DAO?

    我有一个 容器 类 其中的字段包含在多个数据库表中 并且我使用 DAO 模式来访问数据 问题是 我应该为这个 容器 类创建一个 DAO 还是每个表都有一个 DAO 并合并它们的数据更好 您应该根据应用程序的需求而不是数据库的布局来设计 DA
  • 是否可以从数据库转储生成 knex 种子文件?

    就我而言 我使用的是 mysql 但是 我正在寻找一种通用解决方案 用于从当前运行的数据库或数据库转储生成 knex 种子文件 我可以就像是 https github com tgriesser knex issues 944 issuec
  • Docker-compose v3 不持久保存 postgres 数据库

    在 docker compose v3 容器关闭并重新启动后 我很难保留 postgres 数据 这似乎是一个常见问题 但经过大量搜索后我无法找到有效的解决方案 我的问题与这里类似 如何使用卷将数据保存在 dockerized postgr
  • 产品和变体 - 设计数据库的最佳方法

    描述 商店可以有产品 鞋子 T 恤等 每个产品可以有许多变体 每个变体可以有不同的价格和库存 例如T 恤有不同的颜色和尺寸 颜色 蓝色 尺寸 L 价格 10 美元 库存 5 颜色 蓝色 尺寸 XL 价格 10 美元 库存 10 颜色 白色
  • Python 中的 Firebase 身份验证时出现 KeyError:“databaseURL”

    相信你做得很好 我是 firebase 的新手 正在尝试进行用户身份验证 我已经安装了pyrebase4并在firebase控制台上创建了一个项目 我还启用了使用 电子邮件和密码 登录并尝试连接我的应用程序 下面是我正在尝试的代码 impo
  • Python Twisted 和数据库连接

    我们的工作项目包括同步应用程序 短期 和异步 Twisted 应用程序 长期 我们正在重构我们的数据库 并将构建一个 API 模块来解耦该模块中的所有 SQL 我想创建该 API 以便同步和异步应用程序都可以使用它 对于同步应用程序 我希望
  • 无法更改 MS Access 2007 上的数据类型

    我有一个巨大的数据库 800MB 其中包含一个名为 上次修改日期 的字段 目前该字段作为文本数据类型输入 但需要将其更改为日期 时间字段以执行一些查询 我有另一个完全相同的数据库 但其中只有 35MB 的数据 当我更改数据类型时 它工作正常
  • 如何阻止 Django 中发生级联删除?

    我的 Django 应用程序中有三个模型类 class Folder models Model folder models ForeignKey Folder null True blank True related name folder
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • 有很多数据库视图可以吗?

    我很少 每月 每季度 使用 Microsoft SQL Server 2005 数据库视图生成数百份 Crystal Reports 报告 在我不读取这些视图的所有时间里 这些视图是否会浪费 CPU 周期和 RAM 因为我很少从视图中读取数
  • 显示包含特定表的所有数据库名称

    我的 SQL Server 中有很多数据库 我必须只搜索包含特定表名的数据库名称Heartbitmaster 我有很多数据库 例如Gotgold DVD等 我只想从包含此表的查询中查找数据库名称Heartbitmaster 我搜索我尝试查询
  • 什么会导致 Oracle ROWID 更改?

    AFAIK Oracle 中的 ROWID 表示相应数据文件中记录的物理位置 在什么情况下记录的ROWID可能会改变 我所知道的一个是分区表上的更新 它将记录 移动 到另一个分区 还有其他情况吗 我们的大多数数据库都是 Oracle 10
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正

随机推荐

  • linux shell 实现 四则运算(整数及浮点) 简单方法

    在刚刚学习写shell 批处理时候 进行逻辑运算中 少不了需要进行基础的 四则运算 这里说说在linux shell 里面简单的实现方法 1 简单方法 chengmo centos5 b 5 5 5 3 2 chengmo centos5
  • gps纠偏及大陆地图偏移原因

    大陆地图偏移原因 国家安全与地图保密插件 国家保密插件 也叫做加密插件或者加偏或者SM模组 其实就是对真实坐标系统进行人为的加偏处理 按照几行代码的算法 将真实的坐标加密成虚假的坐标 而这个加偏并不是线性的加偏 所以各地的偏移情况都会有所不
  • mysql为空转换为0_MySQL数据库 null转为0,及一些case when用法

    1 如果为空返回0 select ifnull null 0 应用情景 如果在进行右连接或者左连接时 有一些为空的字段 可以进行这样的处理 select ifnull B submission time A submission time
  • arm的多级流水线技术和和存储管理单元mmu

    流水线概念 流水线的概念与原理 处理器按照一系列步骤来执行每一条指令 典型的步骤如下 1 从存储器读取指令 fetch 2 译码以鉴别它属于哪一条指令 decode 3 从指令中提取指令的操作数 这些操作数往往存在于寄存器reg中 4 将操
  • java for循环时间复杂度_关于for循环的时间复杂度

    今天在看算法时 遇见了一些问题 想了很久 现总结如下 关于for循环的时间复杂度 我们知道当一重for循环时 packageSuanfa public classFortest public static voidmain String a
  • 垂直同步到底要不要开?老司机教你G-Sync显示器的正确打开姿势

    一直以来我们都认为PC的画面效果取决于显卡 认为游戏的FPS值越高代表游戏越流畅 但实际上 显示器也是决定游戏帧数的重要一环 显卡将画面渲染并输出到显示器中 显示器接收GPU的信号并输出 然而 因为显卡性能和运行程序的差异 显卡一般无法以恒
  • Linux学习第17天:pinctrl和gpio子系统开发:由0到1

    Linux版本号4 1 15 芯片I MX6ULL 大叔学Linux 品人间百味 思文短情长 本篇笔记的题目为 pinctrl和gpio子系统开发 由0到1 做嵌入式系统开发 肯定经历过单片机 ARM Linux这么一个过程 这是一个8位单
  • CTF-Xortool,windows上的安装与使用

    https github com raddyfiy xortool for Windows 下载好脚本文件 转移到 python的这个位置 使用 加密 python xortool xor py f text cmd exe s secre
  • linux运维工程师岗位职责

    1 运维工程师简历怎么写较好 2 网络工程师个人简历模板 3 软件工程师个人简历模板精选 4 it运维服务的管理流程 5 it运维工程师简历模板 运维工程师简历怎么写较好 1 培训客户使用 测试软件linux运维工程师简历模板的可用性 解决
  • android中实现RecyleView 加载刷新

    为了实现RecyclerView的下拉刷新和上拉加载更多功能 可以使用第三方库或者自己实现 在这里 我们介绍两种实现方式 使用第三方库 使用第三方库可以快速实现RecyclerView的下拉刷新和上拉加载更多功能 常用的库有SwipeRef
  • 《程序员修炼之道》读后感(一)

    书刚拿到手 只读了第一章 略有所悟 本书的第一章并没有直接讲程序代码上的硬核干货 而是先探讨编程思想上的哲学 在代码练习中 错误是不可避免的 在错误发生后理应承认错误 寻找补救方案 但还是人会找借口 这一点我自问无法否认 因为我也下意识地想
  • 人工智能数学基础1:通过使用python编程语言实现高等数学的求极限

    求极限 并用Python 编程求极限 from sympy import x Symbol x a Symbol a expr x 1 3 2 x 8 limit expr limit expr x a print limit expr 可
  • 联盟链FISCO BCOS可并行合约开发框架(附实操教程)

    FISCO BCOS是完全开源的联盟区块链底层技术平台 由金融区块链合作联盟 深圳 简称金链盟 成立开源工作组通力打造 开源工作组成员包括博彦科技 华为 深证通 神州数码 四方精创 腾讯 微众银行 亦笔科技和越秀金科等金链盟成员机构 代码仓
  • [c++]数组

    文章目录 数组 数组的声明与使用 数组的存储与初始化 数组作为函数的参数 对象数组 程序实例 数组 在C 的程序设计中 为了处理方便 把具有相同类型的若干变量或对象按有序的形式组织起来 这些按序排列的同类数据元素的集合称为数组 组成数组的变
  • web前端设计--二级菜单栏

    代码
  • java获取天气预报数据

    获取天气预报数据 对于做web项目有天气数据的需求 这个服务很合适 WebXml com cn 2400多个城市天气预报Web服务 包含2300个以上中国城市和100个以上国外城市天气预报数据 数据每2 5小时左右自动更新一次 准确可靠 提
  • Dr.COM 宽带认证客户端频繁掉线问题解决方案

    首先声明 查阅了网上好多博客 都是Bullshit 问题触发原因 因为使用了360wifi 据查资料显示 360wifi与Dr COM 宽带认证客户端 是不可以同时使用的 Dr COM 宽带认证客户端会将分享的IP反馈给服务器 受到服务器拒
  • gym 101505 CTU Open Contest 2016 G Orchard Division

    Problem codeforces com gym 101505 attachments vjudge net contest 187874 problem G Meaning 一个 m m 的网格 长 宽下标 0 m 1 里有 n 个点
  • 简述多线程的作用以及什么地方用到多线程

    1 多线程的作用 可以解决负载均衡问题 充分利用CPU的资源 为了提高Cpu的使用 采用多线程的方法去同时完成几件事情而互不干扰 2 大多数的情况下 使用多线程 主要是需要处理大量的IO操作或处理的情况需要花大量的时间等 3 iOS 有三种
  • MySQL 字段约束 null, not null, default, auto_increment

    转载自 http www xiaoxiaozi com 2009 07 09 1111 没有规矩 不成方圆 任何事物都是如此 在 MySQL 中 每个字段定义都包含附加约束或者修饰符 这些可以用来增加对所输入数据的约束 今天我们就来看一下