小编a_h*_*ame的帖子

时间戳字段的无效默认值(mysql 5.7)

编辑:从 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)

mysql mysql-5.7

13
推荐指数
1
解决办法
6万
查看次数

RAM 磁盘上的 SQL Server tempdb?

我们的供应商应用程序数据库是 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 tempdb

13
推荐指数
1
解决办法
1万
查看次数

导入为 VS DB 项目后出现“未解析的用户引用”

我刚刚将现有的 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子句添加到每个文件的开头?

删除登录引用似乎更简单,而完全删除用户将是最简单的。

我想确保我按照预期的方式使用该工具。将其中任何一个重新发布到生产环境中会不会有任何问题?通过项目添加用户/登录的正确程序是什么?

sql-server ssdt database-projects

12
推荐指数
3
解决办法
3万
查看次数

如何运行特定版本(8.4、9.1)的 postgresql pg_* 命令(例如 pg_dump)

我安装了 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 上运行。

postgresql ubuntu

11
推荐指数
2
解决办法
1万
查看次数

没有参数的 EXEC() 和 sp_executesql 之间的区别?

我刚刚了解了新的 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 年之间是否存在差异,或者它们的处理方式是否相同?

sql-server-2005 sql-server-2008 t-sql

10
推荐指数
1
解决办法
1万
查看次数

Postgres 继承分区表的索引

我有一个包含大约 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)

并让整个事情结果在子表上创建了所有索引。

postgresql index copy

10
推荐指数
2
解决办法
8651
查看次数

分块删除活动表上的多行 - 无需锁定太长时间(PostgreSQL 9.3)

我是 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)

postgresql delete plpgsql

10
推荐指数
1
解决办法
8245
查看次数

哪种方式设计购物车表更好 - SQL Server

我想在网上商店中创建一个购物车。我有两种设计购物车的方法,但我不知道哪个更好。

解决方案1:创建一个如下表:

在此处输入图片说明

以这种方式为每个产品为用户添加新行。

注意UserId 和 ProductId 是唯一的

解决方案2:

使用两个表:购物车,cartItem

在此处输入图片说明

这样就为每个用户只在ShoopingcartTable 中创建了一条记录。

你有什么意见?

database-design sql-server

10
推荐指数
1
解决办法
3万
查看次数

这些工具还有效吗?

我正在观看由 Brent Ozar ( https://youtu.be/U_Kle3gKaHc )完成的 7 年前的网络研讨会,并听说当时推荐了几个项目。

  1. SQLDiag 实用程序。
  2. SQLNexus。
  3. PAL 工具。
  4. 数据库优化顾问/向导。
  5. BPA(最佳实践分析器)。
  6. SQL Server 基于策略的管理。

它们是否仍在使用/考虑中,还是有更新的东西取代它们?

tools sql-server

10
推荐指数
2
解决办法
3268
查看次数

内联视图和 WITH 子句之间的区别?

内联视图允许您从子查询中进行选择,就好像它是不同的表一样:

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 和派生表。对我来说,它们似乎是同一件事的不同供应商特定语法。

这是一个错误的假设吗?这些之间是否有任何技术/性能差异?

oracle cte derived-tables

10
推荐指数
2
解决办法
3万
查看次数