标签: alter-table

更改多个表

我在 mssql 2012 中拥有包含 170 多个表的数据库。其中一些包含字段“UserID”、varchar(9) 而另一些则不包含。由于应用程序重新设计,我需要更改数据库中的所有表以检查该字段是否存在,如果存在,我需要将其更改为 varchar(50)。如果没有,那么我需要添加它。

有人可以指出我如何使用某种批处理程序来做到这一点吗?我对 mssql 数据库没有太多经验,因此将不胜感激。

sql-server alter-table sql-server-2012

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

无需停机即可将数据类型从 mediumint 更改为 int

我当前的表MEDIUMINT用于 ID 列“主键自动增量”。当前表记录很快就会达到最大值,mediumint即8388607。既然如此,我需要将类型int更改为或更改为unsigned不停机。

我的设置是 Amazon RDS 上的主从 MySQL 5.6。我有一个主人和四个奴隶。

  • 我试图在从属服务器上将列类型更改为 int ,但它破坏了复制。
  • 记录正在更改,因此无法将表复制到另一个表。
  • 我无法pt-table-sync在 Amazon RDS 上使用同步另一个表,然后在新表上进行更改。

有什么办法可以int不用锁表就改成?

更新:我不确定该属性是签名还是未签名。我无法找到它签署与否的地方。我运行show columns from table,结果如下:

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
|     id         | mediumint(8) | NO   | PRI | NULL    | auto_increment |
Run Code Online (Sandbox Code Playgroud)

mysql replication datatypes alter-table

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

不能改变表

我有一个特定的表,我无法为其添加密钥:

mysql> ALTER TABLE tasks ADD KEY `fruitful_user_count` (`user_id`, `is_fruitful`);
ERROR 1034 (HY000): Incorrect key file for table 'tasks'; try to repair it
Run Code Online (Sandbox Code Playgroud)

谷歌搜索这个问题似乎这个问题通常是配置问题或磁盘空间问题。事实上,这个数据库运行在一个Amazon RDS实例上,这意味着它基本上是一个专用于MySQL的托管服务器,配置非常标准。此外,分配给我们的磁盘只有大约 25% 已满。

考虑到可能虚拟机上的磁盘(我相信由 Xen 提供支持)已满,而不是我分配的磁盘空间,甚至可能不在同一个房间(网络存储)中,我重新启动了 RDS 实例,希望我能得到另一个 VM 上的新实例。然而,这并没有帮助。

我的下一个故障排除步骤应该是什么?

这是表:

mysql> show create table tasks;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tasks | CREATE TABLE `tasks` (
`user_id` char(32) NOT NULL,
`module_id` int(11) NOT NULL DEFAULT '0',
`is_successful` tinyint(1) DEFAULT NULL,
`is_fruitful` tinyint(1) DEFAULT NULL,
`last_run` timestamp …
Run Code Online (Sandbox Code Playgroud)

mysql alter-table errors amazon-rds

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

无法更改 MYSQL 表(陷入无效的默认值循环)

我如何有 2 列的默认值不正确。当我从另一个来源导入数据库时​​,不确定它是如何首先创建的。

现在的问题是,我无法对表进行任何更改,因为 MYSQL 会抱怨:

MySQL 说:“campaign_start_date”的默认值无效

如果我尝试添加一列。

但是当我尝试将DEFAULT VALUEto更改为CURRENT_TIMESTAMPfor 时campaign_start_date,它抱怨campaign_end_date有一个无效的默认值。

所以我陷入了一个循环,不允许我对表进行任何更改。

有没有什么办法解决这一问题?

mysql default-value alter-table

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

将列添加到现有表是不好的做法吗?

相反:在创建新表时获取所有列是否更好?

我正在开发一个新系统,而且新的要求一直在出现。最新的要求是为每个客户添加一个新的标签字段,以便更容易在新旧系统之间关联数据。新系统尚未投入生产,但已经完成了迁移过程的一些测试运行。

目前,删除表并重新运行批量加载仍然可行,但未来如何 - 当系统中有大量实时数据并且出现对新列的需求时:它对例如,要导出数据,重新创建包含所有列的表,然后再次导入数据,而不仅仅是执行 ALTER TABLE ADD 列......?

如果它有任何不同,该解决方案基于 PostgreSQL 9.5,如果它确实有所不同,那么了解哪些 DBMS 或多或少关心会很有趣。

是否在此列上创建索引会影响答案?例如,当设置了唯一约束时。

postgresql database-design alter-table

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

在更新或插入的同时添加可为空的列

在 SQL Server 中,当向具有数百万行的实时 SQL Server 数据库添加允许空值的列时,如果插入或更新与 DDL 更新同时发生,会发生什么情况?

例如:

ALTER TABLE MyTable ADD MyColumn varchar(255) NULL;
Run Code Online (Sandbox Code Playgroud)

sql-server concurrency alter-table ddl

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

这个 ALTER TABLE 语句需要多长时间?

Alter TABLE [XXX] Alter column [YYY] [varchar](max) NULL
Run Code Online (Sandbox Code Playgroud)

认为

  • 有45GB的数据空间和2GB的索引空间;
  • 该表中大约有 300 万行;
  • YYY 列varchar(8000)现在可以更新(可写)。
  • 该表还有大约 30 个其他列。
  • 这台机器上有来自其他数据库和表的大约3000G数据。

一些其他信息:

  • 99.99% 的行在NULLthis 中varchar(8000)
  • Web 应用程序可能每分钟访问该表 5 次;
  • 硬件是企业级的(8 核 CPU 和 256GB RAM)。
  • 这台机器上还有其他的表和数据库,大约3000GB的数据。

相关@@VERSION详情:

Microsoft SQL Server 2014 - 12.0.4422.0 (X64)
企业版(64 位)

sql-server alter-table ddl sql-server-2014

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

SQLServer 为列添加默认值

我正在使用 MS SQL Server。我有一个带有“action_type”列的“action”表,我想为其设置默认值“to do”。我在 MS SQL Studio 中的 DDL 错误!我已经阅读了许多文章,试图找出我做错了什么,但似乎没有任何效果。DDL如下,表CREATE有效,ALTER失败。

CREATE TABLE "action"
( "action" INT IDENTITY(1,1)
, "name" VARCHAR(250) NOT NULL
, "owner" VARCHAR(50)
, "action_type" VARCHAR(50) NOT NULL
, "due_date" DATETIME
, "done_date" DATETIME
, "successful" BIT NOT NULL
, "job" INT
, "contract" INT
, "person" INT
, "description" VARCHAR(MAX)
, "deliverable" VARCHAR(MAX)
, "outcome" VARCHAR(MAX)
, "source" VARCHAR(50)
, "notes" VARCHAR(MAX)
);
ALTER TABLE "action"
ADD CONSTRAINT "df_action_0" DEFAULT "To Do" FOR "action_type";
Run Code Online (Sandbox Code Playgroud)

ALTER 语句返回错误 …

sql-server constraint default-value alter-table

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

更改表添加没有默认块的列

太长了;博士

以下查询在执行时会阻止 postgres 服务器

ALTER TABLE "image_data" ADD COLUMN "user_status" varchar(30) NULL
Run Code Online (Sandbox Code Playgroud)

引擎版本10.6

行数 1.5 mil

你好,

我的生产数据库服务器有一个有点奇怪的问题(我无法在本地服务器上重现)。作为部署过程的一部分,我想添加一个默认值为null的新列。当我运行上述查询(由 dajngo 的迁移过程生成)时,它失败了,并且在此过程中锁定了数据库并阻止了其他查询(非锁定选择)的执行。由于是生产环境,所以几分钟后(大约10分钟)就回滚了。我发现最不寻常的是,相同的查询在我的本地数据库复制(具有与生产完全相同的数据)上执行不到一秒。

编辑:当我运行此事务时,它会阻止所有其他选择查询对数据库的访问 - 我认为(如果我错了,请纠正我)意味着数据库实际上被此事务阻止了。

postgresql alter-table postgresql-10

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

Postgres varchar(100)[] -> text[] 列转换

我需要将列类型从 更改 varchar(100)[]text[]。该表有 > 100M 行和大量写入负载,因此我想避免获取访问排他锁并重写索引。我看到了这个问题,非阵列varchartext改变管理这一点,所以我想知道:做同样与阵列列应用?

文档+邮件列表表示,如果满足以下条件,此更改将很快:

旧类型要么是二进制强制转换为新类型,要么是新类型上的无约束域)

varchar(100)[]to是这种情况text[]吗?

postgresql datatypes alter-table ddl online-operations

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