我知道,我们不能使用重命名列modify column syntax,但可以change column syntax.
我的问题是:主要用途是modify syntax什么?
例如,
alter table tablename change col1 col1 int(10) not null
Run Code Online (Sandbox Code Playgroud)
代替
alter table tablename modify col1 int(10) not null
Run Code Online (Sandbox Code Playgroud)
编辑
问题已被替换
主要用途是modify syntax什么?
以上问题由以下内容取代
为什么我们必须使用更改列而不是修改列?
我有一张桌子:
MyTable
ID
FieldA
FieldB
Run Code Online (Sandbox Code Playgroud)
我想改变表并添加一列,如下所示:
MyTable
ID
NewField
FieldA
FieldB
Run Code Online (Sandbox Code Playgroud)
在MySQL中我会这样:
ALTER TABLE MyTable ADD COLUMN NewField int NULL AFTER ID;
Run Code Online (Sandbox Code Playgroud)
一条线,漂亮,简单,效果很好.我如何在微软的世界里做到这一点?
我的SQL Server数据库中有一个现有列.我已经尝试了我能想到的所有内容,但无法将默认值添加到列中.在每个其他数据库中有效的是
alter table mytable
alter column mycolumn set default(now()) --mycolumn is a datetime
Run Code Online (Sandbox Code Playgroud)
我如何在SQL Server中执行此操作?
我得到的确切语法的错误是 incorrect syntax near the keyword 'set'
我在Oracle SQL Developer中创建了表Test_Project2.之后我意识到列proj_name的大小很小,所以我决定使用follwoing语句修改列
ALTER TABLE TEST_PROJECT2 MODIFY proj_name VARCHAR2(300);
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,Oracle SQL Developer用红色强调了分号,我不知道什么是错误以及如何纠正它
Test_Project2:
CREATE TABLE Test_Project2 (
proj_id number(30),
proj_name VARCHAR2 (30),
proj_desc VARCHAR2(300)
);
Run Code Online (Sandbox Code Playgroud) 我在postgre中的ALTER TABLE有一个问题.我想改变varchar列的大小.当我尝试这样做时,它表示视图依赖于该列.我不能放弃视图,因为其他东西依赖于它.还有什么方法可以放弃一切并重新创建它吗?
我刚刚找到一个选项,即从视图中删除表连接,当我不更改返回的列时,我可以这样做.但是,我还需要改变更多的观点.有没有什么我怎么能说它应该延迟和提交检查?
我有一个包含4列的表:ID,类型,所有者,描述.ID是AUTO_INCREMENT PRIMARY KEY,现在我想:
ALTER IGNORE TABLE `my_table`
ADD UNIQUE (`type`, `owner`);
Run Code Online (Sandbox Code Playgroud)
当然,我有几个类型='Apple'和owner ='Apple CO'的记录.所以我的问题是哪个记录将成为ALTER TABLE之后留下的特殊记录,一个ID最小的记录,或者最新插入的记录?
很快我们就需要对生产数据库进行架构更改.我们需要尽量减少这项工作的停机时间,但是,ALTER TABLE语句将运行很长一段时间.我们最大的表有1.5亿条记录,最大的表格文件是50G.所有表都是InnoDB,它被设置为一个大数据文件(而不是每个表的文件).我们在8核机器,16G内存和RAID10配置上运行MySQL 5.0.46.
我有一些MySQL调优的经验,但这通常集中在来自多个客户端的读取或写入.有关此主题的互联网上有很多信息,但是,关于(暂时)调整MySQL服务器以加速InnoDB表上的ALTER TABLE或INSERT INTO的最佳实践,似乎很少有信息可用. .SELECT FROM(我们可能会使用它而不是ALTER TABLE来获得更多机会来加快速度).
我们计划进行的架构更改是向所有表添加一个整数列,并将其作为主键,而不是当前主键.我们还需要保留"旧"列,因此不能覆盖现有值.
尽可能快地完成这项任务的理想设置是什么?
我正在使用SQL Server 2005/2008.我需要在表中添加一个列(如果它尚不存在).这将适用于给定数据库中的所有表.我希望我很接近,但我对这个解决方案有疑问.
如何才能做到这一点?
这就是我所拥有的:
EXEC sp_MSforeachtable '
declare @tblname varchar(255);
SET @tblname = PARSENAME("?",1);
if not exists (select column_name from INFORMATION_SCHEMA.columns
where table_name = @tblname and column_name = ''CreatedOn'')
begin
ALTER TABLE @tblname ADD CreatedOn datetime NOT NULL DEFAULT getdate();
end
'
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
错误102:'@tblname'附近的语法不正确.'CreatedOn'附近的语法不正确.'@tblname'附近的语法不正确.'CreatedOn'附近的语法不正确.......等等,每张桌子.
是否可以在一个语句中重命名多个列,类似于:
ALTER TABLE Users
RENAME COLUMN userName TO user_name,
RENAME COLUMN realName TO real_name;
Run Code Online (Sandbox Code Playgroud) 我转储数据库,我有一个问题.这个查询是什么?
ALTER TABLE `ps_cart_rule` ADD KEY `id_customer` (`id_customer`,`active`,`date_to`);
ALTER TABLE `ps_cart_rule` ADD KEY `id_customer_2` (`id_customer`,`active`,`highlight`,`date_to`);
Run Code Online (Sandbox Code Playgroud)
ADD KEY和ADD INDEX之间的差异是什么?
alter-table ×10
mysql ×4
sql ×3
t-sql ×3
postgresql ×2
sql-server ×2
ddl ×1
dependencies ×1
key ×1
oracle ×1
performance ×1
table-rename ×1
unique-key ×1