我正在努力将数据库系统从PostgreSQL移植到mySQL,但我无法理解这个简单的查询?
PostgreSQL查询如下所示:
query('WITH t as (UPDATE sessions SET expired = now() WHERE id = $1 AND ott = TRUE RETURNING *)' +
'SELECT * FROM users WHERE id = (SELECT user_id FROM t)',
[token], function(err, result) {
if
嗨,我有一长一页的代码,里面有多个if
目前我是这样做的
$result = mysql_query("SELECT * FROM masterip_details WHERE ip_address='$ip_address' AND client_id='$client_id'") or die(mysql_error());
$num_rows = mysql_num_rows($result);
//IF THE RESULT IS MORE THAN 0, THIS MEANS THAT THEY ARE
我正在编写一个postgresql函数来执行一些更新查询。我需要确保是否有任何行受到影响,并相应地返回成功/失败消息。
If(受影响的行数)?则‘更新成功’否则‘更新失败’
如何提高通知的行数??
-- Get count from UPDATE
WITH rows AS (
UPDATE distributors
SET dname = 'JKL Widgets'
WHERE did <= 10
RETURNING 1
)
SELECT count(*) FROM rows;
我有张桌子
CREATE TABLE reward_transactions
(
uid bigint NOT NULL,
reward_type text NOT NULL,
count bigint,
last_update timestamp with time zone DEFAULT now()
)
和一个函数
CREATE FUNCTION store_reward_transaction(bigint, text) returns record
LANGUAGE plpgsql
AS $_$
declare
_record record;
begi
// Copyright (c) 2015, <your name>. All rights reserved. Use of this source code
// is governed by a BSD-style license that can be found in the LICENSE file.
library sql_server_socket_test;
import '../lib/sqlconnection.dart';
import '../lib/table.dart';
import '../lib/s
我希望有一个相当通用的函数,它接受一个INSERT、UPDATE或DELETE,其中可能包含一个RETURNING子句,并返回该结果。一个相当巧妙的例子可能是这样的:
CREATE FUNCTION my_insert(sql_insert TEXT) RETURNS record AS $$
DECLARE
result record;
BEGIN
EXECUTE sql_insert INTO result;
RETURN result;
END;
$$ LANGUAGE plpgsql;
SELECT my_insert('INSERT INTO foo
我目前正在将所有sql查询更新到pdo,在pdo中我将使用prepare语句来防止sql注入攻击。到目前为止一切顺利,我现在只能用pdo来计算行数了。我尝试了以下几点:
$sqlQuery = "SELECT COUNT(*) FROM News";
$STIH = $DBH->query($sqlQuery);
$rows_affected = $STIH->rowCount();
echo($rows_affected); // returning result is 1, it should be 1038
然而,当我使用像这样的旧代码时
$quer
我只是设置了一个SQL存储过程,以便以特定的顺序(从多到次要)返回特定的行:
-- 1st Level -> Query a more detailed object...
SELECT ... WHERE something
-- if a result is find, the SP is returning the correct row.
-- if rowcount = 0 then, the SP is returning an empty row
-- and continues with the next query (less specific than the 1s
我正在尝试创建一个函数,它将返回setof记录。我想使用如下函数:
SELECT city_name FROM set_city(1, 1, 'ExampleName');
我的函数:
CREATE OR REPLACE FUNCTION set_city(_city_id integer, _country_id integer, _city_name varchar)
RETURNS SETOF RECORD
LANGUAGE plpgsql
as $$
DECLARE
result record;
BEGIN
IF EXISTS (SE
我的菜单有以下PHP代码,它可以选择MySQL中的所有链接和名称:
<?php
$url = '';
//select all the top row items
$sql="SELECT * from website_menu where parent_top = '' and parent = '' order by menu_order ASC ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
while($result=mysql_fetch_array($r
只是希望能证实我的观察,并解释一下为什么会发生这种情况。
我有一个职能定义为:
CREATE OR REPLACE FUNCTION "public"."__post_users_id_coin" ("coins" integer, "userid" integer) RETURNS TABLE (id integer) AS '
UPDATE
users
SET
coin = coin + coins
WHERE
userid = users.id
RETURNING
users.id' LANGUAGE
update和insert语句在我单独运行且没有事务的情况下工作...
但是我喜欢在事务中按照给定的顺序执行,并且每次都得到返回值--不管是插入还是更新--我该怎么做呢?
BEGIN;
UPDATE globaldata SET valuetext=(SELECT (CAST(coalesce(valuetext, '0') AS integer) + 1) FROM globaldata WHERE keyname='bb') WHERE keyname='bb' RETURNING valuetext;
INSERT INTO globald
我需要锁定多个行,但只获得一行作为返回的结果,例如锁定用户: 2,4和7,但只获取用户where id = 2的数据。
据我所知,有两种可能的方法:
1)运行两个不同的查询:
-- get user data and lock that row
SELECT some_column FROM users WHERE id = 2 FOR UPDATE INTO my_var;
-- just lock another rows
SELECT some_column FROM users WHERE id IN(4,7) FOR UPDATE;
2)使用一个查询,使用CTE和“假”更新,如下所
给定两个表,A和B: A B
----- -----
id id
high high
low low
bId 我想在表A中查找bId为null的行,根据A中的数据在B中创建一个条目,并更新A中的行以引用新创建的行。我可以创建行,但我在使用对新行的引用更新表A时遇到了问题: begin transaction;
with rows as (
insert into B (high, low)
select high, low
from A a
where a.bId is
我正在使用一个中间表进行更新,以确保不能在不可并发访问的关键表上处理任何其他并发操作。
交易1
BEGIN
UPDATE locktable
/* Do some stuff */
...
COMMIT
并发事务2
BEGIN
Update locktable
/* Do some other stuff */
...
COMMIT
这样,我就可以确定事务1和事务2是原子的。
出于简化和性能原因,我将代码更改为WITH子句语句。我想知道我是否能用同样的方式保证CTE的原子性。
CTE简化示例:
交易1
WITH
lock_op AS (
UPDATE locktable
...
RETUR
这是不起作用的代码:
$query = "SELECT * FROM $table WHERE text_id > '$last_id'"; //SELECT NEW MESSAGES
$result = mysqli_query($connection,$query);
if ($result && mysqli_num_rows($result) > 0)
{
//THIS SHOULD NOT BE RUNNING
}
我在ph
我的职能如下:
CREATE OR REPLACE FUNCTION fn_cleanup_proxies(cleanup_range integer, proxies json)
RETURNS udt_cleanup_count AS $func$
DECLARE result_count udt_cleanup_count;
BEGIN
WITH input_proxies AS (SELECT * FROM json_populate_recordset(null::udt_proxy, proxies)),
old_proxies AS (SELECT p.id, p
现在我有了以下函数:
CREATE OR REPLACE FUNCTION set_city(_city_id bigint, _country_id integer, _lat float, lon float) RETURNS geo_cities LANGUAGE plpgsql as $$
DECLARE
city_coords Geometry := ST_SetSrid(ST_MakePoint(_lon, _lat), 3395);
result record;
BEGIN
IF EXISTS
希望从mysql获取记录到web表单,以便用户可以进行更改和更新。正在从数据库中的不同表中获取记录。
update.js
var express = require('express');
var router = express.Router();
var db = require('./../db');
router.get('/', function(req, res, next) {
db.select('*').from('student').then
如何使用knex.js处理returning数据来自多个表的update语句。例如,如何使用knex.js编写此更新查询?
update notes
set note = 'This is an updated1 note', timestamp = now()
from(select
id,
note,
user_id,
customer_id
from notes
where id = '46' AND user_id = 7) a
left join customers as b on a.c
我正在构建一个FIFO队列,使用postgres和基于apinstein对的答案
问题是,如果我使用一个事务,那么语句如下所示:
begin;
lock table queued_message in exclusive mode;
update
queued_message
set
status='IN_PROGRESS'
where
id in (
select
id
from
queued_message
where
我有一个带有这个方法的HIBERNATE DAOImpl:
public List<Estados> listaEstados() throws DAOException {
List<Estados> lista = getHibernateTemplate().find("SELECT e.id as id,e.nombre as nombre FROM Estados e");
return lista;
}
在运行时,不是绘制id和状态名称,而是显示以下内容:
[[Ljava.lang.Obje
我在尝试重新插入一个查询。(基本上,如果不存在,则插入;如果已经有值,则进行更新)。Postgres: 9.3.5
这是我的桌子:
box=> \d timeranges
Table "ana.timeranges"
Column | Type | Modifiers
--------+------+-----------
value | text |
I只想更新“value”列.(如果条目存在或创建新条目)
我正在按照这个指南编写新的插入查询:
这是我的疑问:
WITH upsert AS (UPDATE timeranges SET value=v
我在下面创建了MySQLi查询函数,它可以很好地处理SELECT查询,并动态地执行所有操作,这样它就可以处理任意大小的结果集,但是当我尝试INSERT INTO时,我会得到消息致命错误:调用布尔值上的成员函数fetch_field()。如果查询成功与否,我希望它返回TRUE或FALSE,用于INSERT INTO、UPDATE等查询。有什么建议吗?
以下是完整的查询函数:
/**
* Querying the database
*
* @param string $query_string The query string to be executed
我有一个PL/SQL表类型的结果集,其中包含文档ids。
我可以在没有问题的情况下循环结果集,但问题是我必须从函数返回一个sys_refcursor,但是我无法将循环中的值收集到游标中。
TYPE table_typ IS TABLE OF DOCUMENT_QUEUE.ENV_ID%TYPE INDEX BY PLS_INTEGER;
FUNCTION GET_DOCS()
RETURN SYS_REFCURSOR
IS
LS_CUR SYS_REFCURSOR;
LR_UPDATED_ROWS table_typ;
BEGIN
UPDATE DOCUMENT_QU
我试着让一个触发器自动更改我的一些数据--一切都好,mysql接受我的触发器,但在那之后,当我试图更新显示错误的数据时
子查询返回多于1行
首先,我的数据库有点大,我在这里复制我选择的限制3
我的扳机是
DELIMITER $$
CREATE TRIGGER test3 AFTER UPDATE ON `coupons_data_result`
BEGIN
DECLARE mac INT default 0;
DECLARE durum INT default 0;
DECLARE ms1 INT default 0;
SET mac =(SELECT match_guess_type_id
INSERT ON CONFLICT仍将增加自动增量。为了避免这种情况,我使用了下面的命令,但是如何在插入后获取pid?
WITH s AS (
SELECT pid FROM area WHERE area_name = 'testarea'
), i AS (
INSERT INTO area (area_name, active, users_pid)
SELECT 'testarea', true, 0
WHERE NOT EXISTS (SELECT 1 FROM s)
RETURNING pid
)
UPDA
我有一个非常长的CTE查询,我在这里缩短了可读性。但是它尝试将状态、县、市、邮政编码和街道插入到自己的表中,然后在属性表中插入用于插入地址的ID。
with tmpstate as (
insert
into
state ....on
conflict ( lower(state_code) ) do
update
set
state_code = excluded.state_code returning id,
state_code ),
tmpcounty as (
insert
into
我有一个查询,在添加后返回其id。
DO
$do$
BEGIN
IF (SELECT COUNT(*) = 0 FROM COMMENTS WHERE PARENT_ID = ''${this.parent_id}') THEN
UPDATE COMMENTS SET HAS_CHILD = TRUE WHERE COMMENT_ID = '${this.parent_id}';
END IF;
INSERT
这里的问题是,当我转到更新代码块时,我不再能够访问子查询中的数据 我尝试了创建临时表和select into from deleted_rows的许多变体,而不是使用子查询作为WITH语句的一部分,但它不喜欢我尝试的任何内容,尤其不喜欢我在初始with子句之后尝试创建表 CREATE OR REPLACE FUNCTION public.aggregate_userviews(
)
RETURNS text
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$BEGIN
WITH delete
我必须用concat()更新表中的字段,并且考虑使用带有update的函数。我也想有一个回滚,如果更新不工作。
我有这个函数,但它只适用于select sql和表“客户端”的第一行。
CREATE OR REPLACE FUNCTION value_concat()
RETURNS record
LANGUAGE plpgsql
AS $function$
DECLARE
rows_affected integer := 0;
query constant text not null := 's
所有语法都是有效的PostgreSQL,它是一个返回字段旧值和新值的UPSERT示例。假设我有一个带foo的桌子(1,A)...(5,E)。
CREATE TEMP TABLE foo
AS
SELECT id, chr(id+64)
FROM generate_series(1,5) AS t(id);
CREATE UNIQUE INDEX ON foo(id);
id | chr
----+-----
1 | A
2 | B
3 | C
4 | D
5 | E
(5 rows)
现在,假设我想要UPSERT 6行。几个碰撞,几个新的行。
SELECT i
我正在使用dblink对远程数据库进行一些数据操作(插入、更新或删除)。具体来说,我使用视图和视图的规则来进行插入、更新或删除。例如:
-- SQL
-- Note: get_remote_db() is a function returning the connection string
CREATE VIEW remote_table AS
SELECT * FROM dblink(get_remote_db(), 'SELECT id, name FROM example_table')
AS rec(id NUMERIC, name VARCHAR);
CREATE
我创建了显示产品列表的表单,以及每个产品的编辑和删除两个链接。
请查看list_recorder.php页面的php代码...
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="xxx"; // Mysql password
$db_name="shopone"; // Database name
$tbl_name="product"; // Table name
// Con