zoukankan      html  css  js  c++  java
  • 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).扩展

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

  • 相关阅读:
    可闭环、可沉淀、可持续的企业级数据赋能体系
    案例解读|迁云的灵魂3问,降多少本,增多少效,真平滑否?
    Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案
    从零开始入门 K8s | etcd 性能优化实践
    State Processor API:如何读取,写入和修改 Flink 应用程序的状态
    阿里云叔同:以容器为代表的云原生技术,已成为释放云价值的最短路径
    Flink SQL 如何实现数据流的 Join?
    仅1年GitHub Star数翻倍,Flink 做了什么?
    codeforces div2_603 F. Economic Difficulties(树dfs预处理+dp)
    codeforces div2_604 E. Beautiful Mirrors(期望+费马小定理)
  • 原文地址:https://www.cnblogs.com/diantong/p/10983825.html
Copyright © 2011-2022 走看看