【问题标题】:Relational Database - How do you know if data has already been entered into a table?关系数据库 - 您如何知道数据是否已输入到表中?
【发布时间】:2012-09-27 03:19:08
【问题描述】:

实在想不出一个相关的标题:-(

我用 C# 编写了一个记录产品销售的程序。在我的数据库里面有两个表。一个称为“产品”,另一个表称为“客户”。 'Product' 包含 CustomerId(这样我可以连接两个表),而 customer 表包含与客户相关的数据。

我的程序的用户必须输入产品详细信息和客户详细信息。但是我怎么知道一个客户是否已经存在于我的数据库的客户表中呢?我是否必须读出客户表中的所有记录并将它们与新的客户详细信息进行比较?这对我来说似乎有点狡猾。

(需要知道数据是否已经填写,防止重复)

【问题讨论】:

    标签: sql database


    【解决方案1】:

    对不允许重复的表设置一个约束,然后尝试插入数据。如果它已经存在,服务器将不允许插入它并通知您。

    我无法解释它是如何让您知道的,因为您没有提供有关您正在使用的数据库的信息。这通常是引发的异常。

    【讨论】:

    • 是的,您可以将一列(比如用户名)定义为唯一。如果存在重复,sql 将不允许您插入。
    • 你的意思是你使用MySQLphpAdmin?将约束放在您的客户的列上,然后尝试对重复项执行 INSERT,然后查看代码中发生的情况。
    • 那么我将如何使用 phpmyadmin 对其进行约束?
    • 您可以通过更改表并添加约束来实现。请参阅MySQL documentation。我无法告诉你如何在 phpMyAdmin 中进行操作,因为我不使用它。 (这将是一个单独的问题 - “如何使用 PHPMyAdmin 添加唯一约束?”可能是一个不错的标题。)或者您可以在这里搜索并找到 Adding constraints in phpMyAdmin
    【解决方案2】:

    您可以只发出带有适当 where 子句的适当 select 语句来检查是否有行已与数据匹配。

    如果您的客户 ID 不是由数据库本身生成的(即,当您将客户详细信息输入数据库时​​,您会输入该 ID,那么您可以发出如下选择语句:

    SELECT * FROM Customer WHERE CustomerId = <Customer's ID>
    

    但如果客户 ID 是由数据库生成的,您需要更改 where 子句以跨要确保不重复的字段起作用。

    【讨论】:

    • 对表进行约束比在每次 INSERT 之前执行 SELECT 更好。
    • 约束不仅仅是一个更好的主意,它需要进行选择,然后如果您与数据库有多个连接,则插入将不起作用,因为两个连接都可以插入
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多