- CREATE TABLE `tb_file_authorize` (
- `authorize_id` int(11) NOT NULL auto_increment,
- `str_id` int(11) default NULL COMMENT '用户标识',
- `file_id` int(11) default NULL COMMENT '文件标识',
- `right_id` int(11) default NULL COMMENT '权限标识',
- `catalog_id` int(11) default NULL COMMENT '目录标识',
- `catalog_index` varchar(100) character set utf8 collate utf8_bin default NULL COMMENT '目录索引标识',
- `expired_date` varchar(30) default NULL COMMENT '过期时间',
- `limit_times` int(11) default NULL COMMENT '限制次数',
- `open_times` int(11) default NULL COMMENT '已经打开次数',
- `start_date` varchar(30) default NULL COMMENT '开始时间',
- `end_date` varchar(30) default NULL COMMENT '结束时间',
- `grant_user` varchar(30) default NULL,
- PRIMARY KEY (`authorize_id`),
- KEY `file_right_index` (`str_id`,`file_id`),
- UNIQUE KEY `update_or_insert` (`str_id`,`file_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我遇到的问题:
str_id标识用户的唯一标识,fiile_id为文件的唯一标识,此表为中间表str_id,与file_id确定right_id
当该表中存在str_id与file_id的记录时,更新right_id,否则插入一条新的记录,SQL语句如下:
- INSERT into tb_file_authorize(str_id,file_id,right_id,catalog_id,catalog_index)
- values ('35','20','2048','1','1') ON DUPLICATE KEY UPDATE right_id='1024'
此sql的意思判断是否存在str_id为30,file_id为20的记录,存在则更新right_id为1024,否则插入新的记录.
注意:使用该方法,建表的时候要定义 UNIQUE KEY `update_or_insert` (`str_id`,`file_id`),这样才能保证语句能够正常执行。
相关推荐
在MySQL中,有时候我们需要在确保记录不存在的情况下插入新数据,如果记录已经存在,则需要更新已有数据。这种操作通常被称为“Upsert”或者“Insert...On Duplicate Key Update”。MySQL提供了这样的功能,但要注意...
MySQL中的`ON DUPLICATE KEY UPDATE`语句是一个非常实用的功能,它允许你在插入新记录时检查是否存在相同的记录。如果存在,那么就更新已有记录;如果不存在,就插入新的记录。这个特性在处理配置文件或者需要确保...
这条语句将尝试插入新数据,如果表中已经存在 ikey 为 1 的记录,则更新该记录的 icount 字段,如果没有该记录,则直接插入新数据。 需要注意的是,在使用 Replace Into 或 Insert Into … On Duplicate Key Update...
在MySQL中,当我们需要向数据库表中插入新记录时,有时我们希望避免插入已经存在的重复数据。在这种情况下,我们可以利用`IGNORE`关键字配合`INSERT`语句来实现这一功能。`IGNORE`关键字允许我们在尝试插入数据时...
在上述标题和描述中,讨论的是如何在触发器内部中断对记录的插入或更新操作。这里提供了一个具体的例子,通过在触发器中设置错误条件来实现这一目的。 首先,我们创建了两个表:`t_control` 和 `t_bluerosehero`。`...
### 多表连接插入不存在的数据 #### 背景与目的 在数据库管理中,有时我们需要根据现有数据来批量插入新记录,同时确保这些记录在目标表中尚不存在。这种需求常见于数据同步、迁移或者更新操作场景。本文将通过一...
在MySQL数据库操作中,判断记录是否存在是常见的需求,特别是在插入数据前进行检查,避免重复插入。以下是几种常用的方法,以及它们的性能比较和适用场景。 1. **使用COUNT(\*)函数** 这是最直观的方法,通过执行`...
上述命令将读取文件中的数据,对于每一条记录,如果发现其`name`字段的值在`user`表中已存在,那么将首先删除旧记录,然后插入新记录。这样,即使原始文件中有重复记录,最终的`user`表中也不会有重复的`name`值。 ...
在本场景中,我们讨论的问题是如何在存储过程中判断表中的某一列是否存在特定的值,如果不存在则插入新的数据。这通常涉及到数据的完整性与避免冗余。 首先,我们来看一下给出的存储过程代码: ```sql delimiter $...
1.mysql清空表语句后,新插入的语句会ID会以之前存在的序号记录下去,使用truncate命令清除记录,新插入的语句从1开始 示例: mysql> select id from t1; +----+ | id | +----+ | 1 | | 2 | | 3 | +----+ 清空表 ...
如果需要在MySQL中实现记录不存在则insert,不存在则update操作。可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,...
在上面的示例中,我们将 id、keyword、userName 和 userID 四个字段插入到 keywordtable 表中,如果记录已经存在,则更新对应的字段。 需要注意的是,Insert Into 语句要求有主键或唯一键,否则将无法使用 ON ...
本章重点讨论了如何在MySQL中插入、更新和删除数据,这是数据库管理的基础操作。 8.1 插入数据 插入数据是向数据库表中添加新记录的过程。在MySQL中,这通过INSERT语句实现。8.1.1部分解释了为表的所有字段插入...
有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录。两张表的结构不同,需要将其中几个字段对应起来。可以用下面的触发器实现。 表A的触发器: ...
ETL之kettle 增量更新并标识删除的记录 不删除原始数据
4. **NO ACTION**:类似于RESTRICT,但只在删除或更新操作之前检查是否有相关行存在。 5. **SET DEFAULT**:将子表中的外键字段设置为其默认值。 #### 五、示例代码解析 1. **插入数据**: ```sql INSERT INTO ...