我正在学习SQL,而且我的情况是,只有当数据库不存在时才必须将值插入数据库。
我的tableview结构是这样的:
+----------+-----------+-----+-----+
| first_id | second_id | timestamp |
+----------+-----------+-----------+
我想仅在不同first_id
和second_id
的情况下插入,例如,如果在表格中有first_id 1
和second_id 2
并且我再次添加它,我会不想再添加了。因此,如果first_id和second_id行已经有值1和2,那么请不要添加,但如果first_id
为3且second_id
为1,那么我将允许插入。
这是我的查询ATM:
INSERT INTO `testtable`.`ids` (`first_id`, `second_id`) VALUES (:first_id, :second_id)
就像这样,我尝试使用NOT EXISTS
,但它无效:
NOT EXISTS (SELECT first_id, second_id FROM `testtable`.`ids` WHERE first_id = : first_id AND second_id = : second_id) INSERT INTO `testtable`.`ids` (`first_id `, `second_id `) VALUES (: first_id, : second_id)
最后提到的查询给了我语法错误,但是一旦我得到完整性违规,它就告诉我检查文档。
我正在使用PHP ->query("");
函数执行查询。
我试着像IF NOT EXISTS
和NOT EXISTS
那样做,但那些没有用。我该怎么做呢?
答案 0 :(得分:4)
这很简单。将first_id
和second_id
声明为composite key
。我不希望在您的PHP代码中进行任何更改,但会使您的数据库结构变得多样化,以便它不会接受任何重复的值,无论您如何插入它。
CREATE TABLE `demo` (
`first_id` smallint(6) DEFAULT NULL,
`second_id` smallint(6) DEFAULT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `first_id` (`first_id`,`second_id`)
)
现在first_id
和second_id
永远不会接受重复的值。
^表包含值(1,2)。现在插入(1,3)。
^表接受(1,3)。现在再次插入(1,2)。
insert语句抛出错误。现在,表永远不会接受键的重复值(first_id,second_id)。
如果该表已存在且您没有从头开始创建,只需执行:
alter table `table_name` add unique key (first_id, second_id);
这将阻止此后的重复值。
答案 1 :(得分:1)
如果您使用的是PHP和MySql,可以试试这个:
<?php
//Added database connection code here
$first_id = $_POST['first_id '];
$second_id = $_POST['second_id '];
$sql = "select * from ids where first_id = ".$first_id ." and second_id ='".$second_id."'" ;
$result = $mysqli->query($sql);
$row = $result->fetch_row();
if($row[0]) {
$mysqli->close();
} else {
//preapare an insert statement
$stmt = $mysqli->prepare(" INSERT INTO `ids` (first_id, second_id) VALUES (?,?)");
$stmt->bind_param("ii", $first_id, $second_id);
//execute the statement
if( $stmt->execute() ) {
unset($first_id);
unset($second_id);
} else {
echo $mysqli->error;
}
//close statement
$stmt->close();
$mysqli->close();
}
?>
答案 2 :(得分:0)
检查第一个和第二个id是否存在,并为第一个和第二个id声明2个sql变量,并根据需要设置它们。
DECLARE @Exists int; @first_id int; @second_id int;
SET @first_id = 1;
SET @second_id = 2;
SELECT @Exists = COUNT(*) FROM [testtable] where [first_id] = @first_id and [second_id] = @second_id;
如果匹配记录的数量为0,则插入条件:
IF(@Exists = 0)
BEGIN
INSERT INTO [testtable](first_id, second_id)
VALUES(@first_id,@second_id)
END