唯一性约束

目录

唯一性约束

vip.sql脚本文件中的sql语句:

 select * from t_vip;

insert into t_vip(id,name,email) values(4,'wangwu','wangwu@sina.com');

insert into t_vip(id) values(4);

insert into t_vip(id) values(5);

1. 新需求:name和email两个字段联合起来具有唯一性!!!!

1.1 怎么创建表才能符合新需求呢?

1.2 什么时候使用表级约束?

2. unique 和 not null 可以联合使用


唯一性约束

唯一性约束unique约束的字段不能重复,但是可以有多个NULL

vip.sql脚本文件中的sql语句:

drop table if exists t_vip;
create table t_vip(
    id int,
    name varchar(255) unique,
    email varchar(255)
);
insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');
insert into t_vip(id,name,email) values(2,'lisi','lisi@123.com');
insert into t_vip(id,name,email) values(3,'wangwu','wangwu@123.com');

 select * from t_vip;

insert into t_vip(id,name,email) values(4,'wangwu','wangwu@sina.com');

Duplicate:重复

约束的字段不能重复

insert into t_vip(id) values(4);

insert into t_vip(id) values(5);

name字段虽然被unique约束了,但是可以有多个NULL。

1. 新需求:name和email两个字段联合起来具有唯一性!!!!

drop table if exists t_vip;
create table t_vip(
       d int,
       name varchar(255) unique,
       email varchar(255) unique
);

约束直接添加到列后面的,叫做列级约束

这张表这样创建是不符合我以上“新需求”的。这样创建表示:name具有唯一性,email具有唯一性。各自唯一。

1.1 怎么创建表才能符合新需求呢?

drop table if exists t_vip;
create table t_vip(
        id int,
        name varchar(255),
        email varchar(255),
        unique(name,email) 
);

约束没有添加在列的后面,这种约束被称为表级约束

insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');
insert into t_vip(id,name,email) values(2,'zhangsan','zhangsan@sina.com');

name和email两个字段联合起来唯一!!!

insert into t_vip(id,name,email) values(3,'zhangsan','zhangsan@sina.com');

1.2 什么时候使用表级约束?

 需要给多个字段联合起来添加某一个约束的时候,需要使用表级约束。


2. unique 和 not null 可以联合使用

drop table if exists t_vip;
create table t_vip(
        id int,
        name varchar(255) not null unique
);

desc t_vip;

在mysql当中,如果一个字段同时被not null和unique约束的话,该字段自动变成主键字段。(注意:oracle中不一样!) 

insert into t_vip(id,name) values(1,'zhangsan');

insert into t_vip(id,name) values(2,'zhangsan');

错误了:name不能重复

insert into t_vip(id) values(2);

错误了:name不能为NULL。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值