AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[alter-table](dba)

Martin Hope
ogirginc
Asked: 2022-05-13 03:14:43 +0800 CST

添加新列时使用不为空的默认值是否安全?

  • 3

我们有一个由 Postgresql v11.4提供支持的 Rails 应用程序,我想在其中添加一个具有默认值和非空约束的新列,如下所示:

ALTER TABLE "blogs" ADD "published" boolean DEFAULT FALSE NOT NULL

我知道添加具有默认值的新列是安全的。但是,与 结合使用它仍然安全NOT NULL吗?还是会锁定数据库?谢谢!

postgresql alter-table
  • 1 个回答
  • 2156 Views
Martin Hope
ankit.vishen
Asked: 2022-02-22 23:03:34 +0800 CST

在生产数据库上添加新列期间Mysql重复输入错误

  • 0

我有一个包含 95929357 条记录的 MySQL 表,下面是相同的表模式

CREATE TABLE `Friends` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `createdTime` datetime DEFAULT NULL,
  `friendUserId` bigint(20) DEFAULT NULL,
  `friendshipStatus` int(11) DEFAULT NULL,
  `remarks` varchar(255) DEFAULT NULL,
  `updatedTime` datetime DEFAULT NULL,
  `userId` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `userId` (`userId`,`friendUserId`),
  KEY `createdTime` (`createdTime`)
) ENGINE=InnoDB AUTO_INCREMENT=1321597934 DEFAULT CHARSET=latin1

我有两个问题要问

问题1# 如果只有95929357条记录,AUTO_INCREMENT怎么增加到1321597934(注意-条目是由默认值为0的代码插入的)。我还注意到,id 存在差距(exp- 从 id 50001124 到新的 id 50001393)

| 50001122 | 2021-09-19 03:33:06 |    116176872 |                0 | NULL    | 2021-09-19 03:33:06 | 103802246 |
| 50001123 | 2021-09-19 03:33:06 |    114361519 |                0 | NULL    | 2021-09-19 03:33:06 | 116176872 |
| 50001124 | 2021-09-19 03:33:06 |    116176872 |                0 | NULL    | 2021-09-19 03:33:06 | 114361519 |
| 50001393 | 2021-09-19 03:33:07 |    109233877 |                0 | NULL    | 2021-09-19 03:33:07 | 125715813 |
| 50001394 | 2021-09-19 03:33:07 |    125715813 |                0 | NULL    | 2021-09-19 03:33:07 | 109233877 |
| 50001395 | 2021-09-19 03:33:07 |    105588884 |                0 | NULL    | 2021-09-19 03:33:07 | 125715813 |
| 50001396 | 2021-09-19 03:33:07 |    125715813 |                0 | NULL    | 2021-09-19 03:33:07 | 105588884 |
| 50001397 | 2021-09-19 03:33:07 |    106198652 |                0 | NULL    | 2021-09-19 03:33:07 | 125715813 |
| 50001398 | 2021-09-19 03:33:07 |    125715813 |                0 | NULL    | 2021-09-19 03:33:07 | 106198652 |

问题 2# 我正在尝试使用以下命令添加新列

ALTER TABLE Friends ADD COLUMN source INT(11) DEFAULT '0';

但是在表更改时低于错误

ERROR 1062 (23000): Duplicate entry '126750770-127846472' for key 'userId'

更新 -

选择上述键的结果

mysql> select * from Friends where userId = 126750770 AND friendUserId = 127846472;
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| id         | createdTime         | friendUserId | friendshipStatus | remarks | updatedTime         | userId    | source |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| 1120753287 | 2022-01-27 12:36:12 |    127846472 |                0 | NULL    | 2022-01-27 12:36:12 | 126750770 |      0 |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
1 row in set (0.00 sec)

mysql> select * from Friends where userId = 127846472 AND friendUserId = 126750770;
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| id         | createdTime         | friendUserId | friendshipStatus | remarks | updatedTime         | userId    | source |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
| 1120753288 | 2022-01-27 12:36:12 |    126750770 |                0 | NULL    | 2022-01-27 12:36:12 | 127846472 |      0 |
+------------+---------------------+--------------+------------------+---------+---------------------+-----------+--------+
1 row in set (0.00 sec)
mysql alter-table
  • 1 个回答
  • 333 Views
Martin Hope
Tran Triet
Asked: 2021-09-17 02:05:26 +0800 CST

Postgresql解释alter table add column不起作用

  • 1

我正在使用 Postgresql 12 (AWS RDS) 和 pgAdmin4。

虽然以下语句有效

explain select * from table "Commands";

下一个

explain alter table "Commands" drop column "test";

给出这个错误

LINE 1: explain alter table "Commands" drop column "test";
                ^
SQL state: 42601
Character: 9

我确保语句alter table "Commands" drop column "test"本身可以成功运行,所以这不是该语句的问题。

不explain适用alter还是我错过了什么?

postgresql alter-table
  • 2 个回答
  • 608 Views
Martin Hope
Life after Guest
Asked: 2021-08-30 02:22:03 +0800 CST

更改 mysql 数据库列导致另一列中的错误

  • 1

如果这个问题听起来太基本,首先对不起大家。

我有一个 Wordpress 数据库和一个表wp_comments。

在此表中,我有两个DATETIME字段,其默认值为0000-00-00 00:00:00.

我需要将此值更改为CURRENT_TIMESTAMP,因此例如我运行以下查询:

ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

因此,comment_date(NOT comment_date_gmt) 是要修改的列。

现在,当我运行此查询时,我收到以下错误:

Error 1067: Invalid default value for comment_date_gmt

为什么会这样?我能做什么?

[更新]

这是表格:

CREATE TABLE `wp_comments` (
  `comment_ID` bigint(20) UNSIGNED NOT NULL,
  `comment_post_ID` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `comment_author` tinytext NOT NULL,
  `comment_author_email` varchar(100) NOT NULL DEFAULT '',
  `comment_author_url` varchar(200) NOT NULL DEFAULT '',
  `comment_author_IP` varchar(100) NOT NULL DEFAULT '',
  `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `comment_content` text NOT NULL,
  `comment_karma` int(11) NOT NULL DEFAULT '0',
  `comment_approved` varchar(20) NOT NULL DEFAULT '1',
  `comment_agent` varchar(255) NOT NULL DEFAULT '',
  `comment_type` varchar(20) NOT NULL DEFAULT 'comment',
  `comment_parent` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `user_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `wp_comments`
  ADD PRIMARY KEY (`comment_ID`),
  ADD KEY `comment_post_ID` (`comment_post_ID`),
  ADD KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`),
  ADD KEY `comment_date_gmt` (`comment_date_gmt`),
  ADD KEY `comment_parent` (`comment_parent`),
  ADD KEY `comment_author_email` (`comment_author_email`(10));

MySQL 版本是 5.7.33

[更新]

我不知道为什么,但我知道我是如何解决这个问题的:

ALTER TABLE `wp_comments` MODIFY `comment_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFY `comment_date_gmt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

这样,通过同时修改两个字段,我不会出错。

它有效,但我仍然很好奇,所以如果有任何想法分享...... :-)

mysql alter-table
  • 1 个回答
  • 30 Views
Martin Hope
Titiksha
Asked: 2021-07-23 02:37:18 +0800 CST

如何重命名由 mysql 中的数学函数创建的列名?使用 ALTER TABLE 给出错误:1064 (42000)

  • 1

输入:

CREATE TABLE dist
-> SELECT ST_DISTANCE(POINT(x1,y1),POINT(x2,y2))
-> FROM config;

输出:

+------------------------------------------+
| ST_DISTANCE(POINT(x1,y1) , POINT(x2,y2)) |
+------------------------------------------+
|                        140.0071426749364 |
|                       139.30183056945089 |
|                        138.6001443000692 |
|                       137.90213921473443 |
|                       137.20787149431334 |
+------------------------------------------+

重命名列输入

> ALTER TABLE dist
-> RENAME COLUMN ST_DISTANCE(POINT(x1,y1),POINT(x2,y2)) TO Values;

错误:1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '(POINT(x1,y1),POINT(x2,y2)) TO Values' 附近使用正确的语法

mysql alter-table
  • 2 个回答
  • 250 Views
Martin Hope
LaVache
Asked: 2021-06-26 18:53:19 +0800 CST

将 postgres GENERATED 列转换为常规非生成列(在没有 DROP 的情况下到位)

  • 2

我正在使用 postgres 13.3,并且我已经有一个现有的表,其中有一GENERATED列,例如:

CREATE TABLE test_table (
    id uuid NOT NULL DEFAULT uuid_generate_v4(),
    the_column_to_alter bool NOT NULL GENERATED ALWAYS AS (2 > 1) STORED,
    CONSTRAINT test_table2_pkey PRIMARY KEY (id)
);

但我现在改变了主意,我希望这只是一个常规的非生成列,我可以手动编辑......

  • 但我想避免不得不DROP重新创建列
  • 我想保留目前已经在列中的现有值

这可能吗?对列执行此操作的ALTER查询是什么the_column_to_alter?

postgresql alter-table
  • 1 个回答
  • 1020 Views
Martin Hope
Dirk Boer
Asked: 2021-04-10 19:57:27 +0800 CST

为什么不能向 SQL Server 中的现有列添加标识?

  • 1

身份列有什么特别之处?

我很确定有一个正当的理由,但我试图更好地理解 SQL。

那么,一个身份列有什么特别之处,以至于回想起来不能轻易添加呢?

为什么每次插入新行时,这不仅仅是一个单一的 int/bigint 标志?

每行是否有任何物理存储的东西,这是一个困难的过程?

sql-server alter-table
  • 5 个回答
  • 466 Views
Martin Hope
DaleJV
Asked: 2020-09-02 22:53:08 +0800 CST

如何更改已经制作好的表(sql developer)的存储参数?

  • 0

总结问题 我已经得到了 6 个已经创建的表,并被告知要更改这些表的存储参数。我遇到的问题是我只能更改 pctfree、pctused、initrans 和 max trans 而不能更改其他(initial、next、pctincrease 和 maxextents)

提供详细信息和任何研究

我做了很多研究,但其中一些根本不适用于 sql developer。虽然其他人确实有效,但仅针对 4 个存储参数进行了说明。

在适当的时候,描述你尝试过的东西

alter table CUSTOMERS
pctused 20 pctfree 80;

这对这两个非常有效,但我无法添加其他的。从我在网上找到的内容来看,这实际上是唯一对我有用的东西。

我感谢所有输入!

oracle alter-table
  • 1 个回答
  • 359 Views
Martin Hope
DBA Greg14
Asked: 2020-08-27 22:28:50 +0800 CST

alter table alter column 导致大量日志和数据文件增长

  • 0

我有一个包含 2.6B 行的表,我需要将一列从 Char(1) 更改为 Varchar(64)。该表超过 300GB,有几个索引。该列可以为空,所以我正在运行的事务是:

ALTER TABLE XXXX ALTER COLUMN YYYYY varchar(64) NULL

我知道这是一个记录操作,所以我将事务日志的大小预先设置为 300GB,认为这已经足够了,尤其是每 5 分钟备份一次日志以允许日志空间重用。由于驱动器空间问题,在我不得不取消交易之前,交易日志增长到 812GB。

我还经历了数据文件 USED 大小的大幅增加,我不知道为什么会这样。使用的数据文件大小正好在 200GB 左右(在这个数据库中完成的事务非常少,所以我知道增加来自这个 alter table 命令)。

我有一些问题:

  1. 为什么只是从 char(1) 更改为 varchar(64) 时数据文件会增加?我的印象是,这不应该改变存储的数据量,除非自 varchar 以来实际需要该空间。由于 char(1) 是现有数据类型,所有现有值要么为空,要么为 1 字节,无需扩展现有数据。
  2. 在试图弄清楚如何更好地做到这一点时,我从 Aaron Bertrand 那里得到了这个答案,它似乎也适用于我的情况。这会是完成这项任务的更好方法吗?
  3. 该数据库位于 2 节点同步提交 AG 中,我注意到 redo_queue_size 超过 130GB,这意味着主数据库发送日志数据的速度比辅助数据库应用它们的速度更快。这意味着当日志备份完成时,主节点上的日志无法截断。这是这样的正常行为吗?alter column 语句是否作为一个大事务处理?如果是这样,那将解释为什么日志不断增长。
transaction-log alter-table
  • 1 个回答
  • 204 Views
Martin Hope
viniciustr
Asked: 2020-06-13 10:36:58 +0800 CST

由于“隐藏”统计信息,Alter 列失败

  • 0

我正在尝试将列数据类型从更改datetime2为datetimeoffset. 我有数据库所有者权限。

每当我运行查询时:

alter table dbo.<my-table>
alter column [TimeStamp] datetimeoffset

我收到以下错误消息:

统计信息“Stat_a41cbd7f968a4cba86199c960f6f7c3a”取决于列“TimeStamp”。

ALTER TABLE ALTER COLUMN 时间戳失败,因为一个或多个对象访问此列。

但是,我的表中似乎不存在此统计信息“Stat_a41cbd7f968a4cba86199c960f6f7c3a” sys.stats,这很奇怪。

是否有任何其他位置可以定义?

sys.stats编辑:名为“Stat_a41cbd7f968a4cba86199c960f6f7c3a”的条目中没有一个条目。此外,除了自动统计之外,我从未定义过任何自定义统计。

sql-server alter-table
  • 1 个回答
  • 726 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve