问题标签 [alter-table]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 如何更改 SQL Server 中列的数据类型?
我正在尝试将列从 a 更改varchar(50)
为 a nvarchar(200)
。更改此表的 SQL 命令是什么?
mysql - 针对 InnoDB 的 ALTER TABLE 优化 MySQL
不久之后,我们将需要对生产数据库进行架构更改。我们需要尽量减少这项工作的停机时间,但是,ALTER TABLE 语句将运行相当长的一段时间。我们最大的表有1.5亿条记录,最大的表文件是50G。所有表都是 InnoDB,并且它被设置为一个大数据文件(而不是一个文件每个表)。我们在 8 核机器、16G 内存和 RAID10 配置上运行 MySQL 5.0.46。
我有一些 MySQL 调优的经验,但这通常侧重于来自多个客户端的读取或写入。在 Internet 上可以找到很多关于这个主题的信息,但是,关于(临时)调整 MySQL 服务器以加速 InnoDB 表上的 ALTER TABLE 或 INSERT INTO 的最佳实践的信息似乎很少。 . SELECT FROM(我们可能会使用它而不是 ALTER TABLE 以获得更多的机会来加快速度)。
我们计划做的架构更改是向所有表添加一个整数列,并使其成为主键,而不是当前的主键。我们还需要保留“旧”列,因此不能选择覆盖现有值。
什么是尽快完成这项任务的理想设置?
sql-server - 在创建临时表之前检查临时表是否存在,如果存在则删除
我正在使用以下代码检查临时表是否存在,并在再次创建之前删除该表(如果存在)。只要我不更改列,它就可以正常工作。如果我稍后添加一列,它会给出“无效列”的错误。请让我知道我做错了什么。
sql-server - ALTER TABLE 具有以编程方式确定的常量 DEFAULT 值
我正在尝试将列(MSSQL 2005)添加到具有另一个表(部门)的主键的默认约束的表(员工)中。然后我将把这个列作为那个表的 FK。本质上,如果没有提供 DepartmentID,这将根据部门名称将新员工分配到基础部门。
这不起作用:
生产、测试和开发数据库已经不同步,DepartmentName = 'RocketScience' 的 DepartmentID 可能相同也可能不同,所以我不想只说 DEFAULT(某个数字)。无论我以哪种方式解决问题,我都会不断收到“ALTER TABLE 语句中不允许使用变量”。
这样做的正确方法是什么?我也尝试过嵌套 select 语句,它得到“在这种情况下不允许子查询。只允许标量表达式。”
此外,真正棒的是我可以在一个语句中填充列值,而不是执行
{ALTER null}
{Update values}
{ALTER not null}
步骤。我读了一些关于 WITH VALUES 命令的内容,但无法让它工作。谢谢!!!
sql-server - 更改列:null 到 not null
我有一个有几个可以为空的整数列的表。出于多种原因,这是不可取的,因此我希望将所有空值更新为 0,然后将这些列设置为NOT NULL
. 除了将 null 更改为 之外0
,还必须保留数据。
我正在寻找将列(调用它)更改为“ ”的特定 SQL 语法。假设数据已更新为不包含空值。ColumnA
not null
使用SQL 服务器 2000。
mysql - MySQL 中的默认排序顺序 (ALTER TABLE ... ORDER BY ...;)
假设 MySQL 表 (ISAM) 的默认排序通过执行以下命令进行更改:
从现在开始,假设我的查询中没有指定“ORDER BY”(即“SELECT * FROM tablename WHERE ... LIMIT 10;”),我是否保证按照“columnname ASC”的顺序从表中检索到记录?
是否有任何我应该注意的极端情况?
更新 #1:非常感谢 Quassnoi,他正确地指出了 INSERT 和 DELETE 会打乱排序。这导致我提出以下额外问题:
- 更新呢?假设没有对表进行 INSERT 或 DELETE,而只是更新 - 排序顺序会保持不变吗?
- 假设进行了 INSERT 和 DELETE - 我如何再次“重建”排序,比如每天一次(在这种特定情况下,表仅每天更改,因此在更改完成后每天重建它应该仍然可以!)。REPAIR TABLE 是否修复它,或者必须再次添加 ALTER TABLE ... ORDER BY ?
sql - 我可以从 T-SQL 中的现有检查约束中删除“不用于复制”选项吗?
假设将带有“not for replication”选项的检查约束(涉及多个列)添加到数据库表中(例如,“alter table table_name add constraint constraint_name check not for replication (constraint_expression)”)
我找到了从列中删除“不用于复制”的语法,但不是如上所述的现有检查约束。
除了删除/重新创建检查约束之外,有没有办法从检查约束中删除“不用于复制”?
sqlite - 如何重命名 SQLite 数据库表中的列?
我需要重命名 SQLite 数据库中某些表中的一些列。我知道之前在stackoverflow上也有人问过类似的问题,但一般是针对SQL的,没有提到SQLite的情况。
从ALTER TABLE的 SQLite 文档中,我了解到不可能“轻松”地做这样的事情(即单个 ALTER TABLE 语句)。
我想知道有人知道用 SQLite 做这种事情的通用 SQL 方式。
sql - 如何在不影响已经存在的值的情况下更改列的属性?
简而言之 - 在 oracle db 中,我想创建一个列 varchar2(16),它现在是 varchar2(8),而不影响值 presnet。我已经尝试过了,它会做一些奇怪的事情。
我尝试的查询是 - alter table SOME_TABLE modify (SOME_COL varchar2(16)); 但是当我运行上述查询时,表中已经存在的值(有些不是全部)会在它们后面附加 '\0'。
那么,做我想做的事情的正确方法是什么?
mysql - 如果它不存在,则将列添加到 mysql 表
我的研究和实验还没有得出答案,所以我希望能得到一些帮助。
我正在修改以前版本中没有我现在要添加的列的应用程序的安装文件。我不想手动添加该列,而是在安装文件中并且仅当表中不存在新列时。
创建表如下:
如果我在 create table 语句下方添加以下内容,那么我不确定如果该列已经存在(并且可能已填充)会发生什么:
所以,我尝试了我在某处找到的以下内容。这似乎不起作用,但我不完全确定我是否正确使用了它。
有没有人有这样做的好方法?