如何在mysql中向一个表添加一个约束,这样一个客户机只能拥有10个产品?
这个案子是关于一个可以预订电影的客户。但他在任何时候最多只能拥有10部电影。我需要什么样的检查约束才能让它工作 创建我的数据库的代码如下所示: 创建表格类型 (PK_GenreID自动增量(13,1)不为空, GenreNaam文本(20) 主键(PK_GenreID)); 在流派(GenreNaam)上创建唯一索引\u BC00E533\u C727\u 4D6E; 创建表Klant (PK_Klantnummer自动增量(19,1)不为空, Naam文本(20)不为空, Woonpaats文本(20), 邮政编码文本(6), Huissummer文本(6), Telefoon文本(10), 电子邮件文本(255) 约束主键主键(PK_Klantnummer)); 在Klant(Naam)上创建唯一的索引_6827B6DC_E76F_4B57; 创建表存储服务器 (PK_ReservingId自动递增(13,1)不为空, FK_Klantnummer整数, 保留基准日期, 主键(PK_ReserveringID) 约束KlantReserveringen外键(FK_Klantnummer)在更新级联和删除级联上引用Klant(PK_Klantnummer); 制作桌面电影 (PK_FilmnaamID AUTOINCREMENT(51,1)不为空, FK_GenreID整数, Filmnaam文本(30)压缩, 发布基准日期, Regisseur文本(30), 约束主键主键(PK_FilmnaamID) 约束GenreFilms外键(FK_GenreID)在更新级联上引用流派(PK_GenreID)在删除级联上引用流派(PK_GenreID); 在电影上创建索引PK_FilmnaamID(PK_FilmnaamID); 创建表格Beelddrager (PK_FilmID自动递增(50,1)不为空, FK_FilmnaamID整数, Soort文本(50), 主键(PK_FilmID) 约束FilmsBeelddrager外键(FK_FilmnaamID)在更新级联上引用Films(PK_FilmnaamID)在删除级联上引用Films(PK_FilmnaamID); 创建表Beschadiging (PK_BeschadigingID自动递增(14,1)不为空, FK_FilmID整数, Schade文本(255), 基准日期, 约束主键主键(PK_BeschadigingID) 约束BeelddragerBeschadiging外键(FK_FilmID)在更新级联上引用Beelddrager(PK_FilmID)在删除级联上引用Beelddrager(PK_FilmID); 在Beschadiging上创建索引PK_BeschadigingID(PK_BeschadigingID); 创建表reservingsregel (FK_ReserveringID整数, FK_FilmID整数, 开始日期, Einddatum日期, 约束BeeldDragerReservingsRegel外键(FK_FilmID)在更新级联上引用Beelddrager(PK_FilmID)在删除级联上引用,如何在mysql中向一个表添加一个约束,这样一个客户机只能拥有10个产品?,mysql,database,check-constraints,Mysql,Database,Check Constraints,这个案子是关于一个可以预订电影的客户。但他在任何时候最多只能拥有10部电影。我需要什么样的检查约束才能让它工作 创建我的数据库的代码如下所示: 创建表格类型 (PK_GenreID自动增量(13,1)不为空, GenreNaam文本(20) 主键(PK_GenreID)); 在流派(GenreNaam)上创建唯一索引\u BC00E533\u C727\u 4D6E; 创建表Klant (PK_Klantnummer自动增量(19,1)不为空, Naam文本(20)不为空, Woonpaats文
约束ReservingReservingsRegel外键(FK_ReservingId)在更新级联上引用Reservingen(PK_ReservingId),在删除级联上引用Reservingen(PK_ReservingId) 对于数据库层来说,这条规则似乎不太适合执行 引用完整性功能(它们的唯一键和外键)不能单独解决这个问题 一种可能的解决方案是,在尝试任何违反所需基数的插入、更新或删除时,使用触发器短路(引发异常)。然而,mysql在这方面的功能相当不足(取决于版本)。此外,触发器通常是一个坏主意,尤其是在执行您建议的波动业务规则时 一种可能的解决方案是对数据结构进行反规范化。但这是一个非常可怕的想法,我不会详细说明 一个可能的解决方案是维护关于集合基数的元数据,然后在强制实施更改时使用元数据。这会变得棘手,最终会失败,因为您的应用程序代码必须完美地保持元数据的最新状态。这种模式经常被实现,也经常失败 最终,最好的解决方案是在应用程序代码中正确使用事务。一般流程如下所示:
mysql非常愚蠢,不执行检查约束(它可以解析约束,但不强制执行约束)。您需要使用触发器,或者考虑PoxGRE,它负责检查。