您当前的位置: 首页 >  sql

网易测试开发猿

暂无认证

  • 3浏览

    0关注

    221博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL约束(详解)

网易测试开发猿 发布时间:2021-11-05 16:25:24 ,浏览量:3

MySQL约束(详解)

约束的作用: 创建表:保证数据的完整性 = 实施完整性约束(保证以后数据输入 是正确的,错误的数据、不符合要求的数据不允许输入)

约束方法1:唯一约束、主键约束、标识列 约束方法2:限制数据类型、检查约束、外键约束、默认值、非空约束

约束类型: 1.主键(Primary Key)约束 2.外键(Foreign Key)约束 3.唯一性(Unique)约束 4.默认值(Default)约束 5.非空(Not NULL)约束

一、主键:Primary key 如:

create table c7 (id int Primary key);

特征: 1.不允许重复 2.不能为空 3.一张表只能有一个主键 4.允许有联合主键(多个字段,共同主键) 如:

create table c8(id int name varchar(20),primary key(id,name));

二、外键:foreign key 多表之间数据一致性的约束(数据关联,保证数据的一致性) 1.先确定数据来源主表、从表 2.由从表的非主键向主表的主键字段发起建立外键(但数据类型、长度必须相同) 如:

foreign key(no) references xxb1 (no);

外键的作用: 1.从表不允许写入主表不存在的数据 2.主表不允许删除从表还存在的数据 3.无法防止主表中为空的数据,所以在建立从表时设置发起外键的那个字段不为空 如:

create table stuInfo(
     scode int primary key,--学生的学号
     Sname char(10),--学生的姓名
     Saddress varchar(50),--学生的住址
     Sgrade int,--学生所在班级
     Semail varchar(50),--学生的邮箱地址
     Sbrith date
)DEFAULT CHARSET='utf8";
create table score(
studentID int,
coureseID int,
score int,
scoreID int primary key,
foreign key(studentID) references stulnfo(Scode) --添加外键
)DEFAULT charset='utf8';

如: 先新建:create table 主表(主键字段 数据类型,…); 再新建:create table 从表(非主键字段 数据类型,…,foreign key(外键字段) refrencer 主表(外键字段));

alter table 从表名 add constraint fk_从表_主表_外键字段 foreign key(外键字段) refrencer 主表(外键字段)

建表:先主表,再从表 写数据:先主表,再从表 删数据:先从表,再主表

三、唯一性:unique 如:

create table c9 (email int unique,name char(20));  

说明:如创建表,要保证邮箱地址唯一,如果email字段重复插入,则会报错,但是该字段可以为null 特征: 1.允许字段为空 2.一张表允许多个唯一性约束 3.以行为单位,确定每一行的唯一性

四、默认值:default 如:

create table c10(name varchar(20) default "欧");

当插入时没有插入值时,会自动插入默认值 也可以使用自增长的方式来给字段填充值(如:id等等) 如:

create table c11(id int not null auto_increment primary key,name char(20));

1.auto_increment是数据列的一种属性,只适用于整数类型数据列 2.auto_increment数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分) 3.auto_increment数据列必须具备NOT NULL属性 4.当进行全表删除时,auto_increment会从1重新开始编号

五、非空约束:not null 如:

create table c12(id int,name char(20) not null);     

说明:用not null约束的字段不能为null值,必须给定具体的数据,如果没有插入name字段数据,则会报错

关注
打赏
1665054478
查看更多评论
立即登录/注册

微信扫码登录

1.0075s