(1).null和not null

  not null不可以插入null,但可以插入空值。

  数值型、字符型、日期型都可以插入null,但只有字符型可以插入空值。

  使用方法如下:

mysql> create database test_db;
Query OK, 1 row affected (0.00 sec) mysql> use test_db;
Database changed
mysql> create table `notnull_table`(name varchar(20) not null);
Query OK, 0 rows affected (0.02 sec) mysql> insert into notnull_table values (null);  //设置not null的列是不允许插入null的
ERROR 1048 (23000): Column 'name' cannot be null
mysql> insert into notnull_table values ('');  //但可以插入空值
Query OK, 1 row affected (0.00 sec) mysql> insert into notnull_table values ('Jack');
Query OK, 1 row affected (0.01 sec)

  空值与null的区别:空值不占用空间,但null占用空间(计算1字节)。

  not null比null的效率高。这是因为null不是空值,占用空间,所以进行字段比较时,null会参与字段比较,对效率有一部分影响。而且索引不会存储null值,索引的效率会下降很多。

(2).default

  defalut,默认值。

mysql> create table default_table(id int not null,name varchar(20) not null default 'test');
Query OK, 0 rows affected (0.03 sec) mysql> insert into default_table(id) values(1);
Query OK, 1 row affected (0.00 sec) mysql> select * from default_table;
+----+------+
| id | name |
+----+------+
| 1 | test |
+----+------+
1 row in set (0.00 sec)

  注意:如果字符型字段没有设置default,可以为null时,默认为null;不可以为null时,报错。enum单独处理,默认为第一个元素。时间字段没有default,默认为当前时间。

(3).auto_increment

  auto_increment,自动增长,每次自动加1,只能用于数值型。不过用上auto_increment好像就必须为主键,不然mysql会报1075的错误信息。

mysql> create table auto_table(id bigint auto_increment primary key,name varchar(20));
Query OK, 0 rows affected (0.02 sec) mysql> insert into auto_table(name) values('name');
Query OK, 1 row affected (0.00 sec) mysql> select * from auto_table;
+----+------+
| id | name |
+----+------+
| 1 | name |
+----+------+
1 row in set (0.00 sec)

(4).扩展:清除表数据,包括auto_increment值

  一般情况下,删除表数据会使用delete命令,但是delete是没有办法清除auto_increment值的。如下:

mysql> select * from auto_table;
+----+------+
| id | name |
+----+------+
| 1 | name |
+----+------+
1 row in set (0.00 sec) mysql> delete from auto_table;
Query OK, 1 row affected (0.03 sec) mysql> insert into auto_table(name) values('name2');
Query OK, 1 row affected (0.01 sec) mysql> select * from auto_table;
+----+-------+
| id | name |
+----+-------+
| 2 | name2 |
+----+-------+
1 row in set (0.00 sec)

  这时候就需要使用truncate命令。如下:

mysql> select * from auto_table;
+----+-------+
| id | name |
+----+-------+
| 2 | name2 |
+----+-------+
1 row in set (0.00 sec) mysql> truncate table auto_table;
Query OK, 0 rows affected (0.02 sec) mysql> insert into auto_table(name) values('name3');
Query OK, 1 row affected (0.01 sec) mysql> select * from auto_table;
+----+-------+
| id | name |
+----+-------+
| 1 | name3 |
+----+-------+
1 row in set (0.00 sec)

  注意:truncate会清除表的所有数据。如果只想清除auto_increment值,不要使用该命令。

(5).扩展

  其实除了以上几个,还存在检查约束、外键约束、主键约束和唯一约束,而主键约束和唯一约束也是索引。

Mysql字段修饰符(约束)的更多相关文章

  1. mysql字段约束-索引-外键---3

    本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符   我们通过这个例子来看看 mysql> create table wo ...

  2. 2-16 MySQL字段约束-索引-外键

    一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) ...

  3. Java中的 修饰符

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符. 根据功能的不同,主要分为以下几种. 1.权限访问修饰符  访问权限的控制常被称为具体实现的隐藏 把数据和方法包进类中,以及具体实现的隐藏,常共 ...

  4. 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误

    在Java中修饰符总共有一下几种: 1.访问控制修饰符    分别有:public private protected,缺省 2.其它修饰符      分别有:abstract,final,stati ...

  5. private static final 修饰符

    java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...

  6. java 修饰符总结

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种.    1.权限访问修饰符    public,protected,default,private,这四种级别 ...

  7. Java基本修饰符

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种: *权限访问修饰符(可以用来修饰类.方法和字段) 适用范围<访问权限范围越小,安全性越高> 访问权 ...

  8. mysql字段约束

    为了确保数据的完整性和唯⼀性,关系型数 据库通过约束机制来实现目. 一. unique 唯一性约束    : 值不可重复: 二. not null    非空约束    : 值不可为空: 三. def ...

  9. MySQL 聚合函数(二)Group By的修饰符——ROLLUP

    原文为MySQL 5.7 官方手册:12.20.2 GROUP BY Modifiers 一.ROLLUP 修饰符的意义 GROUP BY子句允许添加WITH ROLLUP修饰符,该修饰符可以对分组后 ...

随机推荐

  1. 解决在jenkins中无法打开robot framework report.html log.html的问题

    问题描述: Opening Robot Framework report failed Verify that you have JavaScript enabled in your browser. ...

  2. 中文日历Calendar

    一.层次结构 Object<-----Calendar<-----EastAsianLunisolarCalendar<-----ChineseLunisolarCalendar(农 ...

  3. for,foreach,$.each()跳出循环的比较

    说起跳出循环,第一时间想起的是 break \ continue,这是经典的for循环. 1.for 循环 先上例子,思考输出结果,体会 break 与 continue 的不同. 1 var arr ...

  4. java疑问

    1. new String("abc")究竟创建几个对象? 答: 一个或两个, 如果常量池中原来有"abc", 那么只创建一个对象; 如果常量池中原来没有&qu ...

  5. Spring MVC 学习笔记(一)

    • 1.SpringMVC概述 • 2.SpringMVC的HelloWorld • 3.使用@RequestMapping映射请求 • 4.映射请求参数&请求头 • 5.处理模型数据 • 6 ...

  6. 关于前端 jQuery 面试的知识点

    参考一个博主整理的一些前端 jQuery 的一些面试题 参考博客:https://www.cnblogs.com/dashucoding/p/11140325.html 参考博客:https://ww ...

  7. CSP模拟赛 Repulsed(树形DP)

    题面 ⼩ w ⼼⾥的⽕焰就要被熄灭了. 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树. 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个. 接下来每个节点都要被分配给 ...

  8. Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer

    链接: https://codeforces.com/contest/1251/problem/C 题意: You are given a huge integer a consisting of n ...

  9. javax.persistence.TransactionRequiredException: Executing an update/delete query

    最近在springboot中整合jpa的时候碰到一个异常,异常如下 javax.persistence.TransactionRequiredException: Executing an updat ...

  10. Greenplum 监控segment是否正常

    在greenplum运行过程中,Segement很有可能因为压力大出现不可用的情况, 主备Segement发现了切换,或是主备Segement网络断开,数据不同步了.在 默认情况下,如果GreenPl ...