标签: insert

想要知道“UPSERT”操作是否执行了 INSERT 或 UPDATE

我有一个查询,我尝试插入一条记录并准备更新以防记录存在。

问题是我想知道,一旦执行查询,该操作是更新还是插入。

任何想法?

mysql insert update

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

mysql 如何决定是否可以对 MyISAM 表进行并发插入?

对于“并发插入”,MySQL参考手册有如下解释:

MyISAM 存储引擎支持并发插入,以减少给定表的读写器之间的争用:如果 MyISAM 表在数据文件中没有空洞(中间删除了行),则可以执行 INSERT 语句将行添加到最后SELECT 语句从表中读取行的同时。

http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html

假设我们的数据库“并发插入”参数设置为“自动”(1)。
我们有一个有间隙的 MyISAM 表。当我们插入新行并填补这些空白时,表是否“立即”准备好接受未来插入查询的“并发插入”?

或者我们是否需要在表知道没有间隙之前运行“优化”?

mysql myisam insert

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

进程列表将“%”显示为来自触发器的主机

我试图用调用者的主机/IP 填充表中的某个列。我在表上有一个插入触发器,它像这样设置列:

CREATE TRIGGER access_insert_trg BEFORE INSERT ON access
FOR EACH ROW 
set NEW.hostname = (select SUBSTRING_INDEX(host,':',1)
                    from information_schema.processlist 
                    WHERE ID=connection_id())
;
Run Code Online (Sandbox Code Playgroud)

%尽管当我在processlist表上手动运行相同的查询时,我得到了实际的主机名,但我最终还是得到了主机名。我已经检查了该connection_id()值,它是在主机列中processlist具有实际hostname:port值的行的 id 正确。

我无法弄清楚它是如何或为什么被转换为通用%:<port>值的。关于发生了什么以及如何解决它的任何想法?

如果有任何改变,我正在使用 MySQL 5.1.57。

mysql trigger insert

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

INSERT 成功但所有插入的值都变为 NULL

我厌倦了直接从 phpMyAdmin 执行插入,如下所示:

INSERT INTO oracle.PLAYLIST_MUSIC ( TID,
                ID,
                STATUS,
                CREATED_BY,
                CREATED_DATE,
                UPDATED_BY,
                UPDATED_DATE,
                ORDER
            )
VALUES(TID = 56919,
       ID = 115948,
       STATUS = '1',
       CREATED_BY = 15217,
       CREATED_DATE = NOW(),
       UPDATED_BY = 15217,
       UPDATED_DATE = NOW(),
       ORDER = 0)
Run Code Online (Sandbox Code Playgroud)

SQL 成功执行,但是我发现所有插入的值都变成了 NULL,包括系统生成的值,如NOW().

有人有想法吗?

mysql insert

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

如何按行顺序获取缺失值?

在一个表中,许多行已被删除,如何获取下一个缺失行的 id INSERT

例如

id      col1
1       1
3       3
4       4
5       5
8       8
9       9
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得 next 的第一个可用 id 的值INSERT。在这里,我想获取id = 2.

就像是

SELECT id+1 FROM table WHERE CLAUSE // pointing to the least available value
// or x = id +1 (after SELECT)
INSERT INTO table (id, ....) VALUES ('x', ....)
Run Code Online (Sandbox Code Playgroud)

mysql insert select

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

将记录变量中的值插入表中

我正在开发一个带有两个参数的用户定义函数:

create or replace function gesio(
    events_table_in regclass,  
    events_table_out regclass)
returns void as $$ ... $$
Run Code Online (Sandbox Code Playgroud)

events_table_inevents_table_out具有完全相同的架构。

简单解释一下,我遍历 的记录events_table_in,操作记录并希望以events_table_out以下方式追加(插入)操作的记录:

OPEN recCurs FOR execute 
format('SELECT * FROM %s order by session_id, event_time', event_table_in);

LOOP
    FETCH recCurs into rec;
    if not found then
      exit;
    end if;

    -- 1. do something with rec

    -- 2. insert the rec into events_table_out

end loop;
Run Code Online (Sandbox Code Playgroud)

我怎样才能保存recevents_table_out

postgresql insert plpgsql functions record

3
推荐指数
2
解决办法
2万
查看次数

大 INSERT INTO SELECT [..] FROM 逐渐变慢

我编写了一个程序,可以INSERT批量处理 100,000 次并显示其进度

源表包含 2.5GB 的数据:

CREATE TABLE wikt.text (
    old_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    old_text MEDIUMBLOB NOT NULL,
    old_flags TINYBLOB NOT NULL,

    PRIMARY KEY (old_id),
    KEY old_id (old_id)

)   ENGINE=INNODB
    AUTO_INCREMENT=23565544
    DEFAULT CHARSET=binary;

CREATE INDEX old_id ON text (old_id);
Run Code Online (Sandbox Code Playgroud)

这是目标表:

CREATE TABLE domains.dictionary_language (
    text_id     INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    english     TINYINT(1) UNSIGNED NOT NULL,

    PRIMARY KEY (text_id),
    KEY         english (english)

)   ENGINE=INNODB
    AUTO_INCREMENT=23565544;
Run Code Online (Sandbox Code Playgroud)

这是以 100k 为批次运行的查询:

INSERT INTO domains.dictionary_language
    SELECT      old_id,
                IF(old_text LIKE …
Run Code Online (Sandbox Code Playgroud)

mysql performance insert query-performance

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

表 A 触发对表 B 的插入,表 B 触发对表 A 的插入,会发生什么?

假设我有两个表,表 A 和表 B。表 A 有一个插入触发器,可将记录插入表 B。表 B 有一个插入触发器,可将记录插入表 A。在这种情况下会发生什么?这两个触发器是否会一遍又一遍地将记录插入表中,直到数据库填满?这种情况发生的次数有限制吗?

trigger sql-server insert t-sql

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

插入多个查询是否与单个查询花费相同的时间?

我有一个要求,我必须插入很多行。对于插入,我们像这样使用

insert into emp(name,age) values('abc',12);
Run Code Online (Sandbox Code Playgroud)

这将只插入一行。对于插入多行,我们可以多次编写插入查询或编写具有多个值的单个查询。例如

条件 1

insert into emp(name,age) values('abc1',121);
insert into emp(name,age) values('abc2',122);
insert into emp(name,age) values('abc3',12);
Run Code Online (Sandbox Code Playgroud)

条件2

insert into emp(name,age) values('abc',12),('abc2',122),('abc3',12);
Run Code Online (Sandbox Code Playgroud)

我的问题是上面的(条件 1 和条件 2)都需要时间吗?我猜条件 2 比条件 2 花费的时间少。如果我的猜测是真的,那么原因是什么?

performance sql-server insert t-sql sql-server-2012

3
推荐指数
2
解决办法
5151
查看次数

通过连接插入多个值

我有三个表,代表两个实体和一个连接关系。每个实体关系都有一个人工代理键​​,用于代替自然键的外键约束。

CREATE TABLE Person (
person_id SERIAL PRIMARY KEY,
username VARCHAR NOT NULL UNIQUE
);

CREATE TABLE Group (
group_id SERIAL PRIMARY KEY,
group_name VARCHAR NOT NULL UNIQUE
);

CREATE TABLE GroupMember (
person_id INTEGER REFERENCES Person,
group_id INTEGER REFERENCES Group,
PRIMARY KEY (person_id, group_id)
);
Run Code Online (Sandbox Code Playgroud)

我想在关系中插入多个条目GroupMember,但使用关联实体的自然键。类似的东西:

INSERT INTO GroupMember (person_id,group_id)
SELECT person_id,group_id
FROM Person P, Group G, (
('alice','girls'),
('bob','boys'),
('alice','coolkids'),
('bob','coolkids')
) AS X
WHERE P.username = X.1 AND G.group_name = X.2;
Run Code Online (Sandbox Code Playgroud)

显然,上述语法无效,但希望能传达这个想法。有没有办法在 PostgreSQL 中做到这一点?

postgresql join insert

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