数据库管理员

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

1
MySQL InnoDB死锁,用于2个简单的插入查询
对于这两个插入查询,我有一个死锁: insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.596', 180, 4, 181, 561) insert into PlayerClub (modifiedBy, timeCreated, currentClubId, endingLevelPosition, nextClubId, account_id) values (0, '2014-12-23 15:47:11.611', 180, 4, 181, 563) 这是InnoDB状态: ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2014-12-23 15:47:11 1f4c *** (1) TRANSACTION: TRANSACTION 19896526, ACTIVE …
10 mysql  innodb  deadlock 

3
如何使用PLPGSQL确定当前search_path中是否存在表?
我正在为一个应用程序编写安装脚本,该脚本是另一个应用程序的附件,因此我想检查另一个应用程序的表是否存在。如果没有,我想给用户一个有用的错误。但是,我不知道哪种模式将保存表格。 DO LANGUAGE plpgsql $$ BEGIN PERFORM 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = current_setting('search_path') AND c.relname = 'foo' AND c.relkind = 'r'; -- not sure if I actually need this or not... IF NOT FOUND THEN RAISE 'This application depends on tables …

1
将数据加载到临时表中时获得最少的日志记录
即使在阅读了《数据加载性能指南》之后,我仍然不确定是否有必要将TABLOCK表提示添加到一个空的临时表中,该临时表由一个聚集索引定义,以便获得最少的日志记录。 显然,临时表是在TempDB中创建的,该表以SIMPLE恢复模式运行,因此我本以为它是最小化日志记录的理想选择,但是我找不到找到该表的方法。 临时表是否可以作为最少日志记录的候选表?如果这样,是否值得为永久表推荐添加TABLOCK提示?

2
子查询中ORDER BY的数据库实现
我正在使用包装SQL语句的应用程序(MapServer- http ://mapserver.org/ ),以便ORDER BY语句位于内部查询中。例如 SELECT * FROM ( SELECT ID, GEOM, Name FROM t ORDER BY Name ) as tbl 该应用程序具有许多不同的数据库驱动程序。我主要使用MS SQL Server驱动程序和SQL Server2008。如果在子查询中找到ORDER BY,则会引发错误。 从MS Docs(尽管这是针对SQL Server 2000的,但似乎仍然适用): 在视图,内联函数,派生表或子查询中使用ORDER BY子句时,它不能保证输出有序。而是,ORDER BY子句仅用于保证由Top运算符生成的结果集具有一致的组成。ORDER BY子句仅在最外层的SELECT语句中指定有序结果集时才保证。 但是,在Postgres(9)中运行的相同类型的查询和Oracle返回结果-子查询中定义的顺序。在Postgres中,查询计划显示结果已排序,并且Postgres发行说明中包括暗示使用子查询顺序的项目: 子查询ORDER BY匹配较高查询时避免排序 http://en.wikipedia.org/wiki/Order_by指出: 尽管某些数据库系统允许在子选择或视图定义中指定ORDER BY子句,但该显示不起作用。 但是从我自己查询计划的检查: SQL Server 2008不支持子查询中的ORDER BY Postgres 9确实在子查询中支持ORDER BY Oracle 10g在子查询中支持ORDER …

2
需要通过Sql Server 2008 R2中的数据库邮件发送格式化的HTML电子邮件
我的要求是将自动电子邮件创建为(一种通过数据库邮件格式化的HTML电子邮件)。基本要求已完成,在该条件下,当触发作业时,它将数据插入到表格中,并且已计划将信息作为电子邮件发送,但现在客户已要求使用这种格式。 我已经完成的当前格式 PO Date:2014-11-26 PO ID:PO1 SAP Ref:0001106102 GRN:1067 DealerID:045 Dealer Name:ABC(Pvt)Ltd. 2 Status:New 客户要求的格式,如表格格式 PO Date |PO ID| SAP Ref| GRN|DealerID|Dealer Name|Status 这是我用于将数据插入到Email_Table(_ERROR_MAIL)中的SQL查询,需要根据要求进行查询 IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ImpCancelledGRN') BEGIN DROP PROCEDURE [dbo].[ImpCancelledGRN] END GO CREATE PROCEDURE [dbo].[ImpCancelledGRN] WITH ENCRYPTION AS …


1
PostgreSQL:从视图中删除列
我VIEW正在尝试为其创建演化脚本的位置,因此可以在其中添加一列。那部分工作正常;列添加就好了。但是,相反的方法无效。删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题在于,这个特定的视图有很多引用,包括从和到的引用,因此,我不能只是DROP CASCADE一个令人毛骨悚然的东西! 为什么无法从给定中删除新添加的列VIEW?然后,我该怎么做才能完成此任务? (注意:这里是实际情况,但在许多其他情况下,我也很可能会看到类似的情况,也就是从视图中删除列。)

3
对billions-rows-table的查询变慢//使用的索引
由于我是一名年轻的开发人员,并且不太熟练使用数据库(PostgreSQL 9.3),因此我在一个项目中遇到了一些问题,我确实需要帮助。 我的项目是关于从设备(最多1000台或更多设备)收集数据的,其中每台设备每秒发送一个数据块,每小时大约发送300万行。 目前,我有一张大表,用于存储每个设备的传入数据: CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) 由于数据块可以(或不能)包含多种数据类型,因此还有其他表引用该data_block表。 CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id ON dataA (data_block_id DESC); ... 一个data_block中可能有3x dataA,1x dataB但没有dataC。 数据将保留几周,因此该表中将有约50亿行。目前,表中有约6亿行,而我的查询要花很长时间。因此,我决定在timestamp和上建立索引mac,因为我的select语句总是随时间查询,通常也随时间+ mac查询。 CREATE INDEX …

2
在PostgreSQL中通过“ psycopg2”进行的事务是按游标还是按连接进行的?
我正在使用psycopg2数据库API 对PostgreSQL 9.3进行一些工作。 我将数据库API设置为最低隔离级别(“自动提交”模式),并且正在直接通过SQL管理自己的事务。例: cur = self.conn.cursor() cur.execute("BEGIN;") cur.execute("SELECT dbId, downloadPath, fileName, tags FROM {tableName} WHERE dlState=%s".format(tableName=self.tableName), (2, )) ret = cur.fetchall() cur.execute("COMMIT;") 基本上,是由该事务启动的事务cur.execute("BEGIN;")仅限于该游标,还是整个连接(self.conn.cursor())? 我正在做的一些更复杂的事情涉及多个单独的数据库操作,这些操作我从逻辑上分解为功能。因为所有这些都在具有作为成员的连接的类中,所以在每个函数中创建游标要方便得多。但是,我不确定在事务中创建游标的工作方式。 基本上,如果事务是按连接的,我可以在事务中即时创建大量游标。如果它们是每个光标,那意味着我必须在各处传递光标。哪有 文档没有涉及到这一点,尽管您可以打电话的事实connection.commit()使我相当有信心事务控制是针对每个连接的。
10 postgresql 

1
SQL Server中的“强制加密”与“强制协议加密”
我试图了解不同的设置如何影响服务器-客户端通信的行为。在服务器上,我安装了带有签发的交换证书的自签名CA,该证书也已配置为由我的SQL服务使用。 首先,我希望看到在客户端上尚未安装根CA时此连接失败。但是无论我做什么,它似乎仍然可以工作。 为了更好地理解原因,我试图列出所有选项以及它们应产生的效果。但是我不确定我是否理解正确... 谁能帮我纠正和填写这里遗漏的部分吗? 在SQL Server上启用“ 强制加密 ”设置时: 实际上,这与Encrypt=True;TrustServerCertificate=True;我的连接字符串中的设置相同。客户端对于是否应使用加密以及服务器是否受信任没有发言权。 此选项可用于加密单个服务实例。 支持不带CA的自签名交换证书。 在SQL Server上启用“ 强制协议加密 ”设置时: 与服务器上所有服务的所有客户端连接均已加密。 需要由客户端和服务器上都可用的受信任CA颁发的交换证书。 在客户端上使用“ 强制协议加密 ”设置时: 该单个客户端将强制使用SSL,并且需要由该计算机上可用的受信任CA颁发的交换证书。没有它,该连接将失败。 在服务器和客户端上启用“ 强制协议加密 ”设置时: 不建议这样做。但为什么?会发生什么,什么会失败? 在服务器上同时启用“ 强制加密 ”和“ 强制协议加密 ”时: 这将产生什么?启用强制协议加密时,将什么设置为强制加密有关系吗?

4
显示表名+ mysql innodb数据库中每个表的记录数
如何列出当前数据库中的所有表以及表的行数。 换句话说,您能想到在mysql中提出类似查询的查询吗? +------------------------++------------------------+ | Tables_in_database | Number of rows | +------------------------++------------------------+ | database 1 | 1000 | | database 2 | 1500 | +------------------------++------------------------+ 欢迎使用不同的方法。
10 mysql  innodb  select  count 

2
Transact-SQL中的对称差异运算?
我一直都知道UNIONSQL中的运算符,但是直到最近才发现还有其他集合运算符,INTERSECT和EXCEPT。我还没有找到执行第四个大集合运算符的运算符,即对称差(例如的反函数INTERSECT)。 看起来我可以通过使用类似的东西来获得所需的输出 SELECT Field FROM A UNION SELECT Field FROM B EXCEPT SELECT Field FROM A INTERSECT SELECT Field FROM B (假设我的优先级正确),或通过执行反全联接: SELECT A.Field, B.Field FROM A FULL JOIN B ON B.Id = A.Id WHERE B.Id IS NULL OR A.Id IS NULL 但是,这两个查询看起来都很密集,特别是与其他三个基本集合操作相比。SQL中是否存在对称差异操作,而我只是在文档中找不到它?还是有在T-SQL中实现“规范”的方式?
10 sql-server  t-sql 

3
从.ibd,.frm和mysqllogbin文件还原MySQL表
由于某种原因,当我尝试打开存储在其中的表.frm和.ibd文件(无论是在MySQL还是phpmyadmin上)时,它给了我一个语法错误,或者说它不存在。 我读过另一篇与此有类似问题的文章,但是我不知道如何检查是否innodb_file_per_table已启用,并且总体上我真的很困惑。我还将mysql-bin.000002文件的副本转换为txt文件,因此我发现数据库中的数据并未完全丢失。 该数据库是去年创建的。我有6个mysql-bin.00000文件,但由于某种原因,.000002它是最大的。现在,我拥有所有数据库的.ibd和.frm文件,但是对于如何将其还原回MySQL或至少还原为我可以读取的内容,我感到困惑。 我在Windows 2003 Server上使用WampServer 2.4和MySQL 5.6.12。另外,我应该在InnoDB中下载插件吗?

3
mysqldump --single-transaction,但是更新查询正在等待备份
如果我使用mysqldump --single-transaction,根据文档,它应该使用读锁刷新表以获取一致的状态,然后启动事务,并且没有编写者在等待。 但是,昨晚我遇到了以下情况: 摘录自show full processlist: 数百个... Command: Query Time: 291 State: Waiting for table flush Info: insert into db_external_notification..... 然后这个: Command: Query Time: 1204 State: Sending data Info: SELECT /*!40001 SQL_NO_CACHE */ * FROM `db_external_notification` 其余线程处于睡眠状态 有谁知道这些插入物还在等什么?我没有看到任何FLUSH表或DDL或手册中提到的任何可能导致查询等待的内容。 完整的mysqldump命令 mysqldump --quick --add-drop-table --single-transaction --master-data=2 -uxx -pxx dbname 我想--quick在这里是多余的,可能是以前的遗留物,这个脚本很旧,但也不会给您带来任何伤害

1
MySQL排序规则utf8_unicode的差异
但是我一直在阅读MySQL排序规则的重要性,到目前为止,我所学到的关于兼容性和准确性的知识似乎是这四个最好的选择。 utf8_unicode_ci utf8_unicode_520_ci utf8mb4_unicode_ci utf8mb4_unicode_520_ci 根据我的理解,uft8mb4对于具有多语言(字符)支持的字符(例如日语)会很有帮助。uf8仅支持3个字节,而uf8mb4支持4个字节。因此,听起来似乎显而易见的选择是uf8mb4,但要注意的是您有长度限制(该死!我也想吃我的蛋糕),这有点担心(我认为)。 然后考虑520标准。从我几乎找不到的东西中可以找到更多。但这当然是问题,我对此几乎找不到。只有那个人说这是一种进步,但是对此却非常含糊。 我确实希望能以尽可能少的限制获得最大的收获。。。我想这里的人可能知道一两件事。官方的MySQL网站没有我希望的那样丰富。 在这四个中,哪个将提供最大的兼容性,准确性和最大的存储长度?502标准之间真正的最大区别是什么?
10 mysql 

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.