首页 > 其他分享 >字段之约束条件

字段之约束条件

时间:2022-11-24 21:56:52浏览次数:56  
标签:约束条件 varchar name int create 字段 table id

字段之约束条件

MySQL字段之约束条件

无符号、零填充

1.unsigned

create table t6(id tinyint unsigned);  # 取消正负号
insert into t6 values(-129),(128),(1000);

2.zerofill

create table t1 (id int(5) zerofill);  而是用来控制展示的长度  一般以五位显示,不够就填充,超过几位就是几位
insert into t13 values(123),(123456789);

非空

本文使用的库是>>>: db3

1.所有字段类型不加约束条件的情况下默认都可以为空

create table t1(
	id int,
	name varchar(16)
);

insert into t1(id) values(1);
insert into t1(name) values('kiki');
insert into t1(name,id) values('kiki',2);

image

2.所有字段类型不加约束条件的情况下

create table t2(
	id int,
	name varchar(16) not null
);

insert into t2(id) values(1);
insert into t2(name) values('kimi');
insert into t2 values(1,'');
insert into t2 values(3,null);

​ 如果为name字段添加了约束条件 not null(非空),每次添加数据的时候必须加上name字段的信息,不加或者加null,都是会报错的,如下图所示
image

默认值

​ 创建表格的时候,给字段类型添加默认值,添加字段值的时候,如果没有指定的值表格里面显示的是默认值。

create table t3(
	id int default 100,
    name varchar(16) default '默认'
);

insert into t3(id) values(1);
insert into t3(name) values('kimi');
insert into t3 values(2,'rose');

image

唯一值

1.单列唯一

create table t4(
	id int unique,
    name varchar(32) unique,
    age int unique
);

insert into t4 values(1,'kimi',21),(1,'rose',22);


单例唯一:提前给字段添加了unique,那么添加的字段类型只能有一个字段值,添加过了再添加同样的字段值就会报错,有且只有一个唯一值,如果没有添加unique,说明可以添加重复的字段值。

image

2.联合唯一

create table t5(
	id int,
    ip varchar(32),
    port int,
    unique(ip,port)
);

insert into t5 values(1,'127.0.0.1',8080),(2,'127.0.0.1',8081),(3,'127.0.0.2',8080);
insert into t5 values(4,'127.0.0.1',8080);
insert into t5 values(5,'127.0.0.3',8084);

联合唯一:提前 为ip和端口添加了联合唯一,即unique(ip,port),那么表示:添加的一条记录里面有添加过的端口和ip出现,就会报错;如果只有端口或者ip重复,是不会报错的

image

主键

1.单从约束层面上而言,相当于 not null +unique(非空且唯一)

create table t6(
	id int primary key,
    name varchar(32)
);

insert into t6(name) values('kimi');
insert into t6 values(1,'rose');
insert into t6 values(1,'jerry');

​ 主键不能为空,且要有唯一的值
image

2.InnoDB存储引擎规定二零所有的表必须有且只有一个主键

(主键是组织数据的重要条件并且主键可以加快数据的查询速度)

​ 2.1 当表中没有主键也没有其他非空且唯一的字段的情况下

​ InnoDB会采用隐藏的字段作为表的主键,隐藏意味着无法使用,基于该表的数据查询只能一行行查找,速度很慢

​ 2.2 当表中没有主键,但是有其他非且唯一的字段,那么会从上面往下将第一个该字段自动升级为主键

create table t8(
	id int,
	name varchar(32) not null unique,
	phone bigint not null unique,
	user_id int not null unique,
	height float not null unique
);

image

我们在创建表的时候应该有一个字段用来标识数据的唯一性 并且该字段通常情况下就是'id'(编号)字段
	id nid sid pid gid uid
	
create table userinfo(
	uid int primary key,
);

自增

​ 该约束条件不能单独出现,并且一张表格中只能出现一次,主要是配合主键一起用。

create table t9(
	id int primary key,
    name varchar(32)
);  # 不能通过添加名字实现自增id

create table t10(
	id int primary key auto_increment,
    name varchar(32)
);   # 可以实现自增

image

自增的特征

​ 自增不会因为数据的删除而回退,永远基于被删除最后一个数字号(如45)自增往前;如果自己手动添加了200号,那之后就基于200号往前自增;如果想重置某张表的主键值,可以使用 truncate t10;>>>清空表数据并重置主键

外键

引入

我们需要一张员工表
	id	name	age		dep_name	dep_desc

1.表语义不明确(到底是员工还是部门)		无所谓
2.存取数据过于冗余(浪费存储空间)		 无所谓
3.数据的扩展性极差					 不能忽略

将上述表一分为二
	id	name	age
    
  	id	dep_name dep_desc
上述的三个问题全部解决 但是员工跟部门之间没有了关系

外键字段:用于标识数据与数据之间关系的字段

关系的判断

表关系、数据关系其实意思是一样的 知识说法上有区分

关系总共有四种
	一对多
  	多对多
 	一对一
 	没有关系
  
关系的判断可以采用'换位思考'原则

一对多关系

以员工表和部门表为例
	1.先站在员工表的角度
    	问:一名员工能否对应多个部门
       答:不可以
 	2.再站在部门表的角度
    	问:一个部门能否对应多名员工
     	答:可以	
	结论:一个可以一个不可以 那么关系就是'一对多'
	针对'一对多'关系 外键字段建在'多'的一方

外键字段的建立

小技巧 :先定义出含有普通字段的表,之后再考虑外键字段的添加

create table employee(
    id int primary key auto_increment,
    name varchar(32),
    age int,
    department_id int,
    foreign key(department_id) references department(id)
);

create table department(
	id int primary key auto_increment,
    department_name varchar(32),
    department_desc varchar(64)
);   # varchar() 最好是6的倍数且不超过255

image

一对多关系

1.创建表的收一定要先创建被关联表

2.录入表数据的时候一定要先录入被关联表

3.修改数据 的时候外键字段无法修改和删除

​ 简化操作>>>: 级联更新级联删除

create table employee1(
	id int primary key auto_increment,
    name varchar(32),
    age int,
    department_id int,
    foreign key(department_id) references department1(id) 
    on update cascade
    on delete cascade
);

create table department1(
	id int primary key auto_increment,
    depart_name varchar(32),
    depart_desc varchar(64)
);

外键其实是强耦合,不符合解耦合的特性,所以很多时候,实际项目中当表较多的情况,我们可以不会使用外键,而是使用代码建立逻辑层面的关系。

1.通过delete from department where id = 3;修改id = 3的值

image

2.将部门表编号id=2修改为666, 通过update department1 set id=666 where id = 2;

image

多对多关系

以书籍表与作者表为例
	1.先站在书籍表的角度
  		问:一本书能否对应多个作者
      答:可以
 	2.再站在作者表的角度
    	问:一个作者能否对应多本书
      	答:可以
   结论:两个都可以 关系就是'多对多'	
 	针对'多对多'不能在表中直接创建 需要新建第三张关系表

代码展示:

create table book(
	id int primary key auto_increment,
    title varchar(32),
    price float(5,2)
);

create table author(
	id int primary key auto_increment,
    name varchar(32),
    phone bigint
);

create table book2author(
	id int primary key auto_increment,
    author_id int,
    foreign key(author_id) references author(id)
    on update cascade
    on delete cascade,
    book_id int,
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade
);

image

一对一关系

以用户表与用户详情表为例
	1.先站在用户表的角度
  		问:一个用户能否对应多个用户详情
      答:不可以
 	2.再站在用户详情表的角度
    	问:一个用户详情能否对应多个用户
      	答:不可以
   结论:两个都不可以 关系就是'一对一'或者没有关系	
 	针对'一对一'外键字段建在任何一方都可以 但是推荐建在查询频率较高的表中

代码展示:

create table user(
	id int primary key auto_increment,
	name varchar(32),
    detail_id int unique,
    foreign key(detail_id) references userdetail(id)
    on update cascade
    on delete cascade
);

create table userdetail(
	id int primary key auto_increment,
    phone bigint,
    personal varchar(64),
    spacecolor varchar(128)
);

image

标签:约束条件,varchar,name,int,create,字段,table,id
From: https://www.cnblogs.com/zhanglanhua/p/16923571.html

相关文章

  • 字段的约束条件
    字段的约束条件约束的作用:对表中的数据进行限制。保证数据的正确性有效性和完整性一个表如果添加了约束,不正确的数据将无法再插入到表中,约束在创建表的时候添加比较......
  • 字段约束条件
    1.无符号、零填充1.unsigned:用在生成表的过程中,表示不取负数,只取正数,负数会直接报错,eg:idintunsigned。2.zerofill:用在生成表的过程中,跟在整形2后面,表示不足......
  • 无符号、零填充、非空、默认值、唯一值、主键、自增、外键前戏、关系的判断、一对多关
    主题:字段约束条件无符号、零填充非空默认值唯一值主键自增外键无符号、零填充unsigned idintunsigned无符号,所有二进制位都会取存储数字zerofill id......
  • MySQL字段约束条件
    昨日内容回顾MySQL字符编码及配置修改新版MySQL默认字符编码为utf系列,旧版本使用编码不统一,需要自己修改。修改使用配置文件较为简单,复制原配置文件改名为my.ini,文件......
  • 进入python的世界_day38_数据库——mysql约束条件、表关系
    一、字段约束条件1.无负号​ unsignedcreatetablet(idintunsigned);#不能添加负数2.零填充​ zerofillcreatetablet(idintzerofill);#填入得数据展......
  • MySQL之约束条件及表间关系
    MySQL之约束条件MySQL创建表的完整语法中,每个字段名后必须跟随字段类型,还可以选择跟随约束条件。本文将介绍常见的约束条件,首先先创建一个测试约束条件的库:createdatab......
  • mysql数据库(字段约束条件)
    什么是字段约束字段约束就是将字段的内容定一个规则,我们要按照规则办事约束描述关键字非空约束限制该字段的数据不能为nullnotnull唯一约束保证该字......
  • python入门基础之主键、外键、约束条件
    python入门基础之主键、外键、约束条件目录python入门基础之主键、外键、约束条件字段约束条件主键自增外键前戏关系的判断外键字段的建立多对多关系一对一关系字段约束......
  • 字段约束条件
    字段约束条件无符号、零填充unsigned#无符号idintunsignedzerofill#零填充idint(3)zerofill#存入数字不足三位时以0填充至三位非空createt......
  • Mysql:字段约束条件:无符号、零填充、非空、默认值、唯一值、主键、自增、外键前戏、
    目录无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多关系外键字段的建立多对多关系一对一关系无符号、零填充'''关键字unsigned无需正负号'''crea......