小编And*_*y M的帖子

更改外键约束所需的最低权限是多少?

更改外键约束所需的最低权限是多少?

MySQL 5.5.41修复此错误后,我的迁移脚本停止工作:

  • InnoDB 允许创建一个外键,该外键引用了用户没有足够权限的父表。(错误 #18790730)

我收到此错误:

SQLSTATE[42000]:语法错误或访问冲突:1142 REFERENCES 命令拒绝用户 'foo'@'localhost' 用于表 'core.users'(SQL:alter table `user_baz` 添加约束 user_baz_user_id_foreign 外键(`user_id`)引用`core`.`users`(`id`)在更新级联上删除级联)

这意味着我需要修复权限。我需要的最低权限是多少?

mysql

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

从带有标题的 CSV 文件创建表格

我正在寻找一种方法来仅根据指定 CSV 的内容生成新的 MySQL 表。我将使用的 CSV 文件具有以下属性;

  • “|” 定界。
  • 第一行指定列名(标题),也是“|” 定界。
  • 列名和顺序不固定。
  • 列数不固定。
  • 文件很大(100 万行/50 列)。

在 Excel 中,这一切都相当简单,但是在 MySQL 中似乎并非如此(Google 运气不佳)。关于我应该看什么的任何建议?

mysql bulk import csv

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

错误:无法删除文件“”(错误 2:没有这样的文件或目录)

每次使用 pgAdmin III 恢复数据库时,我都会收到以下 pgAdmin III 错误:

错误:无法删除文件“”(错误 2:没有这样的文件或目录)

请参阅pgadmin 日志

我的配置:

x86_64-unknown-linux-gnu 上的 PostgreSQL 9.4.4,由 gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 编译,64 位

Linux 3.19.0-26-generic #28~14.04.1-Ubuntu SMP Wed Aug 12 14:09:17 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

postgresql pgadmin-1.18

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

使用 XPath/XQuery 连接同一 XML 元素的所有值

我有一个这样的 XML 值:

<R>
  <I>A</I>
  <I>B</I>
  <I>C</I>
  ...
</R>
Run Code Online (Sandbox Code Playgroud)

我想连接所有的I值并返回它们作为单个字符串:ABC...

现在我知道我可以分解 XML,将结果聚合回无节点 XML,然后应用于.values('text()[1]', ...)结果:

SELECT
  (
    SELECT
      n.n.value('text()[1]', 'varchar(50)') AS [text()]
    FROM
      @MyXml.nodes('/R/I') AS n (n)
    FOR XML
      PATH (''),
      TYPE
  ).value('text()[1]', 'varchar(50)')
;
Run Code Online (Sandbox Code Playgroud)

但是,我想仅使用 XPath/XQuery 方法来完成所有这些工作,如下所示:

SELECT @MyXml. ? ( ? );
Run Code Online (Sandbox Code Playgroud)

有这样的方法吗?

我在这个方向寻找解决方案的原因是因为我的实际 XML 也包含其他元素,例如:

SELECT
  (
    SELECT
      n.n.value('text()[1]', 'varchar(50)') AS [text()]
    FROM
      @MyXml.nodes('/R/I') AS n (n)
    FOR XML
      PATH (''),
      TYPE
  ).value('text()[1]', 'varchar(50)')
;
Run Code Online (Sandbox Code Playgroud)

而且我希望能够将I值提取为单个字符串,并将J值提取为单个字符串,而不必为每个值使用笨拙的脚本。

xml sql-server xquery sql-server-2014

14
推荐指数
2
解决办法
4111
查看次数

为什么将 SQL Server 安装到驱动器的根目录是不好的做法

例如,当我将 SQL Server 安装到驱动器的根目录时,D:\当我从第三方软件运行数据库部署程序时出现错误。

但是当我将我的 SQL Server 实例D:\SQL\移动到(将它移动到驱动器中的一个文件夹)时,安装就完美无缺了。

我的问题不是关于数据库部署者,而是更多关于 SQL 安装到驱动器根目录时出现问题的原因。这是不好的做法吗?为什么不应该将 SQL Server 安装到驱动器的根目录?

sql-server installation

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

部分覆盖范围谓词的基数估计

目前我正试图弄清楚 SQL Server 如何评估部分覆盖直方图步骤的范围谓词的基数。

在互联网上,在cardinality-estimation-for-and-for-intra-step-statistics-value我遇到了一个类似的问题,Paul White 给出了一个相当有趣的答案。

根据Paul的回答,谓词>=和>的基数估计公式(在这种情况下,我只对至少120的基数估计器模型感兴趣)如下:

对于 >:

Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * (F * (DISTINCT_RANGE_ROWS - 1)))
Run Code Online (Sandbox Code Playgroud)

对于 >=:

Cardinality = EQ_ROWS + (AVG_RANGE_ROWS * ((F * (DISTINCT_RANGE_ROWS - 1)) + 1))
Run Code Online (Sandbox Code Playgroud)

我基于范围谓词使用TransactionDate列和“20140614”和“20140618”之间的日期时间范围测试了这些公式在AdventureWorks2014数据库的[Production].[TransactionHistory]表上的应用。

这个范围的直方图步骤的统计如下:

直方图

根据公式,我计算了以下查询的基数:

SELECT COUNT(1)
FROM [AdventureWorks2014].[Production].[TransactionHistory]
WHERE [TransactionDate] BETWEEN '20140615 00:00:00.000' AND '20140616 00:00:00.000'
Run Code Online (Sandbox Code Playgroud)

使用以下代码进行计算:

  DECLARE @predStart DATETIME =  '20140615 00:00:00.000'
  DECLARE @predEnd DATETIME = '20140616 00:00:00.000'

  DECLARE @stepStart DATETIME = '20140614 00:00:00.000'
  DECLARE @stepEnd …
Run Code Online (Sandbox Code Playgroud)

sql-server query optimization sql-server-2014 cardinality-estimates

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

在不使用触发器的情况下查找在 SQL Server 中触发查询的客户端的身份?

我目前正在使用更改数据捕获 (CDC)来跟踪数据更改,并且我希望跟踪提交进行更改的查询的客户端的主机名和 IP 地址。如果有 5 个不同的客户端通过相同的用户名登录,一个人面临着跟踪这 5 个中哪一个触发了查询的难题。我发现的其他似是而非的解决方案包括使用以下命令更改 CDC 表:

ALTER TABLE cdc.schema_table_CT 
ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME())
Run Code Online (Sandbox Code Playgroud)

但是,这将返回触发查询的服务器的主机名,而不是触发查询的客户端的主机名。

有没有办法解决这个问题?有助于记录客户端的主机名或 IP 地址(或某种其他类型的唯一身份)的东西。我不想使用触发器,因为它会减慢系统速度,而且 CDC 还会生成系统表,因此显然不可能使用触发器。

sql-server audit sql-server-2012 change-data-capture

12
推荐指数
1
解决办法
6927
查看次数

序列正在重用

我有一个序列,可以为系统中的对象生成跟踪编号。它已经运行良好有一段时间了。

上周我们注意到它开始重用值。

似乎发生的是,在晚上的不同时间点,它会回滚到前一天的值。然后它将继续从该点生成值。

所以例如我可以得到这样的东西:

10112
10113
10114
10115
10116
10117
10118
10113
10114
10115
10116
...

在它发生的时间、第一次使用和第二次使用之间的持续时间(少则 10 分钟或几个小时)或回滚的次数(少至 1 次,多至数百次)方面似乎没有任何模式。

我考虑过运行跟踪(并且仍然可能),但我认为序列对象没有被直接修改。我相信这是因为修改日期是几天前的,并且指向我们手动提高值以尝试消除重复项的时间。(从那以后这个问题已经发生了好几次。)

有没有人知道什么可能导致序列回滚和每晚重用值?

更新:回答评论中的几个问题:

  • @@Version

    Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 2012 年 10 月 19 日 13:38:57

  • 创建脚本:

    CREATE SEQUENCE [schemaName].[SequenceName] 
      AS [bigint]
      START WITH 410014104
      INCREMENT BY 1
      MINVALUE 410000000
      MAXVALUE 419999999
      CYCLE 
      CACHE 
    GO
    
    Run Code Online (Sandbox Code Playgroud)
  • 我没有唯一约束(但我打算放一个)。然而,这只会帮助我知道我何时重用了一个值。不是什么导致值重置。我做了一项工作,每 5 分钟就会获得一个新值,然后将其保存。时间和价值跳跃不遵循模式。

  • 我检查了事件日志以查看是否有错误。唯一认为正在发生的是:http : //support.microsoft.com/kb/2793634 我们今天正在应用此修复程序。我不认为这些是相关的,但它可能是。

sql-server sequence sql-server-2012

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

在子查询中使用外部别名

|    payments    |  | transactions |  | transaction_items |
|:--------------:|  |:------------:|  |:-----------------:|
|       id       |  |      id      |  |         id        |
|      date      |  |    number    |  |   transaction_id  |
|     amount     |  |     date     |  |    description    |
| transaction_id |  |      val     |  |       price       |
                                      |      discount     |
                                      |      quantity     |
Run Code Online (Sandbox Code Playgroud)

我正在尝试显示交易付款列表,并在每次付款后显示当前余额。以下是预期结果的示例

| number | DATE(p.date) | total   | paid    | balance | 
| 1355   | 2016-10-31   | 899.00  | 450.00  | 449.00  | 
| 1355   | …
Run Code Online (Sandbox Code Playgroud)

mysql mysql-5.5

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

SQL Server 如何处理缓冲区缓存空间不足的查询数据?

我的问题是 SQL Server 如何处理需要将比可用空间更多的数据量拉入缓冲区缓存的查询?此查询将包含多个连接,因此磁盘上不存在此格式的结果集,它需要编译结果。但即使在编译之后,它仍然需要比缓冲区缓存中的可用空间更多的空间。

我举一个例子。假设您有一个 SQL Server 实例,它有 6GB 的可用缓冲区缓存空间。我运行具有多个连接的查询,读取 7GB 的数据,SQL Server 如何能够响应此请求?它是否将数据临时存储在 tempdb 中?它失败了吗?它是否只从磁盘读取数据并一次编译段?

此外,如果我尝试返回 7GB 的总数据会发生什么,这是否会改变 SQL Server 处理它的方式?

我已经知道有几种方法可以解决这个问题,我只是好奇 SQL Server 在按规定运行时如何在内部处理此请求。

此外,我确信该信息存在于某处,但我一直没有找到它。

sql-server memory database-internals sql-server-2012 buffer-pool

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