转载自: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 命令的字段定义的后面。稍候为您介绍。敬请期待。

MySQL 字段约束 null, not null, default, auto_increment相关推荐

  1. 为什么mysql字段要使用NOT NULL

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 最近刚入职新公司,发现数 ...

  2. MySQL字段约束及多表查询---讲解三

    MySQL环境配置(mysql有下载包) MySQL数据库表的基础操作(增删改查)-讲解一 MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解-讲解二 MySQL字段约 ...

  3. mysql字段约束_mysql数据库之表操作及字段约束条件

    一.存储引擎 二.表介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id name age sex 1 li 12 male 2 liu ...

  4. MySQL约束-自增长约束(auto_increment)、非空约束(not null)、唯一约束(unique)

    目录 自增长约束概念 特点 自增字段初始值 delete和truncate在删除后自增列的变化 非空约束概念 删除非空约束 唯一约束概念 文末资源推荐 每文一语 自增长约束概念 在 MySQL 中,当 ...

  5. MySQL非空约束(NOT NULL)

    MySQL 非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空 ...

  6. php mysql 非空_MySQL非空约束(NOT NULL)

    MySQL 非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空 ...

  7. mysql创建表的时候,字段尽量不要为NULL

    创建表的时候,字段尽量不要为NULL 解决办法就是设置字段为NOT NULL,并设置字段的默认值.字段尽量不要为NULL的原因如下: a.NULL需要占用额外的空间存储: b.进行比较的时候会更复杂, ...

  8. MySQL 非空约束(NOT NULL)入门

    MySQL 非空约束(NOT NULL)指字段的值不能为空.对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错.可以通过 CREATE TABLE 或 ALTER TABLE ...

  9. mysql not is null_转!!mysql 字段 is not null 和 字段 !=null

    今天在查询数据时,查到包含一条某个时间startTime(该字段默认为null ) 为null的记录,想把它过滤,加了 startTime!= null 的条件,结果记录都没了,应该用条件 is no ...

最新文章

  1. RedHat之yum解决办法
  2. [NOI2017]游戏(2-SAT)
  3. 我总结的js性能优化的小知识
  4. 编辑距离及编辑距离算法
  5. Visual Studio 中的应用程序开发
  6. 与计算机病毒相关的小故事,我和计算机病毒的故事2000字论文
  7. 这一路,信念很简单,把书念下去,然后走出去,不枉活一世
  8. 暑假快来了,又该何去何从
  9. 《SPSS 统计分析从入门到精通(第2版)》一6.3 二项式检验
  10. ECSHOP首页调用文章内的缩略图
  11. 设置Easyui datagrid的pageNumber导致两次请求的解决方案
  12. 当图变成了一棵树(纠结的生成树)
  13. 服务器Linux系统下常见的软件包有哪些
  14. 安徽汽车网程序员删库跑路?安徽汽车官网只剩3张图片!
  15. 爬虫学习——初步了解爬虫
  16. Flask PyMongo的基本使用
  17. css3 打车软件等车动画,简单一个渐变放大消失水波加载动画
  18. C# 把word转换成txt
  19. 家谱管理系统php,家谱管理系统(含源代码).docx
  20. wps如何在目录里面打省略号_电脑wps里省略号怎么打相关阅读-电脑wps里省略号怎么打文章阅读-123文学网...

热门文章

  1. 如何通过一个编程获得IP地址归属地的最简单办法
  2. HTTP协议实体的基本讲解
  3. win32汇编指令汇总
  4. C++中extern关键字的作用
  5. Java—TCP与HTTP连接
  6. IOS开发基础之NSURLSession的使用
  7. java和javaweb的区别_javaee, javaweb和javase的区别以及各自的知识体系
  8. python大于小于1023python大于小于_PythonPAT 1023 Have Fun with Numbers
  9. 命令执行——命令执行漏洞概述(一)
  10. python集合是有序的吗_python set有序吗