首页 > 技术文章 > MySQL约束条件(主键-自增-默认值)

goOJBK 2022-01-26 22:05 原文

一:MySQL约束条件

1.什么是约束条件?

1.约束条件相当于是在字段类型之上添加的额外约束(条件)
2.限制表中的数据,保证添加到数据表中的数据准确和可靠性
image

二:unsigned(去除正负号)

  • unsigned
作用:
	使整型范围无正负号
格式:
	create table t1(id int unsigned);

三:zerofill(不够位数零填充)

  • zerofill
作用:
	不够位数使用0填充
格式:
	create table t1(id int(8) unsigned zerofill)
    insert into t1 values(2222);

image

四:not null(非空)

  • not null
作用:
    非空(不能为空)
   
不使用约束条件测试(id字段为空)   
create table t3(id int,name varchar(16));
指定给表内字段name插入数据
insert into t3(name) values('jason');

id		: NULL(空)
name	: jason

image

1.使用约束条件(不添加会报错)
限制id字段不能为空
create table t4(id int not null,name varchar(16));
不添加id字段添加(报错)
insert into t4(name) values('jason');
正常添加不报错
insert into t4(name) values('jason');

image

五:default(默认值)

作用:
	默认值(用户给了就用用户的 用户不给就是要默认的)
	
    create table t5(id int,name varchar(16) default '匿名用户');
    正常传值
    insert into t5(id,name) values(2,'jason');
    只给id添加值(name默认传值)
    insert into t5(id) values(1);
  • 注意:
默认值前面(字段是字符串类型)就给字符串
默认值前面(字段是int类型)就给个int类型(1)

image

六:unique(唯一数据)

作用:
	唯一(保证字段(一个、多个)在整个表中没有重复的数据)
	
unique分为单列唯一和多列唯一。	
1.单列唯一(只能控制单列不能重复)
  • 案例:
限制name字段不能有重复数据
create table t6(id int,name varchar(16) unique);
向t6表内添加数据
insert into t6 values(1,'jason'),(2,'jason');

image

2.联合唯一(多个字段组合之后的结果(不能有重复项)单个单个可以有重复项)
  • 案例
    	create table server(
        	id int,
            host varchar(32) comment 'ip地址',  
        	port varchar(32) comment '端口',
            unique(host,port)
        );
3.添加数据
insert into server values(1,'127.0.0.1','3306'),(2,'127.0.0.1','3307'),(3,'127.0.0.2',3306);
向server表内添加数据(多个字段组合之后结果重复)
insert into server valuse(4.'127.0.0.1',3306);

image

4.总结
host与port字段结合不重复可以存储(才不会报错)

七:primary key(主键)

1.primary key(主键)
1.但从约束条件上而言主键相当于not null + unique(非空且唯一)
2.主键的功能目前简单的理解为能够加快数据的查询速度相当于书的目录
3.InnoDB存储引擎规定每张表都必须有且只有一个主键
     情况1.表中没有任何的主键和其他约束条件
     	InnoDB默认会采用一个隐藏字段作为表的主键
     情况2.表中没有主键但是有非空且唯一的字段
     	InnoDB会自动将该字段升级为主键

结论:每张表都必须要有一个id(sid nid uid)字段并且该字段就是主键

2.单列主键(验证是否非空且唯一)
create table t7(
	id int primary key,
	name varchar(32)
);
3.表内添加数据(验证是否为空且唯一)
insert into t9(name) values('gary');   # 报错
insert into t9 values(1,'gary'),(2,'tom');  # 报错

image

4.验证 (表中没有主键但是有非空且唯一的字段,InnoDB会自动将该字段升级为主键)
create table t8(
	id int,
	name varchar(32),
	age int not null unique,
    phone bigint not null unique,
    num int not null unique
);

image

5.多列主键(联合主键)
create table t9(
id int,
age int,
name varchar(16),
primary key(id,age)
);

image

八:auto_increment(自增)

1.auto_increment作用
自增(专门配合主键一起使用的 让主键能够自增)
2.创建表(验证自增效果)
由于主键类似于数据的唯一标识 并且主键一般都是数字类型
我们在添加数据的时候不可能记住接下来的序号是多少 太麻烦
create table t10(
	id int primary key auto_increment,
	name varchar(32)
);
3.向t10表内添加指定name字段的数据(不添加id字段数据)
mysql> insert into t10(name) values('jason'),('tony'),('kevin');

image

九:主键自增特性

1.自增带来的影响
1.主键的自增是不会收到delete from删除操作的影响
2.如果删除某一个字段的话他还是保持原来的自增顺序依次自增。
  • 比如:
当我们删除的是字段id为3的位置,再次添加数据字段id就为4,并不会占用被删除3的位置。
就算我们把表内的数据都删除了,再次添加表内数据,也是以原来的字段顺序保存依次自增。

image

4.解决主键自增问题(truncate)
truncate
作用:
	既可以清空表数据也会重置主键值
使用格式:
	truncate 表名称;

推荐阅读