mysql中修饰符_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).扩展

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值