我正在尝试创建一个基于当前年份和月份(2011-09)的名称的表,但MySQL似乎不喜欢这样.
SET @yyyy_mm=Year(NOW())+'-'+Month(NOW());
CREATE TABLE `survey`.`@yyyy_mm` LIKE `survey`.`interim`;
SHOW TABLES IN `survey`;
+-----------+
| interim |
+-----------+
| @yyyy_mm |
+-----------+
Run Code Online (Sandbox Code Playgroud)
如果我CREATE TABLE;没有勾选@yyyy_mm,我会得到一般语法错误.
@yyyy_mm解决了2020.
我试图在mysql中创建一个存储过程,它在每个请求上创建一个新表,从另一个表复制内容并提取所需的数据,最后删除表.存储过程非常大,所以我不能在每次查询后执行EXECUTE,因此我尝试以分号分隔格式一起执行查询.但在最终执行时,我得到错误代码:1064.我尝试的方法是否可行,或者是否有更好的方法.
SET tableName = (SELECT CONCAT("table",(UNIX_TIMESTAMP(NOW()))));
SET @tquery =CONCAT('CREATE TABLE `',tableName,'` (select pt.* from post_table pt join on user u on pt.user_id=u.id where pt.client="client",pt.group="group");');
SET @tquery = CONCAT(@tquery,' SELECT * FROM ',tableName,';');
SET @tquery = CONCAT(@tquery,' DROP TABLE ',tableName,';');
PREPARE stmt FROM @tquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud) 通过编写以下查询
SELECT item_name, YEAR( DATE ) , SUM( item_sold_qty )
FROM item
JOIN sales ON item.id = sales.item_number
GROUP BY YEAR( DATE ) , item_name
ORDER BY item_name
Run Code Online (Sandbox Code Playgroud)
我能够得到以下结果
item_name YEAR( DATE ) SUM( item_sold_qty )
pencil 2011 22
pencil 2012 44
eraser 2012 22
eraser 2011 11
pen 2012 66
pen 2011 33
nib 2012 88
nib 2011 44
Run Code Online (Sandbox Code Playgroud)
相反,我希望以下列方式得到结果
item_name 2011 2012
pencil 22 44
eraser 11 22
pen 33 66
nib 44 88
Run Code Online (Sandbox Code Playgroud)
我不是很擅长sql,并且不知道如何将年份设置为列名.需要帮忙.
注意 ::我的数据库有2个表.销售表的日期列有不同的日期,如2012-03-01,2012-04-02,2011-07-03,等......
我是referencig name,description和user_id列的meta表.未来两次,也许更多(谁知道?).这些列用于计算元资源的ETag.
添加一个有助于计算ETag的列将迫使我将代码更改N次,这很糟糕.
有没有办法让它干并将这些列名存储在别处?因为我想INSERT在执行meta 时也使用这些列名.
IF only = true THEN
-- Calculate ETag on meta fields only
UPDATE meta
SET etag = etag(CONCAT(name, description, user_id))
WHERE id = meta_id;
ELSE
-- Calculate Etag on meta fields and meta customers
BEGIN
DECLARE c_etags VARCHAR(32);
-- Compute c_etags
UPDATE meta
SET etag = etag(CONCAT(etag(name, description, user_id), c_etags))
WHERE id = meta_id;
END;
END IF;
Run Code Online (Sandbox Code Playgroud)
免责声明:这段代码是未经测试的,除了简单的陈述之外,我对MySQL的东西很新.
编辑:etag是MD5MySQL功能.也许这是一个选择:
CREATE PROCEDURE …Run Code Online (Sandbox Code Playgroud) 我有一个Moodle安装,我迁移到另一台服务器,我需要更改几个旧域的引用.
对于搜索所有表,所有字段和所有行的给定数据库,如何在MySQL中替换另一个字符串的字符串?
我不需要更改字段名称,只需更改值.
相关:如何使用mySQL replace()替换多个记录中的字符串?
但标记为答案解决方案意味着我强烈键入表名称,我需要将其解压缩到整个数据库,而不是手动处理运行脚本的每个表N次.
为了修剪生产数据库以便在测试系统中加载,我们删除了许多表中的行.现在这让我们陷入了几个表格,即不再用于任何FK关系的行.我想要实现的就像Java中的垃圾收集.
或者换句话说:如果我在数据库中有M个表.他们中的N个(即大多数但不是全部)具有外键关系.我通过SQL删除了几个高级行(即只有传出的FK关系).这样就只在相关表中留下了行.
有人有SQL存储过程或Java程序找到N个表,然后遵循所有FK关系来删除不再需要的行.
如果发现N表太复杂,我可能会为脚本提供要扫描的表列表,或者最好是要忽略的表的负列表.
另请注意:
A,B,C,...在所有使用行Z.在我的数据库中,我有20个表.
其中一个名为"Connections"的表包含两列"TableName"和"NextHi"
+--------+-------------+
| NextHi | TableName |
+--------+-------------+
| 43 | Page |
+--------+-------------+
| 32 | User |
+--------+-------------+
Run Code Online (Sandbox Code Playgroud)
所以在"TableName"列中是其他表的名称.
彼此表有列"Id"
我需要的是脚本将循环通过数据库中的所有表,前面的表返回一行3列:
所以结果应该是这样的:
+-----------+-------------+-------+
| TableName | NextHi | MaxId |
+-----------+-------------+-------+
| Page | 43 | 435 |
+-----------+-------------+-------+
| User | 32 | 768 |
+-----------+-------------+-------+
Run Code Online (Sandbox Code Playgroud)
我有脚本,它返回给我,但它有每个表的选择,表名称是硬编码的:
(
SELECT
"User" as `TableName`,
`Connections`.`NextHi`,
(SELECT MAX(`Id`) FROM `User`) as `MaxId`
FROM `Connections`
WHERE `Connections`.`TableName` = "User"
)
UNION ALL (
SELECT
"Page" …Run Code Online (Sandbox Code Playgroud) 通常我会在自动增量上有一个名为ID的表字段.这样我可以使用这个字段等订购.
但是我无法控制表的结构,并想知道如何以相反的顺序将结果设置为默认值.
我正在使用
$q = mysql_query("SELECT * FROM ServerChat LIMIT 15");
Run Code Online (Sandbox Code Playgroud)
但是就像我说的那样我没有可以订购的字段,那么有没有办法告诉mysql反转它获得结果的顺序?即最后一行到第一行而不是默认行.
有没有办法从带有$参数的查询中获取可执行查询。实际上它很奇怪,但是我想在数据库中存储可执行查询。没有参数的完整查询($ 1,$ 2,$ 3)
我正在使用node-postgres
pg.connect(conString, function(err, client, done) {
console.log('Executing Insert query');
client.query('insert into tablename(column1,column2,column3) values($1,$2,$3)',["data1","data2","data3"], function(err, result) {
done();
console.log('finished executing Insert query');
});
});
Run Code Online (Sandbox Code Playgroud)
这就是我所需要的
insert into tablename(column1,column2,column3) values("data1","data2","data3")
Run Code Online (Sandbox Code Playgroud)