当前位置: 首页 > 面试题库 >

是否应该在数据库级别处理唯一字段的验证?

漆雕稳
2023-03-14
问题内容

我正在为我的BSc项目编写相当大的Web应用程序,并使用MySQL在PHP中编写它。

创建SQL表时,我应该使用唯一字段吗?我之所以这样问,是因为我正在向PHP中编写验证方法。例如,如果我想检查数据库中是否已经存在电子邮件地址,我将首先执行一条SQL语句,查看是否返回了任何电子邮件地址,然后将初始SQL数据插入数据库中。

如果我只是插入初始SQL数据,则它将在整个语句上引发错误,因为电子邮件地址必须是唯一的。

这是进行验证的正确方法吗?


问题答案:

好吧…这是两件完全不同的事情。通过在数据库的列上设置约束(例如唯一),可以防止将错误的数据集插入数据库。这是确保数据一致性的基本内容。通过向您的应用程序添加验证,您可以添加另一层。在防止将错误的数据集插入数据库的同时,您主要创建一种手段来告诉用户他做错了什么。

您需要两个。通常,唯一约束不应仅是照顾数据库的事情。建议还使用外键约束,如果适用,还应使用更复杂的数据验证(自定义约束)。但是,当您使用MySQL时,实际上并没有很多可用的功能

尽力而为,因为最终它可以避免很多麻烦,直到您最终意识到数据库中的数据是错误的,然后才弄清楚为什么会发生特定的错误。那真的很痛苦。



 类似资料:
  • 本文向大家介绍yii2 从数据库验证唯一值:唯一验证,包括了yii2 从数据库验证唯一值:唯一验证的使用技巧和注意事项,需要的朋友参考一下 示例 如果输入现有值,某些人会遇到有关无法显示错误消息的问题。例如,我不允许用户使用现有电子邮件进行注册。 视图 控制者 模型            

  • 我有一个用户创建屏幕,它记录了各种用户详细信息以及名字和手机号码。我有一个对应的用户表,其中名字和手机号码构成一个复合唯一键。此表中还定义了其他完整性约束。 当在创建用户屏幕上输入违反此约束的用户数据时,需要向用户显示“用户友好”错误消息。 当这种违反发生时,我从MySQL数据库中得到的异常是: 有两个选项可以显示有意义的消息(例如:“错误:给定手机号码的用户名已存在,请更改其中一个”)。 选项1

  • flyway可以在迁移之前对数据库进行验证检查吗? 场景1 例如:我试图在现有的数据库上执行flyway。我已经在db_users表中插入了一些用户。 但是我的sql脚本有db_users表的create语句和所有用户的插入语句,包括那些已经插入的用户。 我可以在创建表之前做IFNOT_EXISTS检查,但很难在每次插入之前做检查。 情景2 我已经在数据库中迁移了脚本V1、V2和V3。我修改了脚本

  • 我们在确保遵守刚刚生效的新GDPR方面落后了,我目前正在考虑为我们的电子商务网站加密数据库中存储的数据。我意识到加密并不是强制性的,但我认为它更不是一种有用的附加安全性。 我的问题是:在静止状态下加密整个数据库,以及使用我自己的加密存储值,有什么优点/缺点吗?这是你会做的事情,还是你会考虑这些方法中的一种就足以为个人数据提供良好的安全? 我的理论是,在使用PHP脚本存储和检索值时加密这些值,如果有

  • 问题内容: 假设我们有两个实体,A和B。B与A具有多对一关系,如下所示: 现在,我要删除对象,并将删除操作级联到其所有子项。有两种方法可以做到这一点: 添加到OneToMany批注中,让JPA删除所有子项,然后再从数据库中删除A对象。 保持类不变,只需让数据库级联删除操作即可。 使用后面的选项有什么问题吗?这会导致实体管理器保留对已删除对象的引用吗?我之所以选择选项2而不是选项1的原因是,选项1生