4.MySQL表处理之约束条件

目录

1.not null

2.unsigned

3.zerofill

4.default

5.unique

6.primary key :主键

7.auto_increment:自增


1.not null

作用:不能填入null
用法:在对应类型中添加not null,若填入null则报错
      create table t1(id int,name char not null);
      insert into t1 values(null);          # 报错

2.unsigned

作用:存入整型改为无符号
用法:
    create table t1(id tinyint unsigned);
    insert into t1 values(-1),(256);       # 输入数据
    select * from t1;                      # 返回结果:0  255

3.zerofill

作用:存入整型不足设置宽度时,把默认空格补位改为以0补位
用法:
    create table t1(id int(8) unsigned zerofill);      # 用0为补位填充至8位
    insert into t1 values(22);                         # 输入数据
    select * from t1;                                  # 返回结果:00000022

4.default

作用:设置默认值
用法:
    1.补充:顺序可以以输入时位置对应
        create table t1(
            id int,
            name char(16)
        );
        insert into t1(name,id) values('zcy',1);  
    2.设置默认值,常常以多数为主
        create table t2(
            id int,
            name char(16),
            gender enum('teacher','principal') default 'student'
        );
        insert into t2(id,name) values(1,'zcy');            # 1 zcy student
        insert into t2 values(2,'mxg','teacher');           # 2 mxg teacher

5.unique

作用:输入值设成唯一
用法:
    1.单列唯一
        create table t3(
            id int unique,
            name char(16)
        );
        insert into t3 values(1,'zcy'),(1,'mxg');           # 报错,id不唯一
        insert into t3 values(1,'zcy'),(2,'mxg');           # 正确

    2.联合唯一(两个以上排列唯一)
        举例:
        ip和port,单个都可以重复 但是加载一起必须是唯一的
            create table t4(
                id int,
                ip char(16),
                port int,
                unique(ip,port)
            );
            insert into t4 values(1,'127.0.0.1',8080);
            insert into t4 values(2,'127.0.0.1',8081);
            insert into t4 values(3,'127.0.0.2',8080);
            insert into t4 values(4,'127.0.0.1',8080);      # 报错

6.primary key :主键

1.单单从约束效果上来看primary key等价于not null + unique,即非空且唯一!!!
    create table t5(id int primary key);
    insert into t5 values(null);             # 报错
    insert into t5 values(1),(1);            # 报错
    insert into t5 values(1),(2);

2.它除了有约束效果之外 它还是Innodb存储引擎组织数据的依据
    Innodb存储引擎在创建表的时候必须要有primary key
    因为它类似于书的目录 能够帮助提示查询效率并且也是建表的依据
    a.一张表中有且只有一个主键 如果你没有设置主键 那么会从上往下搜索直到遇到一个非空且唯一的字段将它自动升级为主键
        create table t6(
            id int,
            name char(16),
            age int not null unique,
            addr char(32) not null unique
        );
    b.如果表中没有主键也没有其他任何的非空且唯一字段 
      那么Innodb会采用自己内部提供的一个隐藏字段作为主键(隐藏意味着你无法使用到它 就无法提示查询速度)
    c.一张表中通常都应该有一个主键字段 并且通常将id/uid/sid字段作为主键
        # 单个字段主键
            create table t5(
                id int primary key
                name char(16)
            );
        # 联合主键(多个字段联合起来作为表的主键 本质还是一个主键)
        create table t7(
            ip char(16),
            port int,
            primary key(ip,port)
        );

3.总结:以后在创建表的时候id字段一定要加primary key

7.auto_increment:自增

1.用法
    create table t8(
        id int primary key auto_increment,
        name char(16)
    );
    insert into t8(name) values('zcy'),('mxg'),('wsx');

2.注意:
    auto_increment通常都是加在主键上的 不能给普通字段加
    create table t9(
        id int primary key auto_increment,
        name char(16),
        cid int auto_increment
    );
    报错:ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

3.结论:
    以后在创建表的id(数据的唯一标识id、uid、sid)字段的时候
    id int primary key auto_increment

4.补充:
    delete from t1  :删除表中数据后 主键的自增不会停止
    truncate t1  :清空表数据并且重置主键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值