当我尝试像这样重命名 CamelCase 列时:
ALTER TABLE mytable RENAME COLUMN camelCaseColumn TO camel_case_column;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: column "camelcasecolumn" does not exist
Run Code Online (Sandbox Code Playgroud)
用单引号将 CamelCase 列名称括起来,如下所示:
ALTER TABLE mytable RENAME COLUMN 'camelCaseColumn' TO camel_case_column;
Run Code Online (Sandbox Code Playgroud)
给我一个语法错误。
有什么办法可以重命名该列吗?或者我必须创建一个新表并传输数据?
数据库在 Ubuntu 上运行,我使用 Mac OS X ssh 到运行数据库的服务器以发出命令ALTER TABLE。我知道 Mac OS X 不区分大小写,所以这可能是问题的一部分吗?
谢谢!
我使用的是 MySQL 5.6 版,并且我有一个总大小约为 110 GB 的数据库。其中一张表“输出”的大小为 49 GB。我尝试使用以下命令向输出表添加一个简单的 BOOL 列
ALTER TABLE outputs add spent BOOL;
Run Code Online (Sandbox Code Playgroud)
该查询花了 6 天零 9 小时才完成。没有添加索引,因为它是只有两个可能值的列。有谁知道为什么这个相对简单的查询会花费这么长时间?仅供参考,输出表有一个主键列和另外两个已索引的列。它共有 9 列。如果需要有关我的 mysql 配置的更多信息,我可以编辑这篇文章,但我需要知道哪些参数很重要。
在设置使用随机 UUID 作为主键的数据库的脚本中,我有:
CREATE TABLE alpha (id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), value INT);
CREATE TABLE beta (aref UUID REFERENCES alpha (id));
INSERT INTO alpha (value) VALUES (42);
Run Code Online (Sandbox Code Playgroud)
然后通过外键,让“alpha”中的记录成为插入“beta”表的默认目标:
DO $$
DECLARE l_id UUID;
BEGIN
SELECT alpha.id FROM alpha INTO l_id;
ALTER TABLE beta ALTER COLUMN aref SET DEFAULT l_id;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ERROR: column "l_id" does not exist CONTEXT: SQL statement "ALTER TABLE beta ALTER COLUMN aref SET DEFAULT l_id" PL/pgSQL function inline_code_block line 1 at SQL statement …
我知道在某些情况下,通过 SSMS 的 GUI 对表进行某些更改(例如,更改列的类型)将导致表被删除并重新创建。
我的问题是,对于导致这种行为的具体变化是否存在完整的定义?通过运行而不是使用 SSMS GUI 是否可以始终避免这种行为ALTER TABLE(如果不能,哪些可以避免,哪些不能)?
我有一个列(名为RequestDate),我需要将其从 更改NULL为NOT NULL,但是该列上有一个聚集索引,因此我首先需要删除该索引。
最初,索引是使用以下方法创建的:
CREATE CLUSTERED INDEX IX_RequestDate
ON [MyDB].[dbo].[MyTable] (RequestDate);
Run Code Online (Sandbox Code Playgroud)
为了放弃它,我执行了:
Drop Index IX_RequestDate On [MyDB].[dbo].[MyTable]
Run Code Online (Sandbox Code Playgroud)
然后尝试使用以下方法更改列无效性:
ALTER TABLE [MyDB].[dbo].[MyTable] ALTER COLUMN [RequestDate] DATETIME NOT NULL
Run Code Online (Sandbox Code Playgroud)
但是得到了一个错误:
对象“MyTable”依赖于“RequestDate”列。
然后我MyTable使用这个查询列出了的索引,并且索引仍然存在,尽管现在它没有名称并且它的类型是HEAP(最初CLUSTERED):
TableName IndexName IndexType ColumnOrdinal ColumnName ColumnType
MyTable NULL HEAP 0 RequestDate datetime
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
请注意,此表没有任何限制。
我使用的是 SQL Server 2014、OS Windows Server 2012 R2,以下是SCRIPT TABLE AS -> CREATE TO(我更改了一些列名)的输出:
CREATE TABLE [dbo].[MyTable]( …Run Code Online (Sandbox Code Playgroud) 我使用的是 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)
);
Run Code Online (Sandbox Code Playgroud)
但我现在改变了主意,我希望它只是一个常规的非生成列,我可以手动编辑......
DROP创建该列这可能吗?ALTER对列执行此操作的查询是什么the_column_to_alter?
似乎将列从 更改为timestamp without time zone会timestamp with time zone根据语句时的当前会话时区转换现有数据alter。
请参阅此示例,每个语句后显示输出
\ncreate table tztest (col1 timestamp without time zone);\n\nset timezone = 'UTC';\ninsert into tztest (col1) values ('2023-02-01 10:10:10');\nselect col1 as t1, extract(epoch FROM col1) from tztest;\n-- \xe2\x86\x92 2023-02-01 10:10:10 1675246210\n\nset timezone = 'America/New_York';\nalter table tztest alter column col1 type timestamp with time zone;\nselect col1 as t2, extract(epoch FROM col1) from tztest;\n-- \xe2\x86\x92 2023-02-01 10:10:10-05 1675264210\n\nset timezone = 'UTC';\nselect col1 as t3, extract(epoch FROM col1) …Run Code Online (Sandbox Code Playgroud) 我有一张表,我总是通过订购一列来获取数据。就我而言,我按 订购datenum。但是,由于排序,选择是如此缓慢。
是否可以在datenum. 此列被定义为唯一的。如果定义为索引,选择会更快吗?
在 Oracle(也可能在其他地方)中,执行 ALTER TABLE 语句将对当前事务进行隐式提交。
我们有一个工具(用 Java 编写)应该通过以下方式修改模式:
编写的工具将向用户显示当前模式布局并允许他对其进行修改。(基本上是向某些表添加或删除自定义“属性”列)一旦他满意,他就可以应用他的更改。
请注意:基本架构布局以及您需要通过 ALTER TABLE 更改某些内容这一事实是由标准预定义的,我们无法更改,因为其他工具将不再起作用。
现在的问题是我们不能在单个事务中运行这些更改,因为 AFAIK,不可能在一个事务中执行多个 ALTER TABLE 语句。
如果在应用更改时出现问题,我们有哪些选项可以“回滚”到初始状态?
注意:这里有人提出了 RESTORE POINT + FLASHBACK——从这个(Java)工具调用它是个好主意吗?(在一些应该使用该工具的站点上,我们没有完全控制数据库实例。)
注意:Oracle 10g2 及以上
我想删除数据库中所有表的所有约束,因为我需要更改许多表的关系。
有没有办法用 T-SQL 做到这一点?我找不到任何解决方案和代码,例如:
ALTER TABLE testDB.dbo.testTable1
DROP ALL CONSTRAINT
GO
Run Code Online (Sandbox Code Playgroud)
不起作用。
alter-table ×10
postgresql ×4
mysql ×2
sql-server ×2
t-sql ×2
constraint ×1
dependencies ×1
dynamic-sql ×1
flashback ×1
index ×1
innodb ×1
myisam ×1
oracle ×1
order-by ×1
plpgsql ×1
schema ×1
ssms ×1
timezone ×1