GVKun编程网logo

SQL Server 2008:表中的列与现有的主键或唯一约束不匹配(sql表中的列与现有主键或unique约束不匹配)

9

以上就是给各位分享SQLServer2008:表中的列与现有的主键或唯一约束不匹配,其中也会对sql表中的列与现有主键或unique约束不匹配进行解释,同时本文还将给你拓展php-在没有主键或唯一字段

以上就是给各位分享SQL Server 2008:表中的列与现有的主键或唯一约束不匹配,其中也会对sql表中的列与现有主键或unique约束不匹配进行解释,同时本文还将给你拓展php-在没有主键或唯一字段的情况下替换MySQL中的现有记录或创建新记录、SQL Server +复合键或唯一ID、SQL Server 2005 如何创建唯一约束?、SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

SQL Server 2008:表中的列与现有的主键或唯一约束不匹配(sql表中的列与现有主键或unique约束不匹配)

SQL Server 2008:表中的列与现有的主键或唯一约束不匹配(sql表中的列与现有主键或unique约束不匹配)

我需要对SQL Server 2008数据库进行一些更改。

这需要创建一个新表,并在新表中插入一个外键,该外键引用一个已经存在的表的主键。因此,我想在新的tblTwo之间建立关系,该关系引用了tblOne的主键。

但是,当我尝试通过SQL Server Management Studio执行此操作时,出现以下错误:

表’tblOne’中的列与现有的主键或UNIQUE约束不匹配

我不太确定这是什么意思,我想知道是否有解决办法?

答案1

小编典典

这意味着尚未正确声明tblOne中的主键-您需要转到tblOne并将PRIMARY KEY约束添加回去。

如果您确定tblOne确实具有PRIMARY
KEY约束,则您的数据库中可能有多个tblOne表,它们属于不同的模式,并且FK约束中的references子句选择了错误的表。

如果有一个组合键(您的注释将表明该组合键),那么您还必须在外键引用中同时包含这两列。请注意,一个表不能有多个主键-
但是,如果它有一个复合键,您将在属于主键的每一列旁边看到一个键符号。

php-在没有主键或唯一字段的情况下替换MySQL中的现有记录或创建新记录

php-在没有主键或唯一字段的情况下替换MySQL中的现有记录或创建新记录

我正在使用PHP,我需要在MysqL数据库中插入新记录,或者如果存在,则只需对其进行更新.我读了几个答案,他们建议使用REPLACE或INSERT … ON DUPLICATE KEY UPDATE,但是,如果我很好理解,这两个选项都意味着使用唯一字段或主键(唯一).在我的情况下,MysqL表具有类似于以下的值:

Timestamp            | Query1   | Query2   | Result
-------------------------------------------------------- 
2012-10-13 08:15:27  | American | Men      | here result

2012-10-13 08:15:23  | American | Men      | result2

2012-10-13 08:15:27  | American | Women    | other result

2012-10-13 08:15:27  | German   | Men      | here result

因此,由于“ query1”,“ query2”和“ Result”可以具有相同的值,所以我不能具有主键或唯一字段(例如,我可以有多个记录,其中包含“ American”(查询1)和“ Men”(查询2)的字段更多和不同的结果.

目前在PHP中,我正在使用:

INSERT INTO results (Timestamp, Query1, Query2, Result) VALUES ('$current_timestamp', '$nationality', '$gender', '')

只需附加所有记录并创建一个巨大的数据库.但是我要实现的是添加一个新记录,即使整个查询1和查询2的结果都不存在.否则,我只想更新“时间戳”字段.

例如,如果我的PHP脚本生成以下数据:

Timestamp            | Query1   | Query2   | Result
2012-10-13 08:15:23  | American | Men      | result2

并且数据库已经包含“美国人”和“男子”和“结果2”的确切组合,则仅更新了字段“时间戳”.否则,如果组合不同(例如“ American”,“ Men”,“ result3”),则将新记录添加到表中.

预先感谢您的帮助

解决方法:

即使没有像典型的AUTO_INCREMENT整数那样的单个PRIMARY KEY列,如果这三列均是唯一组合,则应将它们定义为复合键.这不仅将保留唯一性,而且还将对它们作为一个单元进行索引.

CREATE TABLE results (
  `Timestamp` DATETIME NOT NULL,
  `Query1` VARCHAR() NOT NULL,
  `Query2` VARCHAR() NOT NULL,
  `Result` VARCHAR() NOT NULL,
  /* Composite key across three columns */
  PRIMARY KEY (`Query1`,`Query2`,`Result`)
);

然后,您可以在插入时使用ON DUPLICATE KEY UPDATE,以中止因违反密钥而插入并更新时间戳.

INSERT INTO results (
   Timestamp, 
   Query1, 
   Query2, 
   Result
) VALUES (
   '$current_timestamp', /* see note below about Now() */
   '$nationality', 
   '$gender',
   ''
) ON DUPLICATE KEY UPDATE `Timestamp` = '$current_timestamp';

注意:我们假设PHP变量已经被正确地转义了.

注意2:如果$current_timestamp的值确实是当前时间戳而不是一些存储的值,我建议使用MysqL的Now()函数,而不要传入PHP变量.

ON DUPLICATE KEY UPDATE `Timestamp` = Now()

VALUES()列表中的$current_timestamp也是如此…

SQL Server +复合键或唯一ID

SQL Server +复合键或唯一ID

我对数据库设计是相当陌生的,对于多对多关系而言,为例如创建复合键和唯一ID的区别和含义是什么?

Country 桌子

CountryIDCountryName

Language 桌子

LanguageIDLangugageName

多对多表格-使用复合:

CountryID  PkeyLanguageID Pkey

或者

使用唯一ID:

AutoID PkeyCountryID LanguageID

答案1

小编典典

组合键:

组合键是多个列的组合,以标识表中的唯一行。复合键可以是主键。

首要的关键

PRIMARY KEY约束唯一地标识数据库表中的每个记录。

所以这一切都取决于您的要求

第一个设计

Many to Many Table:Using composite:CountryID  PkeyLanguageID Pkey

如果您使用此设计,则CountryID和LanguageID是复合主键。即此处

该表的数据将是

CountryId  LaguageID  1           1 //valid  1           2 //valid  1           3 //valid  1           1//not valid data as its form composite primary key

第二个设计中

Using Unique Id:AutoID PkeyCountryID LanguageID

AutoID成为主键,因此这将允许数据

AutoId    CountryId  LaguageID 1          1           1 //valid 2          1           2 //valid 3          1           3 //valid 4          1           1 //valid as AutoID is primary key 1          2           3 // invalid as AutoID is prinary key

希望本演讲能帮助您理解差异

SQL Server 2005 如何创建唯一约束?

SQL Server 2005 如何创建唯一约束?

如何在 SQL Server 2005 中的现有表上创建唯一约束?

我正在寻找 TSQL 以及如何在数据库图中进行操作。

答案1

小编典典

SQL 命令是:

ALTER TABLE <tablename> ADD CONSTRAINT            <constraintname> UNIQUE NONCLUSTERED    (                <columnname>    )

在此处查看完整的语法。

如果您想从数据库图中执行此操作:

  • 右键单击表格并选择“索引/键”
  • 单击添加按钮以添加新索引
  • 在右侧的属性中输入必要的信息:
    • 您想要的列(单击省略号按钮选择)
    • 设置是唯一的
    • 给它一个合适的名字

SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解

SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解

SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解决方法

以前一直使用SQL Server2000,现在跟潮流都这么紧,而且制定要求使用SQL Server2005,就在现在的项目中使用它了。 对于SQL Server 2005,有几个地方是要注意的,比方在还原数据库时,不像2000里边将数据库和文件区分的很细,统一均为文件,这就使还原的数据库文件制定为. bak。那么想还原2000的数据库(备份数据库文件,无后缀名的),就需要自己手工选择。

选择下拉框中的“所有文件”,这时就会显示“备份数据库文件”了,选择-确定

最主要就是要在“选项”中选择“覆盖现有数据库”,否则就会出现“备份集中的数据库备份与现有的数据库”的问题。

今天关于SQL Server 2008:表中的列与现有的主键或唯一约束不匹配sql表中的列与现有主键或unique约束不匹配的讲解已经结束,谢谢您的阅读,如果想了解更多关于php-在没有主键或唯一字段的情况下替换MySQL中的现有记录或创建新记录、SQL Server +复合键或唯一ID、SQL Server 2005 如何创建唯一约束?、SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解的相关知识,请在本站搜索。

本文标签: