首页 > 数据库 >MySQL之字段约束条件

MySQL之字段约束条件

时间:2022-11-24 19:56:01浏览次数:45  
标签:约束条件 insert name int into 之字段 MySQL values id

  • 无符号、零填充
  • 非空
  • 默认值
  • 唯一值
  • 主键
  • 自增
  • 外键

今日内容详细

无符号、零填充

unsigned
	id int unsigned
zerofill
	id int(5) zerofill

非空(not null)

create table t2(
	id int,
   name varchar(16)
)
insert into t2(id) values (1),
insert into t2(name) values ('jason');
insert into t2(name,id) values ('tom',2)

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

image

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

insert into t2(id) values(1);
insert into t2(name) values('jason');
insert into t2 values(1,'');
insert into t2 values(2,'tom');

image

默认值

create table t3(
	id int default 666,
	name varchar default '匿名'
)
insert into t3(id) values(1);
insert into t3(name) values('jason');
insert into t3 values (2,'tom');

"""
默认值比较像我们学习函数的默认参数,如果没有值则使用默认值,有的话使用写入的值
"""

image

唯一值

单例唯一

create table t4(
	id int unique.
   name carchar(32) unique
);
insert into t4 values(1,'jason');
insert into t4 values(2,'ton');
insert into t4 values(3,'jason');
'单例唯一指的是某一个字段名下的字段只能有一个,不能重复'

image

联合唯一

create table t5(
 id int,
 ip varchar(32),
 port int.
 unique(ip,port)
)
insert into t5 values(1,'127.0.0.1',8080);
insert into t5 values(2,'127.0.0.1',8081);
insert into t5 values(3,'127.0.0.2',8080);
insert into t5 values(4,'127.0.0.1',8080);
"""
联合唯一指的是多个字段组合起来不能够重复,但是这多个字段中其中一个重复是可以写入的,联合唯一写法,先写字段名,最后写unique(联合唯一的字段名写入括号中)
"""

image

主键

1.单从约束层面上而言主键相当于not null + uinque(非空且唯一)
写法:
	create teble t6(
    id int primary key,
     name varchar(32)
    );
insert into t6(name) values('jason');
insert into t6 values(1,'kevin');
insert into t6 values(1,'jerry');

image
image

InnoDB存储引擎规定了所有的表都必须有切只有一个主键(主键是组织数据的重要条件并且主键可以加快数据的查询速度)
1.当表中没有主键也没有其他非空且唯一字段的情况下
	InnoDB会采用一个隐藏的字段作为表的主键,隐藏以为着无法使用,基于该表的数据查询只能一行行查找,速度很慢
2.当表中没有主键但是又其他非空且唯一的字段,那么会从上往下将第一个字段自动升级为主键
create table t7(
 id int not null unique,
 name varchar(32) not null unique,
 age int not null unique,
 birth int not null unique,
 heigth int not null unique
);
"""
我们在创建表的时候应该有一个字段用来标识数据的唯一性,并且该字段通常情况下就是id(编号)字段
	id nid sid pid udi  都可以
create table userinfo(
	uid int primary key
);
"""

image

自增

该约束条件不能单独出来,并且一张表中只能出现一次,主要就是配合主键一起用
create table t8(
	id int primary key,
   name varchar(32)
);

crate table t9(
	id int primary key auto_increment,
    name varchar(32)
)
"""
自增特性:
	自增不会因为数据的删除而退回,永远自增向前
	如果自己设置了更大的数,则之后按照更大的往前自增
	
	如果想充值某张表的主键值	可以使用
	truncate t9;	清空表数据并重置主键
"""

image

外键前戏

我们需要一张员工表
	id		name		dep_name	dep_desc
问题:
    1.表语义不明确(到底是员工还是部门)
    2.存取数据过于冗余(浪费存储空间)
    3.数据的扩展性极差
    
将上述表一分为2
	id		name 		age
 	id 		dep_name	dep_desc
上述的3个问题全部解决,但是员工跟部门之间没有了关系

外键字段:用于表示数据与数据之前的关系的字段

关系的判断

表关系、数据关系其实意思是一样的,只是说法上有区别

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

一对多关系

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

一对多关系外键字段的建立

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

create table emp(
	id int primary key auto_increment,
    name varchar(32),
    age int,
    dep_id int,
    foreign key(dep_id) references dep(id)
)
create table dep(
	id int primary key auto_increment,
    dep_name varchar(32),
    dep_desc varchar(64)
);
1.创建表的时候一定要先创建被关联表
2.录入数据的时候一定要先录入被关联表
3.修改数据的时候外键字段无法修改和删除

针对3有简化措施>>>:级联更新级联删除
create table emp1(
	id int primary key auto_increment,
   name varchar(32),
   age int,
	dep_id int,
   froeign key(dep_id) references dep1(id)
   on update cascade
   on delete cascade
);

create table dep1(
	id int primary key auto_incerment
	dep_name varchar(32),
	dep_desc varchar(64),
)
"""
外键其实是强耦合 不符合解耦合的特性
	所以很多时候	实际项目中当表比较多的情况,我们可以不会使用外键,而是使用代码建立逻辑层面的关系
"""

image
image

多对多关系

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

"""书籍表"""
create table book(
	id int primary key auto_increment,
    title varchar(32),
    price float(5,2)
);
"""作者表"""
create table aothor(
	id int primary key auto_increment,
    name varchar(32),
	phone bigint
);
"""第三张表"""
create table book2author(
id int primary key auto_incerment,
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 usertetail(id)
on update cascade
on delete cascade
);
create table userdetail(
id int primary key auto_increment,
phone bigint
);
"""
一对一关系需要注意的是保证外键的唯一性,如果不是唯一就变成了一对多
"""

标签:约束条件,insert,name,int,into,之字段,MySQL,values,id
From: https://www.cnblogs.com/zhanghong1229/p/16923034.html

相关文章

  • 字段约束条件
    目录字段约束条件1.无符号、零填充2.非空3.默认值4.唯一值5.主键6.自增7.外键1).外键前戏2).外键字段的创建表关系之一对多表关系之多对多表关系之一对一字段约束条件1.......
  • MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件
    MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件一、字符编码与配置文件1、查看MySQL相关信息\s查看相关信息 当前用户、版本、编码、端口号 MySQ......
  • MySQL字段约束条件
    今日内容概要主题:字段约束条件无符号、零填充非空默认值唯一值主键自增外键今日内容详细无符号、零填充unsigned#取消正负号 idintunsignedzerof......
  • MySQL安装与配置
    一、下载,官网http://www.mysql.com1.  往下划找到: 2. 3.     4.   二、安装1.   2.   3.   4.在上一步的4处点击......
  • MySQL 3 字段约束条件
    今日内容详细字段约束条件无符号、零填充unsigned idintunsignedzerofill idint(5)zerofill非空createtablet1( idint, namevarchar(16));insertint......
  • MySQL数据库——字段约束条件
    MySQL数据库——字段约束条件一、无符号、零填充1、unsigned(无符号) idintunsigned2、zerofill idint(5)zerofill二、非空'''设置非空notnull所有字段类......
  • mysql忘记密码(Navicat)
    Navicat已经成功连接,密码忘记的解决方法。本文属于转载,转载地址:https://blog.csdn.net/zcxbd/article/details/122876238背景:Windows环境办法:通过注册表查找......
  • mysql update set where用法
    UPDATEuser_base_infouiSETavatar=(SELECTimgurlFROMalbumaWHEREa.userId=ui.userIdANDa.iscoverImg=1)......
  • mysql批量select插入
    基本用法如下INSERTINTOsg_questions_category(qid,categoryId)SELECTqid,6FROM`sg_questions`MySQL当记录不存在时插入(insertifnotexists)有两种方法:示例一:插入多......
  • python之路35 MySQL 3 字段的约束条件
    字段约束条件无符号、零填充unsignedidintunsignedzerofillidint(5)zerofill非空createtablet1(idint,namevarchar(16));insert......