数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

3
MySQL子查询问题
为什么查询 DELETE FROM test WHERE id = ( SELECT id FROM (SELECT * FROM test) temp ORDER BY RAND() LIMIT 1 ); 有时删除1行,有时2行,有时什么都不删除? 如果我以这种形式写: SET @var = ( SELECT id FROM (SELECT * FROM test) temp ORDER BY RAND() LIMIT 1 ); DELETE FROM test WHERE id=@var; 然后正常工作-子查询是否有问题?
16 mysql 

3
为什么导入12 GB的.sql文件需要超过36个小时?
我一直在等待36个小时,以便使用一个简单的type site.sql | mysql命令导入12 GB的.sql文件。我可以看到ibdata1仍然在增长,目前将近40 GB。 考虑到触发器和存储过程位于.sql的末尾,我只认为MySQL应该添加数据和关键索引。 site.sql是使用此命令从另一台服务器生成的: mysqldump -R -e --databases site --add-drop-database --add-create-database --add-drop-table -C --single-transaction --triggers 什么要花这么长时间?
16 mysql  mysql-5  mariadb 

3
如何区分SQL和PL / SQL?
我知道这个问题听起来太愚蠢了,但是我从不理解这部分。 SQL * Plus可与SQL和PL / SQL一起使用。我怎么知道某些代码是SQL还是PL / SQL?如果我的代码具有for循环,那么它不再是SQL吗? PL / SQL是SQL的扩展,使其具有循环,条件等。那么默认情况下,任何SQL代码是PL / SQL代码吗?是不是 SQL和PL / SQL之间是否有界线? 触发该问题的区分黑白SQL和PL / SQL的两个示例: 这两个create table语句有什么区别? /programming/2267386/oracle-11g-varray-of-objects/2267813#2267813

5
当禁用查询缓存时,为什么MySQL线程经常显示“正在释放项目”状态?
当我运行时SHOW PROCESSLIST,通常在“正在释放项目”状态下有大量的INSERT / UPDATE线程。 MySQL手册建议线程处于这种状态的原因至少有一部分涉及查询缓存-大概由于数据更改,它会使缓存的查询无效。 但是,将my query_cache_size设置为0会完全禁用查询缓存。 在这种状态下会有这么多线程还有什么其他原因? 相关表使用InnoDB存储引擎。
16 mysql  innodb 

7
将表移动到另一个SQL2008数据库(包括索引,触发器等)
我需要将一大堆(100多个)大型(数百万行)表从一个SQL2008数据库移动到另一个数据库。 我最初只是使用导入/导出向导,但是所有目标表都缺少主键和外键,索引,约束,触发器等。(标识列也被转换为普通INT,但是我想我只是错过了向导。) 什么是正确的方法? 如果这只是几个表,我将回到源头,编写表定义的脚本(包括所有索引,等等),然后在目标上运行脚本的索引创建部分。但是,有这么多表,这似乎是不切实际的。 如果没有太多数据,我可以使用“创建脚本...”向导来编写包括数据在内的源脚本,但是72m行脚本似乎不是一个好主意!

4
SQL * Plus命令末尾的分号的意义是什么?
有些语句(例如create table,insert into等)最后以分号表示: CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL ) ; 而其他人喜欢 set echo on connect system/manager 也不要使用分号。 这背后的原因是什么?我如何决定自己将分号放在哪里?

2
特殊的Oracle外连接语法案例
我在应该从Oracle外连接语法移植到SQL标准外连接语法的查询中看到了以下内容: SELECT ... FROM A, B, C, D, E WHERE A.A_ID = B.A_ID AND B.B_ID = C.A_ID(+) AND B.B_KEY = C.B_KEY(+) AND C.C_ID = D.C_ID(+) AND B.A_ID = E.A_ID(+) AND B.B_KEY = E.B_KEY(+) AND 'CONSTANT' = C.X_ID(+) 现在,翻译外部联接语法通常是一个机械过程,但是最后一行让我感到困惑。这是什么意思?它有什么作用?
16 oracle  join  syntax 

4
使用SQL在关系数据库中遍历树状数据
有没有一种方法可以遍历SQL中的树数据?我connect by在Oracle中了解,但是在其他SQL实现中还有另一种方法吗?我问是因为使用connect by它比编写循环或递归函数来为每个结果运行查询要容易。 由于某些人似乎对短语“树数据”感到困惑,因此我将进一步解释:我的意思是关于具有parent_id或类似字段的表,其中包含相同表中另一行的主键。 问题来自一个经验,当时我正在以这种方式存储在Oracle数据库中的数据,并且知道connect by在其他DBMS中未实现。如果要使用标准SQL,则必须为每个要使用的父级创建一个新的表别名。这很容易失控。


7
我如何学习成为一名DBA?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 DBA之类的问题:您如何在没有经过“手动”或在职培训的情况下学习成为DBA的技能? 我在数据库工作方面的经验一直是通过MyPHPAdmin或类似的东西使MySQL混乱。没有做大量的深入工作。 上课吗 SQL书?
16 career 

1
SQL Server 2016错误查询计划每周锁定数据库一次
在过去的5周中,大约每天的同一时间(清晨,可能取决于人们开始使用时的用户活动),每周一次,SQL Server 2016(AWS RDS,已镜像)开始超时查询。 所有表上的UPDATE STATISTICS始终会立即对其进行修复。 第一次之后,我让它每晚(而不是每周)更新所有表上的所有统计信息,但是仍然发生(更新统计信息运行后大约8小时,但并非每天运行)。 上一次,我启用了查询存储,以查看是否可以找到具体的查询/查询计划。我想我可以将其缩小到一个: 找到该查询后,我添加了一个推荐索引,该索引在此不常用的查询中丢失了(但它确实涉及很多常用表)。 错误的查询计划正在执行索引扫描(在只有1万行的表上)。不过,其他返回的查询计划(以毫秒为单位)也用于进行相同的扫描。创建新索引后,最新查询计划仅查找。但是,即使没有该索引,也有99%的时间在几毫秒内返回了索引,但是每周要花40秒以上的时间。 超时的坏消息:http : //brentozar.com/pastetheplan/?id=rymaWt56e 以前不会超时的计划:http : //brentozar.com/pastetheplan/?id=HyN7ftcpe 具有新索引的最新计划:http : //brentozar.com/pastetheplan/?id=ryLuGKcag 从2012年迁移到SQL Server 2016之后,这种情况开始发生。 DBCC CHECKDB不返回任何错误。 新索引会解决问题,使其不再选择错误的计划吗? 我应该“强制”现在行之有效的计划吗? 如何确保其他查询/计划不会发生这种情况? 这是更大问题的征兆吗? 我刚刚添加的索引: CREATE NONCLUSTERED INDEX idx_AppointmetnAttendee_AttendeeType ON [dbo].[AppointmentAttendee] ([UserID],[AttendeeType]) CREATE NONCLUSTERED INDEX [idx_appointment_start] ON [dbo].[Appointment] ( [ProjectID] ASC, [Start] ASC ) INCLUDE ( …

4
PostgreSQL:生成的列
PostgreSQL支持生成的列吗?也称为虚拟列。我不是在谈论IDENTITY专栏。 我找不到有关此卓越功能的任何信息,但我知道它在SQL Server以及最新版本的MariaDB和MySQL中都可用。 在SQL:2003标准中提到了该功能,并且在2006年左右的PostgreSQL论坛上进行了一些讨论,但是我对此没有实质性的了解。 关于SO有一些讨论,但是现在讨论已经很久了,所以它可能已经过时了。

1
了解postgresql.conf文件中的“ max_wal_size”和“ min_wal_size”参数默认值
根据文档min_wal_size和max_wal_size参数,默认值为: 对于max_wal_size:The default is 1 GB 对于min_wal_size:The default is 80 MB 然后,从数据库配置中查看以下参数: select name, setting, unit from pg_settings where name in ('min_wal_size', 'max_wal_size') 给出结果: name | setting | unit ---------------------------------- max_wal_size | 64 | min_wal_size | 5 | 我有两个问题: 1)为什么这些值与docs中显示的默认值不匹配?我根本没有更改配置设置。 2)为什么unit这些参数的列为空/ NULL?在这种情况下,什么是64和5值?MB?GB?还是什么? work_mem当一切都清楚后,为什么这不像示例 参数: name | setting | unit ---------------------------------- …

1
如何将长长的PL / pgSQL代码行分成多行?
有没有办法将多行PL / pgSQL代码分割成多行?我的上下文是一个触发函数,在该函数中,我按照以下记录将插入日志记录到表中: INSERT INTO insert_log (log_time, description) VALUES ( now() , 'A description. Made up of 3 semi long sentences. That I want to split, in the code, not in the log table, over 3 lines for readability.' );


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.