44.数据库之完整性约束

1.介绍

  约束条件与数据类型的宽度一样,都是可选参数

  它们的作用在于保证数据的完整性和一致性

1.1not null 与 deafult

null表示空,非字符串

deafult代表默认值

创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

create table tb1(
        id int not null default 2,
        num int not null
        );

效果

验证1:

id字段默认为空

create table t11(id int);
desc t11;

效果

扫描二维码关注公众号,回复: 1572990 查看本文章

给t11插入一个空值

insert into t11 values();
select * from t11;

效果

验证2

# 设置id字段不为空
create table t12(id int not null);
insert into t12 values(); #插入空值,此时显示Field 'id' doesn't have a default value

效果

验证3

设置id字段有默认值(deafult)后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值

create table t13(id int default 1);
insert into t13 values();
insert into t13 values(8);
insert into t13 values(9);
select * from t13;

效果

练习:

create table t14(
        id int,
        name varchar(20) not null,
        age int(3) default 18,
        sex enum('','') default '',
        fav set('','','','') default '吃,喝'
        ); 

insert into t14(name) values('乔治');
insert into t14 values(3,'梅子',18,'','');
insert into t14 values(5,'碧落',22,'','吃,喝,嫖,赌');
select * from t114;

此时表格结构

效果

 1.2唯一性(unique)约束

 # 单例唯一

# 即不可重复
create table tab2(id int unique,
        name char(10)
        );
insert into tab2 values(1,'first');
insert into tab2 values(1,'second');  # 设置了唯一性约束,此时再插入id= 1,报错

# 也可以分开写
create table tab2(id int,
        unique(id),
        name char(10)
        );

# 多例唯一

# 联合唯一
create table t17(
    id int,
    host varchar(50),
    ip varchar(50), 
    port int,
    unique(id),
    unique(ip,port)   # 这两个参数不能同时出现两次,它两组合起来是唯一的
    );
insert into t17 values
        (1,'root','192.168.11.23',80),
        (2,'user','192.168.11.23',81),
        (3,'bac','192.168.11.24',80);

结构

效果

2.primary key(主键约束)

 约束:primary key等价于not null unique,字段的值不为空且唯一

对于innodb存储引擎,一张表必须有一个主键

create table t19(
        id int primary key,    # 或id int not null unique, 
        name char(16)
        );
insert into t19 values
        (1,'luffy'),
        (2,'zoro');

insert into t19 values(1,'ronan');  # 此时会提示出错
        

多列做主键,也叫复合主键,和多例唯一性质等同

create table t21(
        id int,
        port int,
        primary key(id,port)  
        );
insert into t21 values
        (1,80),
        (1,81);

3.auto_increment(自增约束)

约束:约束的字段为自动增长,约束的字段必须同时被key约束 

create table t22(
        id int primary key auto_increment,
        name varchar(50),
        sex enum('male','female') default 'male'     
        );
insert into t22(name) values
        ('依违'),('杜瓦');
insert into t22 values(4,'乔伊','female');    

效果

结果

现在在穿插一个id为3的数据

insert into t22 values(3,'','male');    

效果,id居然按顺序排列了

猜你喜欢

转载自www.cnblogs.com/LearningOnline/p/9175309.html