(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. 凤凰新闻APP的增长黑客流程步骤经验:3.5星|《我不是产品经理》

    “ 我问了他三个问题.●你是AI科学家或者算法工程师吗?答:不是.●你想天天坐在电脑旁点鼠标或者打电话吗?答:不想.●你愿意每天盯着数据仪表盘定策略并与生产者做运营沟通吗?答:不愿意.我回答他:你别去 ...

  2. Topshelf 使用

    前言 在写后台代码的过程中,经常会遇到要写一些单独的服务.以前呢,直接用的是 .NET 下的 “Windows 服务” 控件开发的. 这个传统的控件开发起来很不方面,使用也不友好.发现有用 Topsh ...

  3. 【排序算法】冒泡排序(Bubble Sort)

    一.简介 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...

  4. oom killer 详解

    一.oom killer理解和日志分析:知识储备 oom killer日志分析,这是前篇,准备一些基础知识 带着问题看: 1.什么是oom killer 是Linux内核设计的一种机制,在内存不足的时 ...

  5. spring boot + mybaits 处理枚举类 enum

    枚举: //实现层调用 orderMapper.getOrder(OrderStatus.DISCOUNT); sql打印: 实际sql: select * from order where orde ...

  6. codeforces#1120C. Compress String(dp+后缀自动机)

    题目链接: https://codeforces.com/contest/1120/problem/C 题意: 从前往后压缩一段字符串 有两种操作: 1.对于单个字符,压缩它花费$a$ 2.对于末尾一 ...

  7. linux服务器执行cd和ls等等命令都有卡顿现象问题记录

    一 执行命令free -gh 1. free 命令显示系统内存的使用情况,包括物理内存.交换内存(swap)和内核缓冲区内存. 2. -g 表示以G单位显示, -m以兆单位显示,    h会在数字后面 ...

  8. java一周学习回顾

    快速阅读 ​ 本周在学习java过程中主要是快马观花,对java的常用框架进行相关配置 ,进行简单的调用 .包括kafka,dubbo ,zookeeper.centos配置java环境.如何打war ...

  9. 2018-2019-2 20165234 《网络对抗技术》 Exp7 网络欺诈防范

    Exp7  网络欺诈防范 实验内容 1. 简单应用SET工具建立冒名网站 2. ettercap DNS spoof 3. 结合应用两种技术,用DNS spoof引导特定访问到冒名网站 4. 请勿使用 ...

  10. [Linux] pwm设备驱动调试

    转载请注明出处:https://www.cnblogs.com/lialong1st/p/11436190.html CPU:RK3288 系统:Linux 客户需求是通过 pwm 控制激光的强弱,写 ...