标签: insert-update

仅更新 ON DUPLICATE KEY UPDATE 的更改值

我有一个复选框列表,这些复选框被分配了值 1 或 0,所有这些都在 $_POST 变量中传递。

我当前的 sql 语句正确插入了所有这些内容,但是当我更改值并再次运行 sql 语句时,它会更新所有项目的“updated_at”列。

有没有办法只更新更改的值,这样就不会更新每个条目的“updated_at”列?id 是我的主键,site_id 是唯一的。

SQL语句:

        $sql = "INSERT INTO admin_sites2 (site_id,created_at,active)
                VALUES ('$key',now(),'$value')
                ON DUPLICATE KEY
                UPDATE active = $value,
                updated_at = now()
               ";
Run Code Online (Sandbox Code Playgroud)

php mysql insert-update sql-update

4
推荐指数
1
解决办法
2822
查看次数

postgres:在冲突插入时更新一行并返回旧值

我需要一个查询来更新表中的一行,但如果 id 不存在,它会插入默认值。它还必须避免线程竞争条件。

我在这里找到了一个应该没问题的答案 /sf/answers/554957021/

使用此查询:

UPDATE tbl x
SET    tbl_id = 24
     , name = 'New Gal'
FROM  (SELECT tbl_id, name FROM tbl WHERE tbl_id = 4 FOR UPDATE) y 
WHERE  x.tbl_id = y.tbl_id
RETURNING y.tbl_id AS old_id, y.name AS old_name, x.tbl_id, x.name;
Run Code Online (Sandbox Code Playgroud)

所以我认为它应该在更新后返回旧值,并且应该防止线程竞争条件。

但是,如果该行不存在,我需要添加一个插入,并且这次还返回插入的值(旧值没有意义,因为它们不存在)。

所以基本上我需要做类似的事情

INSERT INTO tbl 
    (...) VALUES (...) 
    RETURNING ..., ... 
ON CONFLICT DO
UPDATE tbl x
SET    tbl_id = 24
     , name = 'New Gal'
FROM  (SELECT tbl_id, name FROM tbl WHERE tbl_id = …
Run Code Online (Sandbox Code Playgroud)

sql postgresql insert-update race-condition select-for-update

4
推荐指数
1
解决办法
2219
查看次数

UPDATE记录(如果存在); 否则INSERT

我想更新表中可能存在或可能不存在的记录.如果它不在数据库中,那么它将被插入.

为了防止选择我UPDATE首先使用语句并检查affected_rows > 0是否,然后我将此记录插入表中.

我想知道是否有更好的方法来做到这一点?

mysql insert-update

3
推荐指数
1
解决办法
601
查看次数

如何通过iphone项目中的obj c方法改变sqlite数据库中的表

每一个人

我需要在现有表中添加一列,以便如何通过obj c在sqlite数据库中更改表,我使用以下代码以相同的方式将数据插入表中如何编写updata表方法

- (void) InsertRecord {


if(addStmt == nil) {
    const char *sql = "insert into tbl_Users(FirstName,MiddleName) Values(?,?)";
    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
}

sqlite3_bind_text(addStmt, 1, [strFirstName UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(addStmt, 2, [strMiddleName UTF8String], -1, SQLITE_TRANSIENT);
//sqlite3_bind_text(addStmt, 3, [strLogin UTF8String], -3, SQLITE_TRANSIENT);


if(SQLITE_DONE != sqlite3_step(addStmt))
    NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
else
    //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
    //productID = …
Run Code Online (Sandbox Code Playgroud)

sqlite iphone objective-c insert-update

3
推荐指数
1
解决办法
8892
查看次数

Rails迁移在另一个表中创建条目时更新现有记录

我正在尝试为我的Rails应用程序设置Beta Invites.我有一个邀请模型和一个用户模型.

用户有一个invitation_id.我正在验证用户必须有一个invitation_id,它应该是唯一的.我想编写一个迁移,以便我可以更新现有用户以获得invitation_id.

这是我的邀请模型:

# Table name: invitations
#
#  id              :integer         not null, primary key
#  sender_id       :integer
#  recipient_email :string(255)
#  token           :string(255)
#  sent_at         :datetime
#  created_at      :datetime
#  updated_at      :datetime
Run Code Online (Sandbox Code Playgroud)

为了保证唯一性,我将不得不在邀请表中创建记录,并将相应的ID分配给用户记录.

有人可以建议迁移吗?

提前致谢!

sql migration ruby-on-rails insert-update sql-update

3
推荐指数
1
解决办法
4062
查看次数

在SQL Server 2005中插入行后的主键值

在SQL Server 2005中,我使用存储过程将一行插入表中,我想在插入该行后立即获取新的主键值.我使用以下方法来获取插入行后的主键值

Create Proc Sp_Test
@testEmail varchar(20)=null,-- Should be Unique
@testName varchar(20)=null -- Should be Unique
as

begin

insert into tableTest  (testUserEmail,testUserName)values (@testValue,@testName)

select MAX(ID) from tableTest --ID is Primary Key 
Run Code Online (Sandbox Code Playgroud)

- 要么

select ID from tableTest  where  testUserEmail =@testValue and testUserName = @testName
Run Code Online (Sandbox Code Playgroud)

- 要么

select  SCOPE_IDENTITY() as ID

end
Run Code Online (Sandbox Code Playgroud)

请建议我哪种方法更好地执行所描述的任务.

stored-procedures sql-server-2005 primary-key insert-update

3
推荐指数
1
解决办法
9842
查看次数

Yii CActiveForm会自动清理用户输入吗?

我有一个基本的Yii CActiveForm,我用它来收集用户的输入,然后通过默认的Yii ActiveRecord模型[/ edit]插入数据库[edit].像任何人一样,我想确保聪明的用户不会通过其中一个字段删除我的数据库.

问题是:Yii CActiveForm能否在恶意做任何事情之前自动清理输入?我找不到任何关于此的文件.不确定我是否需要花时间或它已经处理好了.

谢谢!

database sanitization insert-update yii

3
推荐指数
1
解决办法
2448
查看次数

PHP MySQL更新不存在的记录

我使用这段php插入/更新mysql db。请在相应行的注释部分中查看我的问题。谢谢。

        //Connecting to your database
        mysql_connect($hostname, $username, $password) OR DIE ("Unable to connect to database! Please try again later.");
        mysql_select_db($dbname);

        arr = array();
        if (strcasecmp($actionIn, 'insert') == 0) {
           $query = "INSERT INTO $usertable (id, fname, lname) VALUES ('$id', '$fname', 'lname'";
           $result = mysql_query($query) or die(mysql_error()); //AT THIS STEP, I would get error message if I insert a duplicated id into table, no following json_encode would not print out, that's what I want.
           if ($result) {
              $arr['inserted'] = 'true'; …
Run Code Online (Sandbox Code Playgroud)

php sql insert-update

3
推荐指数
1
解决办法
4863
查看次数

如何将INSERT ... ON CONFLICT(id)DO UPDATE ...语法与序列ID一起使用?

在postgresql 9.5中,如何使用INSERT ... ON CONFLICT(id)DO UPDATE ...语法与序列ID一起使用?

tbltest包含以下列的表中:

  • tbltest_ID
  • tbltest_Name
  • tbltest_Description

数据库中哪个tbltest_ID序列执行自动递增.

以下适用于更新,例如; 更新ID为4的记录:

INSERT INTO tbltest (
    tbltest_ID,
    tbltest_Name,
    tbltest_Description) 
VALUES 
(4, 'test name','test description')
ON CONFLICT (tbltest_ID) DO UPDATE SET (
    tbltest_Name,
    tbltest_Description) = (
    excluded.tbltest_Name,
    excluded.tbltest_Description) RETURNING *;
Run Code Online (Sandbox Code Playgroud)

但是为了让DB为插入创建序列ID,我需要从语句中删除ID列:

INSERT INTO tbltest (
    tbltest_Name,
    tbltest_Description) 
VALUES 
('test name','test description')
ON CONFLICT (tbltest_ID) DO UPDATE SET (
    tbltest_Name,
    tbltest_Description) = (
    excluded.tbltest_Name,
    excluded.tbltest_Description) RETURNING *;
Run Code Online (Sandbox Code Playgroud)

如果我想更新一些新记录和一些现有记录,这就成了一个问题.好像我删除了ID列,它们都是插入的,如果我把它留在那里,我必须在VALUES数组中为每一行提供一个ID值,当我定义一个ID时,序列(db的自动增量) )不再使用.

如何INSFT ... ON CONFLICT(id)DO UPDATE ...语句spost与序列ID一起使用以插入/更新将包含新记录和现有记录的一组记录?

例如,以下内容不起作用: …

postgresql insert-update postgresql-9.5

3
推荐指数
1
解决办法
1500
查看次数

KnexJS:如何使用当前时间戳插入/更新时间戳字段?

标题基本上都说明了一切.

我主要对更新案例感兴趣.假设我们正在尝试更新具有时间戳字段的记录,并且我们希望将该字段设置为更新记录的时间戳.有没有办法做到这一点?

timestamp insert-update knex.js

3
推荐指数
1
解决办法
4074
查看次数