注意:此问题已更新以反映我们目前正在使用 MySQL,这样做后,我想看看如果我们切换到支持 CTE 的数据库会更容易。
我有一个带有主键id和外键的自引用表parent_id。
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| parent_id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| notes | text | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
给定 a name,如何查询顶级父级?
给定 a name,如何查询id …
从多个连接创建表以用于分析时,何时首选使用视图而不是创建新表?
我更喜欢使用视图的一个原因是我们的管理员在 Ruby 中开发了数据库模式,而我对 Ruby 并不熟悉。我可以请求创建表,但需要一个额外的步骤,我希望在开发/测试新连接时有更大的灵活性。
我开始使用关于 SO 相关问题的答案的视图(何时使用 R,何时使用 SQL)。得票最多的答案开始于“在 SQL 中进行数据操作,直到数据位于单个表中,然后在 R 中进行其余的操作”。
我已经开始使用视图,但我遇到了一些视图问题:
视图是否适合这种用途?如果是这样,我应该期待性能损失吗?有没有办法加快对视图的查询?
背景
我想提供重现select查询所需的数据库子集。我的目标是使我的计算工作流程可重复(如可重复研究)。
题
有没有办法可以将这个 select 语句合并到一个脚本中,该脚本将查询的数据转储到一个新数据库中,这样数据库就可以安装在新的 mysql 服务器上,并且该语句可以与新数据库一起使用。除了查询中已使用的记录外,新数据库不应包含其他记录。
更新: 为了澄清起见,我对查询结果的 csv 转储不感兴趣。我需要能够做的是转储数据库子集,以便它可以安装在另一台机器上,然后查询本身可以重现(并且可以针对相同的数据集进行修改)。
例子
例如,我的分析可能会查询需要来自多个(在本例中为 3 个)表中的记录的数据子集:
select table1.id, table1.level, table2.name, table2.level
from table1 join table2 on table1.id = table2.table1_id
join table3 on table3.id = table2.table3_id
where table3.name in ('fee', 'fi', 'fo', 'fum');
Run Code Online (Sandbox Code Playgroud) 是否有一个需要 > 2 秒的简单查询,以便我可以测试慢查询记录器?
我正在寻找类似通用递归或迭代语句的东西。
我的桌面上的主目录中有一个 .my.cnf 文件,其中包括:
[dbid]
user = myusername
password = mypassword
database = dbname
host = server.location.com
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,在从 Ubuntu 10.04 升级到 11.04 之前,我能够使用命令
mysql dbid
Run Code Online (Sandbox Code Playgroud)
直接连接到数据库
但是今天我收到了这个错误:
ERROR 1049 (42000): Unknown database 'dbname'
Run Code Online (Sandbox Code Playgroud)
我做错了什么吗?
我正在为公元 1000 年之前扩展的记录创建一个数据库,但 MySQL 日期和日期时间字段仅支持从 1000 开始的日期。
有没有比使用 bigint 类型使用 Unix 时间戳计算 1/1/1970 之前/之后的秒数或切换到支持更大日期范围的数据库软件更方便的方法?
更新表中多行的最简单方法是什么?我有一个如下所示的 csv 文件:
|primary_key |value|
| 1 | xyz|
| 2 | abc|
| 3 | def|
...
Run Code Online (Sandbox Code Playgroud)
目标表中已存在具有这些主键的行
我想用这些值更新目标表。是否有语法,以便我可以编写如下内容:
update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3);
Run Code Online (Sandbox Code Playgroud)
查看MySQL 更新参考、本站点(MySQL-csv 更新)、SO(更新多行、多个数据库更新、更新多行),我怀疑答案是“否”,但我想确认这一点是真的。
我正在使用 Postgres 数据库,并且有一个带有日期时间字段的表。对于许多记录,我们知道年份但不知道日期。有时我们知道日期但不知道年份。其他时候我们知道时间但不知道日期。
使用日期时间数据类型时如何存储部分日期信息?
从大型(~5GB)数据库 mysqldump 文件恢复单个表的最佳方法是什么?
更新: 我找到了使用命令行工具解析表的解决方案(在下面发布),但是有没有办法用 mysqlimport 来做到这一点?
mysql ×8
mysqldump ×2
backup ×1
date ×1
date-format ×1
datetime ×1
hierarchy ×1
join ×1
optimization ×1
performance ×1
postgresql ×1
replace ×1
select ×1
slow-log ×1
timestamp ×1
update ×1
view ×1