Mysql字段修饰符(约束)
(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字段修饰符(约束)的更多相关文章
- mysql字段约束-索引-外键---3
本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table wo ...
- 2-16 MySQL字段约束-索引-外键
一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) ...
- Java中的 修饰符
java中的修饰符分为类修饰符,字段修饰符,方法修饰符. 根据功能的不同,主要分为以下几种. 1.权限访问修饰符 访问权限的控制常被称为具体实现的隐藏 把数据和方法包进类中,以及具体实现的隐藏,常共 ...
- 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误
在Java中修饰符总共有一下几种: 1.访问控制修饰符 分别有:public private protected,缺省 2.其它修饰符 分别有:abstract,final,stati ...
- private static final 修饰符
java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...
- java 修饰符总结
java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种. 1.权限访问修饰符 public,protected,default,private,这四种级别 ...
- Java基本修饰符
java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种: *权限访问修饰符(可以用来修饰类.方法和字段) 适用范围<访问权限范围越小,安全性越高> 访问权 ...
- mysql字段约束
为了确保数据的完整性和唯⼀性,关系型数 据库通过约束机制来实现目. 一. unique 唯一性约束 : 值不可重复: 二. not null 非空约束 : 值不可为空: 三. def ...
- MySQL 聚合函数(二)Group By的修饰符——ROLLUP
原文为MySQL 5.7 官方手册:12.20.2 GROUP BY Modifiers 一.ROLLUP 修饰符的意义 GROUP BY子句允许添加WITH ROLLUP修饰符,该修饰符可以对分组后 ...
随机推荐
- python中实现一个简单的进度条
import time def progress(n,a): m = int(n / a * 100) x = int(n / a * 10) time.sleep(0.2) #只是为了让进度条明显 ...
- P1005 矩阵取数游戏[区间dp]
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的\(m*n\)的矩阵,矩阵中的每个元素\(a_{i,j}\)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后 ...
- python学习之多线程多进程
python基础 进程&线程 进程是一组资源的集合,运行一个系统就是打开了一个进程,如果同时打开了两个记事本就是开启了两个进程,进程是一个笼统的概念,进程中由线程干活工作,由进程统一管理 一个 ...
- go mod使用
GO111MODULE 有三个值:off, on和auto(默认值) GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者G ...
- 斜率优化DP总结
HDU3507 Print Article Zero has an old printer that doesn't work well sometimes. As it is antique, he ...
- vscode安装依赖报错 TypeError: zipfile.readEntry is not a function
错误原因是npm的版本太高,需要把5.x的版本换回4.x的 npm install npm@4 -g 或者 cnpm install npm@4 -g 详见:https://github.com/Mi ...
- How to Set Up a NFS Server on Debian 10 Buster
How to Set Up a NFS Server on Debian 10 Buster Nick Congleton Debian 24 May 2019 Contents 1. Softw ...
- P3688 [ZJOI2017] 树状数组 【二维线段树】
题目描述:这里有一个写挂的树状数组: 有两种共\(m\)个操作: 输入\(l,r\),在\([l,r]\)中随机选择一个整数\(x\)执行\(\text{Add}(x)\) 输入\(l,r\),询问执 ...
- 二分算法题目训练(一)——Shell Pyramid详解
HDU2446——Shell Pyramid 详解 Shell Pyramid 题目描述(Google 翻译的) 在17世纪,由于雷鸣般的喧嚣,浓烟和炽热的火焰,海上的战斗与现代战争一样.但那时,大炮 ...
- hashCode 的常规协定是:
hashCode 的常规协定是: . 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改 ...