数据库的约束和设计

约束

  • 作用
    • 对表中的数据进行进一步的限制, 保证数据的正确性, 有效性和完整性
  • 种类
    • primary key : 主键约束
    • unique : 唯一约束
    • not null : 非空约束
    • default : 默认值
    • foreign key : 外键约束
    • auto_increment : 自增约束(适用于int数据类型)

主键约束

  • 特点
    • 非空且唯一
  • 注意事项
    • 通常不用业务字段作为主键, 单独给每张表设计一个id的字段, 把id作为主键; 主键是给数据库和程序使用的, 不是给最终的客户使用的; 所以主键有没有含义没有关系, 只要不重复, 非空就行
    • 每张表都应该有一个主键, 并且每张表只能有一个主键(可以一组字段作为一张表的主键)
1. 在创建表的时候给字段添加主键
create table 表名 (
	字段名 数据类型 primary key,
	字段名 数据类型,
	字段名 数据类型
);
create table 表名 (
	字段名1 数据类型,
	字段名2 数据类型,
	字段名3 数据类型,
	primary key(字段名1, 字段名2)
);

2. 在已有表中添加主键
alter table 表名 add primary key(字段名);
alter table 表名 add primary key(字段名1, 字段名2);

自增约束(主键自增)

  • 作用
    • 能够设置主键为自动增长
    • 主键如果让我们自己添加很有可能重复, 我们通常希望在每次插入新记录时, 数据库自动生成主键字段的值
  • 注意事项
    • 只能给主键添加约束
    • 只能给一列添加自增约束
-- 示例1
create table test1 (
  id int primary key auto_increment,
  name varchar(10),
  age int
);
-- 示例2
alter table test1 modify id int primary key auto_increment;
alter table test1 modify id int auto_increment;

默认值

  • 注意事项
    • 主动插入null 不会被默认值替换
create table test1 (
  id int ,
  name varchar(10),
  age int default 18
);

insert into test1(name, age) values('11', null); -- (null, 11, null)
insert into db4.test1(name) values('22'); -- (null, 22, 18);

表的关系和外键约束

  • 表的关系分为一对一, 一对多和多对多, 在处理多对多关系时我们需要引入第三张表, 作为多对多两张表的桥梁
  • 第三张表需要引入其余两张表的主键作为自己表中的外键
-- 前置条件
create table tb_order (
  id int primary key auto_increment,
  payment double(10, 2),
  payment_type tinyint,
  status tinyint
);

create table tb_goods (
  id int primary key auto_increment,
  title varchar(100),
  price double(10, 2)
);

create table tb_order_goods (
  id int primary key auto_increment,
  order_id int,
  goods_id int,
  count int
);
alter table 表名 add [constraint 约束名称]
foreign key(当前表中的列名) references 被引用的表名(被引用表的列名);

-- 完整写法(给已经存在的表添加外键约束)
alter table tb_order_goods add constraint fk_order_id
foreign key(order_id) references tb_order(id);

alter table tb_order_goods add constraint fk_goods_id
foreign key(goods_id) references tb_goods(id);

-- 省略写法(给已经存在的表添加外键约束)
alter table tb_order_goods add
foreign key(order_id) references tb_order(id);

alter table tb_order_goods add
foreign key(goods_id) references tb_goods(id);
-- 完整写法((创建表时就添加外键约束))
create table tb_order_goods (
  id int primary key auto_increment,
  order_id int,
  goods_id int,
  count int,
  constraint fk_order_id foreign key(order_id) references tb_order(id),
  constraint fk_goods_id foreign key(goods_id) references tb_goods(id)
);

-- 省略写法(创建表时就添加外键约束)
create table tb_order_goods (
  id int primary key auto_increment,
  order_id int,
  goods_id int,
  count int,
  foreign key(order_id) references tb_order(id),
  foreign key(goods_id) references tb_goods(id)
);

在这里插入图片描述

  • 注意事项
    • 添加数据需要先添加主表, 然后添加从表
    • 删除数据需要先删除从表, 然后再删除主表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值