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

字段约束条件

时间:2022-11-24 21:55:09浏览次数:50  
标签:约束条件 dep unsigned 主键 int key id

1.无符号、零填充

1.unsigned:用在生成表的过程中,表示不取负数,只取正数,负数会直接报错,eg:id int unsigned。
2.zerofill:用在生成表的过程中,跟在整形2后面,表示不足几位会在数字前自动填充0,凑够括号内的位数。eg:id int(5) zerofill

2.非空

1.我们在创建表的过程中,可以只对部分字段名进行传值,方法为在insert into 表名() values(数据值)表名后的括号中写入要传值的字段名即可。
我们发现可以只对括号中写入的字段名传值,未写入的字段名可以不传值,因此得出,所有字段类型不加约束条件的情况下默认都可以为空。不传值的数据在表格中饭也会变成NULL,类似python中的None。

2.如果表中有的数据不能为空必须要上传,可以在生成表的过程中在字段类型后面加上 not null,之后如果该字段未上传数据则会报错。

3.默认值

1.在省城表格过程中如果某个字段结果确定,我们可以采用默认值,类似函数中的默认参数。如果用户不上传这个参数,生成的数据按默认的数据为准,如果上传则以上传的结果为准。设置默认值只需要在字段类型后面加上: default 默认数据值 即可。

4.唯一值

1.单列为一:在创建数据的过程中有的数据需要保持唯一,例如派出所的名单系统名字可以重复,但是身份证号必须是唯一的。为了实现这种效果,我们只需要在字段类型后面加上unique即可,代表该字段不可重复。
2.联合唯一:创建数据时有几个条件不能同时相同,比如身份证后四位不能和出生年月相同,而这个筛选在mysql中可以实现,只需要在创建表的过程中在最后一行加入unique(),括号中写入联合唯一的字段名即可。

5.主键

1.主键语法结构为:primary key,跟在字段类型后面,相当于not null + unique(非空且唯一)。eg:身份证号,员工号。
2.主键是组织数据的重要条件,并且可以主键可以加快数据的查询速度,InnoDB存储引擎规定了所有的表必须有且只有一个主键。
	2.1当表中没有主键也没有其他非空且唯一的字段情况下,InnoDB会采用一个隐藏的字段作为表的主键,隐藏意味着无法使用,基于该表的数据查询也只能一行行查找,速度很慢。
	2.2当表中没有主键但是有其他非空且唯一的字段,那么会从上往下将第一个非空且唯一的字段自动升级成为主键。可以看到字典名age的Key也变成的主键的缩写PRI。
"""
我们在创建表的时候应该有一个字段用来标识数据的唯一性,并且该字段通常情况下就是id字段,我们也可以根据项目具体情况命名成为'pid','sid'等。
"""

6.自增

1.当我们使用id或其他字段来给数据编号时,每次都要上传id,并且如果时间间隔较长,我们会忘记上次编号到多少。所以我们在创建表的时候直接在主键后面加上:auto_increment,即可自动编号。
"""
但是子层不会因为删除了数据而回退,永远会增长。如果想要重置某张表的主键值,需要使用truncate 表名来清空数据并重置主键。
"""

7.外键

1.我们在制作一张员工表时,一班表上体现的信息需要有:	
	id name age dep_name(部门) dep_desc
但是我们在使用这张表的过程中会发现以下问题:
	1.语义不明确,不知道主体是员工还是部门。
	2.因为部门比较有限,新增大量员工时会重复输入部门,浪费内存空间,造成空间冗余。
	3.如果员工绑定的部门需要更换名字或其他属性时,工作量很大并且很麻烦。

2.鉴于上述缺点,我们将表一分为二,分成员工表(id name age),和部门表(id dep_name dep_desc)。上述问题得到解决,但是员工和部门没有了关系,因此我们需要在员工表里增加一个字段dep_id,将部门的id填入员工表中的dep_id字段,就时的不同表之间产生了联系。因此得出概念外键字段:用于表示数据与数据之间关系的字段。dep_id就是外键字段。
"""
外键字段:用于表示数据与数据之间关系的字段。
"""

员工表

id name age dep_id(外键字段)
1 jason 18 1
2 max 25 2
3 jerry 27 2
4 jack 38 1

部门表

id dep_name dep_desc
1 领导班子 领导员工
2 法务部 处理法务纠纷
3 财务部 管钱

8.关系的判断

1.关系有多种:一对多,多对多,一对一,没有关系
"""
关系判断可以用'换位思考原则'
"""

9.一对多关系

1.首先站在员工表的角度来考虑:一个员工能妥否对应多个部门?不行;再站在部门表的角度来说:一个部门可以对应多个员工。该种关系称为一对多关系,部门是一,员工是多。
        
2.结论:一个可以一个不可以,该种关系就是一对多。针对'一对多'的关系,外键字段放在'多'的一方。

10.外键字段的建立

小技巧:先定义出含有普通字段的表,之后再考虑外键字段的添加。
首先我们用代码写出两个表以及它们在数据库层面的关系。
员工表:
create table emp(
	id int unsigned primary key auto_increment,
	name varchar(32),
	age int,
	dep_id int unsigned,
	foreign key(dep_id) references dep(id)
);

部门表: 
create table dep(
	id int unsigned primary key auto_increment,
	dep_name varchar(32),
	dep_desc varchar(32)
);
1.创建表的时候应该先创建被关联表。
2.录入表数据的时候一定要先录入被关联表。
3.修改数据时候外键字段无法修改和删除。
针对不能删除和修改的缺点,对上述代码进行以下修改,添加以下代码时被关联的一方修改关联的一方也可以正常修改。
create table emp1(
	id int unsigned primary key auto_increment,
	name varchar(32),
	age int unsigned,
	dep_id int unsigned,
	foreign key(dep_id) references dep1(id)
	on update cascade
	on delete cascade
);

create table dep1(
	id int unsigned primary key auto_increment,
	dep_name varchar(32),
	dep_desc varchar(32)
);

image

"""
上述我们发现部门数据删除之后,和删除部门绑定的员工数据也删除了,所以外键还是有一定缺陷。外键其实是强耦合,不符合解耦合的特性,所以很多时候,实际项目中当表较多的情况,我们可能不会使用外键 而是使用代码建立逻辑层面的关系。
"""

11.多对多关系

刚才研究了一对多的关系,但是日常生活中也有很多多对多的关系,例如书籍合作者,一本书的作者可以是好几位作家,一位作家也可以撰写多本书籍。所以书籍表和作者表是多对多的关系。

书籍表

id title price
1 书籍1 50
2 书籍2 60
3 书籍3 70

作者表

id name 电话
1 作者1 111
2 作者2 222
3 作者3 333
'''针对多对多关系,我们需要建立第三张表'''
create table book(
	id int unsigned primary key auto_increment,
	title varchar(32),
	price float(5,2)
);

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

create table book2auther(
	id int unsigned key auto_increment,
	auther_id int unsigned,
	foreign key(auther_id) references auther(id)
	on update cascade
	on delete cascade,
	book_id int unsigned,
	foreign key(book_id) references book(id)
	on update cascade
	on delete cascade
);                                    
"""
传值时候先传学生和老师的表,再添加第三个表,第三个表就是用来添加多对多关系的。
"""

12.一对一关系

联系的双方为用户表和用户详情表,用户表和用户详情表的关系是一对一的关系。针对一对一的关系,外键字段在任何一方都可以,但是推荐使用放在查询频率较高的表里。
create table user(
	id int unsigned primary key auto_increment,
	name varchar(32),
	detail_id int unsigned unique,
	foreign key(detail_id) references userdetail(id)
	on update cascade
	on update cascade
);

create table userdetail(
	id int unsigned primary key auto_increment,
	phone bigint unsigned  
);

标签:约束条件,dep,unsigned,主键,int,key,id
From: https://www.cnblogs.com/zkz0206/p/16923577.html

相关文章

  • 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......
  • MySQL之字段约束条件
    无符号、零填充非空默认值唯一值主键自增外键今日内容详细无符号、零填充unsigned idintunsignedzerofill idint(5)zerofill非空(notnull)createta......
  • 字段约束条件
    目录字段约束条件1.无符号、零填充2.非空3.默认值4.唯一值5.主键6.自增7.外键1).外键前戏2).外键字段的创建表关系之一对多表关系之多对多表关系之一对一字段约束条件1.......
  • MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件
    MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件一、字符编码与配置文件1、查看MySQL相关信息\s查看相关信息 当前用户、版本、编码、端口号 MySQ......