数据库管理员

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

8
MySQL-如何检查所有列中的值
我很好奇,有没有办法在所有列中搜索给定值?就我的目的而言,它并不需要太快,这只是一口之类的事情,我真的不需要输入每个字段名称。这正是我现在要做的,但是我认为肯定有更好的方法。 我想转一下: SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val'; 到这个: SELECT * FROM table WHERE * = 'val' ...,甚至更好(尽管我对此表示严重怀疑...) SELECT * FROM table WHERE * like '%val%' 我发现了这个,这似乎不太接近,但是我找不到更接近的东西: SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...) 区别在于,它在指定的值中搜索列的选择,而我正在尝试在单个值中搜索所有列。 但这并不重要,就像我说的多于我只是好奇
11 mysql 


2
何时将nvarchar / nchar与SQL Server 2019一起使用?
在SQL Server 2019中,Microsoft引入了对和数据类型的UTF-8支持,并说:CHARVARCHAR 根据使用的字符集,此功能可以节省大量存储空间。例如,使用启用了UTF-8的排序规则将具有ASCII字符串的现有列数据类型从NCHAR(10)更改为CHAR(10),可将存储需求减少近50%。这种减少是因为NCHAR(10)需要22个字节来存储,而CHAR(10)对于相同的Unicode字符串则需要12个字节。 UTF-8似乎支持每个脚本,因此基本上我们可以开始在varchar和char列中存储Unicode数据。就像文档中所说的那样,这可以减少表和索引的大小,并且由于读取的数据量更少,因此可以得到更好的性能。 我想知道这是不是意味着我们可以停止使用nvarchar和nchar列,它实现UTF-16? 谁能指出一个方案和理由,不使用带UTF编码的char数据类型并继续使用n-chars类型?

1
何时在DynamoDB中使用多个表?
DyanmoDB 最佳实践明确表明: 您应在DynamoDB应用程序中维护尽可能少的表。设计良好的大多数应用程序只需要一张桌子。 我发现这很有趣,因为我所见过的每一个有关DyanmoDB的教程都具有多表设计。 但是,这实际上意味着什么? 让我们考虑一个具有三个主要实体的简单应用程序:用户,项目和文档。一个用户拥有多个项目,一个项目可以有多个文档。我们通常必须在用户的项目和项目的文档上进行查询。读取数量多于写入数量。 天真的教程的表设计将使用三个表: Users Hash key user-id Projects Hash key Global Index project-id user-id Documents Hash key Global Index document-id project-id 我们可以很容易崩溃Project,并Document为一个Documents表: Documents Hash key Sort key Global Index project-id document-id user-id 但是为什么要停在那里?为什么不用一张桌子来统治他们呢?既然User是一切的根源... Users Hash key Sort key user-id aspect --------- --------- foo user email: foo@bar.com …

2
MongoDB在内存不足时终止
我有以下配置: 运行三个Docker容器的主机: MongoDB 雷迪斯 一个使用前两个容器存储数据的程序 Redis和MongoDB都用于存储大量数据。我知道Redis需要将其所有数据保留在RAM中,对此我很好。不幸的是,发生的事情是mongo开始占用大量RAM,并且一旦主机RAM已满(我们在这里谈论32GB),mongo或Redis就会崩溃。 我已阅读以下有关此问题的问题: 限制MongoDB RAM的使用:显然,大多数RAM被WiredTiger缓存用尽 MongoDB限制内存:显然这里的问题是日志数据 限制MongoDB中的RAM内存使用量:在这里,他们建议限制mongo的内存,以便它的缓存/日志/数据使用较少的内存 MongoDB使用了过多的内存:在这里,他们说这是WiredTiger缓存系统,该系统倾向于使用尽可能多的RAM以提供更快的访问速度。他们还说it's completely okay to limit the WiredTiger cache size, since it handles I/O operations pretty efficiently 是否有任何限制mongodb内存使用的选项?:再次缓存,它们也添加MongoDB uses the LRU (Least Recently Used) cache algorithm to determine which "pages" to release, you will find some more information in these …


2
如何使用TSQL动态更改数据库
我在尝试将SSMS的上下文动态更改为动态SQL中指定的数据库时遇到麻烦: EXEC sys.sp_executesql N'USE db1 ' ; 它成功执行,但是SSMS的数据库上下文未更改。 我已经尝试过对上面的内容做一些细微的修改,就像这样 DECLARE @sql NVARCHAR(100) DECLARE @db NVARCHAR(50) SET @db = N'db1' SET @sql = N'Use ' + @db EXEC sp_executesql @sql 再次,它成功执行,但是数据库没有更改。

3
在SSMS结果网格,对象资源管理器和其他窗口上使用深色主题
有几种方法可以在SSMS主编码窗口上使用“深色主题”,即导入vsettings文件,应用在配置文件上禁​​用的深色主题或手动执行。但是所有这些选项都不会影响“网格结果”,“对象资源管理器”和其他窗口。除了编码之一,这两个是我主要使用的。 我尝试了通常的“ 工具”>“选项”>“环境”>“字体和颜色”,然后在“ 显示设置 ”组合框上选择: “选项网格结果”,“ 白色”用于“ 项目前景”,“ 黑色”用于“ 项目背景”。保存并重新启动的SSMS,但仅文本为白色,背景仍为白色。 对正在发生的事情或如何做有任何想法吗?我找不到如何在对象资源管理器中执行此操作。

3
SQL Server插入到-如何识别导致截断错误的列
我有一个存储过程,将650个字段插入表中。插入失败,出现截断错误。 很简单 INSERT INTO SELECT (a bunch of fields) FROM (a bunch of tables) 下面是错误消息: 消息8152,级别16,状态14,过程DSP_Procedure,行1075字符串或二进制数据将被截断。 有没有一种快速的方法可以确定导致截断错误的字段? 要插入到表中的select语句具有650个字段的事实使得很难查明哪个字段导致截断错误。 我在想我可以一次注释掉字段块,以便一次仅将SP插入100个字段,然后在不同的时间运行SP 6或7次,直到我至少可以缩小到100个字段的组将包含导致截断错误的字段。 或者,我在想,也许我只能SELECT INTO新建一个表,然后将表中的数据长度与要插入到SP中的目标表的数据长度进行比较,以查看哪个字段包含的字段长度超出预期的字段长度。 .. 我正在使用SQL Server 2014。 还有更简单的选择吗?


4
如何使用存储过程为日期范围内的每一天创建一行?
我想创建一个存储过程,该过程将在给定日期范围内的每一天在表中创建一行。存储过程接受两个输入-用户所需日期范围的开始日期和结束日期。 因此,假设我有一个像这样的表: SELECT Day, Currency FROM ConversionTable Day是DateTime,而Currency只是一个整数。 为了简单起见,我们总是希望对于每个插入的行,“货币”列为1。因此,如果有人输入“ 2017年3月5日”作为开始日期,并输入“ 2017年4月11日”作为结束日期,我希望创建以下行: 2017-03-05 00:00:00, 1 2017-03-06 00:00:00, 1 ... 2017-04-11 00:00:00, 1 对存储过程进行编码的最佳方法是什么?我在测试环境中使用SQL Server 2008 R2,但实际环境中使用SQL Server 2012,因此,如果2012年引入了新功能,可以简化此任务,则可以升级测试计算机。

2
主数据库已损坏,实例无法启动-我有什么选择?
救命!我的主数据库已损坏,我什至无法使SQL实例联机!我有什么选择来备份服务器? 我确实有master的备份,但是MSDN页面“还原master数据库”要求我以单用户模式启动实例,而我做不到! (注意:我没有针对SQL版本指定这个问题,以便成为更广泛应用的参考。关于DBA.SE也有一些类似的问题,但是没有涉及服务器无法启动的问题。)

2
数据库何时在事务中更新其索引?
我试图了解插入中同时涉及索引和事务的事件顺序。 例如,Oracle文档指出: 如果在加载数据之前创建[或具有]一个或多个索引,则数据库必须在插入每一行时更新每个索引。 但是,如果我创建一个事务,插入五行,然后提交,会发生什么?是否为每个插入或仅在提交点更新索引? 逻辑告诉我,它们只会在提交点进行更新,因为在提交那些记录之前,更新的索引可能无法使用。但这是真的吗? 如果是这样,当我要插入100万行时,为了获得最佳性能,我应该对所有行进行一次大型提交,而不是对10万条记录进行10次事务处理?当然,我意识到,如果第999,999行失败,则存在更大的回滚风险。 抱歉,如果我的术语有点用完。我不是行业DBA。尽管对Oracle和Postgres是我最常使用的数据库,但是我对特定数据库的兴趣不大,与一般数据库无关。我已经搜索了这个主题,但找不到真正的答案。

2
无法在Ubuntu 16.04上启动SQL Server
我在Ubuntu 16.04计算机上安装了SQL Server v.Next公开预览版,并且昨天可以正常工作。但这今天不起作用。 出现以下错误: root @ OraServer:/ var / opt / mssql / log#systemctl状态mssql-server ●mssql-server.service-Microsoft(R)SQL Server(R)数据库引擎 已加载:已加载(/lib/systemd/system/mssql-server.service;已启用;供应商预设:已启用) 活动:自Sun 2016-11-27 13:34:23 IST起处于活动状态(无效)(结果:退出代码);18s前 进程:6368 ExecStart = / opt / mssql / bin / sqlservr(代码=已退出,状态= 1 /失败) 主PID:6368(代码=已退出,状态= 1 /失败) 11月27日13:34:23 OraServer systemd [1]:mssql-server.service:设备进入失败状态。 11月27日13:34:23 OraServer systemd [1]:mssql-server.service:失败,结果为“退出代码”。 11月27日13:34:23 OraServer systemd [1]:mssql-server.service:服务延期超时,计划重新启动。 …

5
如何检查我可以在其上运行查询的数据库服务器上安装了什么数据库引擎?
我想检查可以访问的Datasase服务器上正在运行哪种类型的sql。我只能访问Web界面和表列表。 通过该接口,我可以对列表中存在的表运行查询。 我如何获得有关服务器和服务器运行版本的更多信息。我不知道服务器正在运行的IP或PORT。 我想知道服务器是MySQL,Mircosoft SQL Server,Oracle SQL,Postgre SQL还是其他sql服务器。 我正在谈论的网站就是这个网站: w3schools.com SQL编辑器。 编辑2:尽管某些命令选择sqlite_version()对我有用,但它不起作用。这是响应的屏幕截图。 编辑3:在Chromium浏览器上,命令运行正常。但是,在Firefox浏览器上,该命令无效。 我还提到我正在运行Linux。 您认为可能是在Firefox和Chrome上获得不同结果的原因是什么?

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.