MySQL基础之主键与唯一(UNIQUE)的区别,外键,视图与存储过程


前言

本文介绍主键与唯一的区别,外键,以及视图与存储过程的使用


提示:以下是本篇文章正文内容,下面案例可供参考

一、主键与唯一(UNIQUE)的区别

二者的共性在于均可保证其约束的字段数据的唯一性
下面讲讲二者的区别:

主键唯一
主键不可为空(NULL)唯一可以允许一行数据为空,但是不允许出现两个空(null)的数据
主键约束一个表只允许有一个唯一约束一个表可以有多个
主键可以有几个字段组合而成,称为联合主键

关于联合主键 : 举个例子,如果使用id和name作为联合主键,那么只有在某一行数据中,与另一行中的id,name值一样时,才会包错.

二、视图与存储过程

1.视图

  • 视图就是虚拟的表,具有临时性的特点,
  • 只保存SQL逻辑,不保存具体的数据
  • 我们一般使用视图来封装复杂的SQL语句,类似于Java中的方法. 视图通常用于查询数据,而不是增删改

视图的语法在DBMS中与普通的查询语句类似,而在控制台(原生MySQL) 中还需要增加CREATE VIEW 视图名 AS SELECT ...

2.存储过程

存储过程同样也是用于简化复杂的SQL语句,在没有其它更优解的情况下,应该尽可能地使用存储过程.
存储过程有固定的格式, 其函数体写在BEGIN END之间
(1)创建存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `存储过程名称`(OUT `productpricing` int)
BEGIN
	SELECT AVG(good_price) AS priceaverage
	FROM goods;
END

存储过程的参数有三种, IN,OUT,INOUT,其中IN为输入的参数,OUT为返回的参数,INOUT二者兼备
(2)存储过程的调用
我们可以在mybatis框架中调用,也可以直接新建查询进行调用. 由于MySQL变量都要带上一个@符

在查询中可以这样获取存储过程返回的数据👇

CALL productpricing2(@pl,@ph,@pa);
SELECT @pl;

在mybatis框架中,我们不必在dao层Java方法的参数列表中列出返回的参数,仅需在SQL语句中列出参数

@Select("Call productpricing(@pl)")
int productpricing(); //Java方法中不必给出参数,而上一行的SQL中需要列出@符标识的MySQL变量

三、外键

1.外键的特点

  • 外键需要在从表中设置,即在需要使用该字段的表中将其设置为外键
  • 外键字段类型要求与主表一致,但是名称可以不一致 (默认是一致的)
  • 主表关联列必须在key(一般为主键或唯一)
  • 插入数据时,先向主表插入,再向从表插入. 删除时,先删从表,再删主表
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值