编辑:从 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 上?有什么大的缺点吗?是否有任何供应商可以专门选择或避免?
我刚刚将现有的 SQL Server 2008r2 生产数据库导入到 VS 2013 数据库项目中。
我现在遇到了一些错误
Error SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].
Run Code Online (Sandbox Code Playgroud)
我真的不需要我的 VS DB 项目来管理用户,但我担心如果它们不存在,它会在部署时尝试删除它们。
文件本身生成为
CREATE USER [mydbuser] FOR LOGIN [mydbuser];
Run Code Online (Sandbox Code Playgroud)
或者
CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];
Run Code Online (Sandbox Code Playgroud)
错误标记显示它专门用于Login。由于这是一个系统级对象,我可以理解它超出了 db 项目的范围。
我是否更喜欢将它们全部更改为
CREATE USER [mydbuser] WITHOUT LOGIN;
Run Code Online (Sandbox Code Playgroud)
或将CREATE LOGIN子句添加到每个文件的开头?
删除登录引用似乎更简单,而完全删除用户将是最简单的。
我想确保我按照预期的方式使用该工具。将其中任何一个重新发布到生产环境中会不会有任何问题?通过项目添加用户/登录的正确程序是什么?
我安装了 Postgresql 8.4 和 9.1 版。对于任何给定的 Postgresql 命令,如何指定要运行的命令的特定版本?(例如, psql, pg_dump, pg_ctlcluster, pg_restore, ...)
我的问题是想要做一个 pg_dump 以准备从 8.4 升级到 9.1,我想知道我正在运行哪个 pg_dump 版本。
我在 Ubuntu 10.04 Natty 上运行。
我刚刚了解了新的 sp_executesql 存储过程。我喜欢有一种方法可以从 SQL Server 中执行参数化代码。
但是,我想知道在没有任何参数时使用 sp_executesql 存储过程与直接调用 EXEC 之间有什么区别。另外,是否有性能影响?
exec('select * from line_segment')
exec sp_executesql N'select * from line_segment'
Run Code Online (Sandbox Code Playgroud)
另外,2005 年和 2008 年之间是否存在差异,或者它们的处理方式是否相同?
我有一个包含大约 6000 万行的表,我按状态将其划分为 53 个子表。这些表像这样“继承”大表:
CREATE TABLE b2b_ak (LIKE b2b including indexes, CHECK ( state = 'AK') ) INHERITS (b2b8) TABLESPACE B2B;
我的问题是:如果在复制语句完成之前我不在 b2b8 上构建索引,子表是否继承索引?换句话说,我想这样做:
Create b2b8
Create b2b8_ak inherits b2b8
COPY b2b8 FROM bigcsvfile.csv
CREATE INDEX CONCURRENTLY
Run Code Online (Sandbox Code Playgroud)
并让整个事情结果在子表上创建了所有索引。
我是 postgres 的新手,
我在实时服务器上有一个 2000 万行的表 - 我需要删除大部分行但不是全部。我想这样做而不影响访问此表的其他读/写进程(非常频繁)。
我有一种方法可以一次删除大约 100-400K 行块。在每次删除之间,我想让查询休眠 - 以便其他操作可以有机会访问此表。
我有代码,但我相信这个版本,它在查询运行的整个时间(所有睡眠)都锁定表。我怎样才能在进程休眠时真正释放表?谢谢!!
到目前为止我的代码:
CREATE SEQUENCE tmp_sq increment by 1 minvalue 1 maxvalue 53 start with 1;
DO $$
DECLARE
w_counter integer;
BEGIN
w_counter := (SELECT nextval('tmp_sq'));
while w_counter < 53 loop
raise notice 'Value: %', w_counter ;
w_counter := (SELECT nextval('tmp_sq'));
-- this way of breaking up the delete into chunks works for my table because of dates.
delete from table_a where date_part('week',my_date) = w_counter;
raise notice ' …Run Code Online (Sandbox Code Playgroud) 我想在网上商店中创建一个购物车。我有两种设计购物车的方法,但我不知道哪个更好。
解决方案1:创建一个如下表:
以这种方式为每个产品为用户添加新行。
注意UserId 和 ProductId 是唯一的
解决方案2:
使用两个表:购物车,cartItem
这样就为每个用户只在ShoopingcartTable 中创建了一条记录。
你有什么意见?
我正在观看由 Brent Ozar ( https://youtu.be/U_Kle3gKaHc )完成的 7 年前的网络研讨会,并听说当时推荐了几个项目。
它们是否仍在使用/考虑中,还是有更新的东西取代它们?
内联视图允许您从子查询中进行选择,就好像它是不同的表一样:
SELECT
*
FROM /* Selecting from a query instead of table */
(
SELECT
c1
FROM
t1
WHERE
c1 > 0
) a
WHERE
a.c1 < 50;
Run Code Online (Sandbox Code Playgroud)
我已经看到这使用不同的术语来引用:内联视图、WITH 子句、CTE 和派生表。对我来说,它们似乎是同一件事的不同供应商特定语法。
这是一个错误的假设吗?这些之间是否有任何技术/性能差异?