(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).扩展

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

最新文章

  1. MediatorPattern(中介者模式)
  2. ArcGIS Engine 刷新问题
  3. CMD命令简单使用
  4. mysql 索引及其原理
  5. centos ssh配置使用
  6. Hbase与hive整合
  7. 习题二:string数组应用
  8. epoll 中EPOLLIN 和 EPOLLOUT
  9. Python 实现的下载op海贼王网的图片(网络爬虫)
  10. app调用支付宝支付 笔记
  11. iOS 之 UICollectionView
  12. input事件--->按键事件的基本实现
  13. SQLServer之创建DML AFTER INSERT触发器
  14. net core 获取配置文件
  15. 一文读懂机器学习大杀器XGBoost原理
  16. Centos7 ssh配置RSA证书登录
  17. 【代码笔记】iOS-HTTPQueue下载图片
  18. ActiveMQ持久化及测试(转)
  19. JSSDK微信自定义分享朋友圈
  20. const对象,指向const对象的指针 和 const 指针

热门文章

  1. 读入 并查集 gcd/exgcd 高精度 快速幂
  2. 新闻系统——SQLHelper助手优化
  3. 对比AngularJS/jQueryUI/Extjs:没有一个框架是万能的
  4. 多任务5-协程(IO密集型适用)--gevent完成多任务及monkey补丁
  5. django rest framework框架中都有那些组件
  6. BZOJ1997 HNOI2010 平面图判定 planar (并查集判二分图)
  7. Nginx 做JavaWeb负载均衡
  8. oracle查询数据库连接数相关
  9. xhEditor编辑器从word粘贴公式
  10. RESTFUL API 安全认证方式