以上就是给各位分享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约束不匹配)
- php-在没有主键或唯一字段的情况下替换MySQL中的现有记录或创建新记录
- SQL Server +复合键或唯一ID
- SQL Server 2005 如何创建唯一约束?
- SQL Server 2005“备份集中的数据库备份与现有的数据库不同”解
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数据库中插入新记录,或者如果存在,则只需对其进行更新.我读了几个答案,他们建议使用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
我对数据库设计是相当陌生的,对于多对多关系而言,为例如创建复合键和唯一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 中的现有表上创建唯一约束?
我正在寻找 TSQL 以及如何在数据库图中进行操作。
答案1
小编典典SQL 命令是:
ALTER TABLE <tablename> ADD CONSTRAINT <constraintname> UNIQUE NONCLUSTERED ( <columnname> )
在此处查看完整的语法。
如果您想从数据库图中执行此操作:
- 右键单击表格并选择“索引/键”
- 单击添加按钮以添加新索引
- 在右侧的属性中输入必要的信息:
- 您想要的列(单击省略号按钮选择)
- 设置是唯一的
- 给它一个合适的名字
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“备份集中的数据库备份与现有的数据库不同”解的相关知识,请在本站搜索。
本文标签: