是否有一个或一行命令来修改数据库中的所有表。我想在数据库中的每个表中发出此命令:
ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)
我的目标是将字符集从 latin1 修改为 utf8 到所有表。
更新: RDBMS 是 MySQL
我想创建一个存储过程,它将在给定日期范围内的每一天在表中创建一行。存储过程接受两个输入 - 用户所需日期范围的开始日期和结束日期。
所以,假设我有一张像这样的表:
SELECT Day, Currency
FROM ConversionTable
Run Code Online (Sandbox Code Playgroud)
Day 是一个 DateTime,而 Currency 只是一个整数。
为简单起见,假设我始终希望这些插入的行的 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
Run Code Online (Sandbox Code Playgroud)
对存储过程进行编码以执行此操作的最佳方法是什么?我在我的测试环境中使用 SQL Server 2008 R2,但我们的真实环境使用 SQL Server 2012,因此如果 2012 年引入的新功能使此任务更容易,我可以升级我的测试机器。
我发现MySQL 提供的特权列表有点让人不知所措。我不确定谁应该拥有什么特权。在我看来,我的情况有三个典型的用户:
root developer applicationroot是不言自明的。对于developer此用户需要能够轻松访问任何数据库,对其进行调整等。对于初学者,我将此用户设置为此权限集:
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON
Run Code Online (Sandbox Code Playgroud)
application有一个更有限的集合。它应该仅限于操作特定的数据库。
我不确定要授予哪些合理的特权。授予开发人员和应用程序的合理权限集是什么?为什么?
考虑到非聚簇索引是基于聚簇索引的,非聚簇索引是否有必要列出聚簇索引中包含的任何列?
换句话说,如果 Products 表包含 ProductID 上的聚集索引,那么在创建非聚集索引时建议包含 ProductID 列时,是否有必要将其添加为列?
如果没有,是否有将列名添加到非聚集索引的情况?
我在 Oracle 中创建了一些新用户。但是,在运行sqlplus时,它们都需要完全限定查询中的表名。为这些新用户设置默认架构的最佳方法是什么?
有一个表“上下文”。有一个自动增量 ID“context_id”。我正在使用序列来检索下一个值。
SELECT nextval('context_context_id_seq')
Run Code Online (Sandbox Code Playgroud)
结果是:1, 2, 3,...20....
但是“上下文”表中有 24780 行
如何获得下一个值 (24781)?
我需要在 INSERT 语句中使用它
information_schema.role_table_grants当我public在grantee专栏中看到时我正在看,然后我检查了information_schema.enabled_roles但是这个role_name不存在。
=> 谁或什么public角色?
编辑:从 mysql 5.6 更新现有数据库并执行时:
UPDATE phppos_register_log SET shift_end = '2015-01-01 00:00:00' WHERE shift_end = '0000-00-00 00:00:00';
这产生:
#1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'shift_end' at row 1
#1067 - Invalid default value for 'shift_start'
Run Code Online (Sandbox Code Playgroud)
这在 mysql <=5.7 中有效。我找不到任何关于此的文档......这有什么问题?
CREATE TABLE `phppos_register_log` (
`register_log_id` int(10) NOT NULL AUTO_INCREMENT,
`employee_id_open` int(10) NOT NULL,
`employee_id_close` int(11) DEFAULT NULL,
`register_id` int(11) DEFAULT NULL,
`shift_start` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`shift_end` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`open_amount` decimal(23,10) NOT NULL, …Run Code Online (Sandbox Code Playgroud) 我们的供应商应用程序数据库是 TempDB 密集型的。
该服务器是虚拟的 (VMWare),具有 40 个内核和 768GB RAM,运行 SQL 2012 Enterprise SP3。
包括 TempDB 在内的所有数据库都位于 SAN 中的第 1 层 SSD 上。我们有 10 个 tempdb 数据文件,每个文件都预先增长到 1GB 并且它们永远不会自动增长。与 70GB 日志文件相同。跟踪标志 1117 和 1118 已经设置。
sys.dm_io_virtual_file_stats 显示过去一个月对 tempdb 数据和日志文件的读取/写入超过 50 TB,累计 io_stall 为 250 小时或 10 天。
在过去的 2 年中,我们已经调整了供应商的代码和 SP。
现在,我们正在考虑将 tempdb 文件放在 RAM 驱动器上,因为我们有大量内存。由于 tempdb 在服务器重新启动时被破坏/重新创建,因此它是放置在易失性内存中的理想候选者,该内存在服务器重新启动时也会被刷新。
我已经在较低的环境中对此进行了测试,它导致查询时间更快,但 CPU 使用率增加,因为 CPU 正在做更多的工作,而不是等待缓慢的 tempdb 驱动器。
有没有其他人将他们的 tempdb 放在高 oltp 生产系统的 RAM 上?有什么大的缺点吗?是否有任何供应商可以专门选择或避免?
有几种方法可以在 SSMS 主编码窗口上使用深色主题,可以导入 vsettings 文件、应用在配置文件中禁用的深色主题或手动执行。但所有这些选项都不会影响网格结果、对象资源管理器和其他窗口。除了编码之外,这两个是我使用的主要方法。
我尝试了通常的Tools>Options>Environment>Fonts and Colors然后在组合框中选择Show settings for: the option Grid Results and using White for Item Foreground and Black for Item Background。保存,重新启动 SSMS 但只有文本是白色的,背景仍然是白色的。
关于正在发生的事情或如何做的任何想法?我找不到如何为对象资源管理器执行此操作。
mysql ×3
postgresql ×2
sql-server ×2
alter-table ×1
datetime ×1
insert ×1
metadata ×1
mysql-5.7 ×1
oracle ×1
permissions ×1
role ×1
security ×1
select ×1
sqlplus ×1
ssms ×1
t-sql ×1
tempdb ×1