天道酬勤,学无止境

alter-table

对 VARCHAR 修改强制截断?(Force Truncation on VARCHAR modification?)

问题 我想在几列上将 VARCHAR 上限设置为 255,以便我可以添加索引。 alter table striker modify contacts varchar(255) 当我尝试运行上述命令时,我得到 Error Code: 1265. Data truncated for column 'contacts' at row 331 38.969 sec 有没有办法强制截断列,以便此命令成功缩短 VARCHAR? 我不在乎缩短列中的数据。 回答1 您可以手动将列截断为 255 个字符: UPDATE striker SET contacts = SUBSTR (contacts, 1, 255); 现在,您知道没有值超过 255 个字符,您可以安全地执行 OP 中的alter table语句。 回答2 为什么要截断列? 只需为列创建带有长度说明符的索引。 下面是一个例子: create index idx_striker_contacts on striker(contacts(255)) 您可以对多列执行此操作。

2021-09-17 09:20:46    分类:技术分享    mysql   sql   ddl   alter-table

通过选择结果更改 AUTO_INCREMENT 值(Alter AUTO_INCREMENT value by select result)

问题 基本上我想要的是以下代码的工作版本: ALTER TABLE table_name AUTO_INCREMENT = ( SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'another_table_name' ); 错误: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AUTO_INCREMENT = 原因: 根据 MySQL 文档: 只要服务器运行,InnoDB 就会使用内存中自动递增计数器。 当服务器停止并重新启动时,InnoDB 为第一次插入表重新初始化每个表的计数器,如前所述。 这意味着每当我重新启动服务器时,我的 auto_increment 值都会设置为可能的最小值。 我有一张名为ticket的表和另一个名为ticket_backup 。 它们都有一个共享的列id 。 ticket表内的记录可用,客户可以索取。 当他们领取ticket我将记录插入到ticket

2021-09-17 07:25:08    分类:技术分享    mysql   sql   select   auto-increment   alter-table

无法删除 SQL Server 2005 中的约束,“无法删除约束。 查看以前的错误”(Unable to drop constraint in SQL server 2005, “Could not drop constraint. See previous errors”)

问题 我正在尝试删除数据库表上的约束,例如: ALTER TABLE MyTable drop CONSTRAINT FK_MyTable_AnotherTable 但执行只是运行和运行。 如果我停止它,我会看到: Msg 3727, Level 16, State 0, Line 2 Could not drop constraint. See previous errors. 网络搜索会抛出各种页面,但请注意约束已正确命名,我正在尝试使用正确的名称将其删除 回答1 我在SQL Server 2008 R2上遇到了同样的问题,我用下面的代码解决了我的问题,希望它也适用于其他人:) Alter Table [Table Name] DROP Column [Column Name] 回答2 找到了一种对此进行排序的方法,尽管我不明白为什么需要这样做。 已经能够通过首先禁用它来删除约束: ALTER MyTable NOCHECK CONSTRAINT FK_MyTable_AnotherTable 然后下降完成 仍然欢迎任何评论为什么这是必要的 回答3 验证您尚未删除约束,例如: SELECT OBJECT_ID('FK_MyTable_AnotherTable') 如果这返回null ,则您的约束不再存在。 这将解释错误消息。 回答4 我有同样的问题。

2021-09-14 04:38:04    分类:技术分享    sql   sql-server   constraints   alter-table

Sqlite ALTER TABLE - 在现有列之间添加列?(Sqlite ALTER TABLE - add column between existing columns?)

问题 如果我有一个包含列的表:a、b、c,然后我执行 ALTER TABLE 命令来添加新列“d”,例如是否可以将它添加到 a 和 b 之间,而不是最后? 我听说列的位置会影响性能。 回答1 无法在 SQLite 中使用 ALTER TABLE 语句在两个现有列之间添加列。 这按设计工作。 新列始终附加到现有列列表的末尾。 据我所知,MySQL 是唯一可以让您确定新列位置的 SQL (ish) dbms。 要在表行内的特定位置添加列,请使用 FIRST 或 AFTER col_name。 默认是最后添加列。 您还可以在 CHANGE 或 MODIFY 操作中使用 FIRST 和 AFTER 对表中的列重新排序。 但这不是我经常使用的功能,所以“据我所知”并不是很远。 回答2 对于我见过的每个 sql 平台,唯一的方法就是删除表并重新创建它。 但是,我质疑列的位置是否会影响性能......它会以什么方式,您正在执行哪些操作,您认为它会有所作为? 我还会注意到,放下桌子并重新创建它通常不是一件繁重的事情。 在所有主要平台上制作表的备份和恢复该表都很容易,因此编写备份 - 删除 - 创建 - 恢复脚本对于有能力的 DBA 来说是一项简单的任务。 事实上,当用户问起时,我经常这样做——但我总是觉得这有点傻。 给出的最常见原因是当列以特定顺序创建时,选择的工具表现得更好。 (这也是下面

2021-08-31 22:43:05    分类:技术分享    sql   performance   sqlite   alter-table

SQL Server 脚本:ALTER PROCEDURE - 将多个 ALTER PROCEDURE 执行到一个脚本中,而不必一个接一个地选择每个 ALTER(SQL Server script: ALTER PROCEDURE - Executing multiple ALTER PROCEDURE into one script without having to select each of the ALTER one after another)

问题 我知道这不是什么大问题,但无论如何它让我很痒。 我有一个 SQL Server 2005 脚本来创建新的数据表、约束、更改一些表以添加列、更改程序以考虑表更改等。 一切运行正常,直到脚本遇到我的 ALTER PROCEDURE 语句。 错误信息如下: “消息 156,级别 15,状态 1,过程 cpromo_Get_ConsultDetails_PromotionBan,第 59 行关键字“PROCEDURE”附近的语法不正确。 这是我的脚本示例: ALTER PROCEDURE [dbo].[cpromo_Get_ConsultDetails_PromotionBan] ( @idPromoBan int, @uid int ) AS begin set nocount on; /* 1- detail de la promo */ SELECT p.[nopromo], p.[StartDate], p.[EndDate], p.[DateText] FROM [cpromo_PromotionBanniere] as pb INNER JOIN [cpromo_Promotions] as p ON p.[idPromo] = pb.[idPromo] WHERE (pb.[idPromoBan] = @idPromoBan) /* 2 - cartes de la

2021-08-31 14:01:01    分类:技术分享    sql-server-2005   alter-table   alter   sql-scripts

SQL Server script: ALTER PROCEDURE - Executing multiple ALTER PROCEDURE into one script without having to select each of the ALTER one after another

I know this is not a big issue, but it tickles me anyway. I have a SQL Server 2005 script to create new data tables, constraints, altering some tables to add columns, altering procedures to take the table changes into account, etc. Everything runs fine until the script encounters my ALTER PROCEDURE statements. The error message is as follows: "Msg 156, Level 15, State 1, Procedure cpromo_Get_ConsultDetails_PromotionBan, Line 59 Incorrect syntax near the keyword 'PROCEDURE'. Here's a sample of my script: ALTER PROCEDURE [dbo].[cpromo_Get_ConsultDetails_PromotionBan] ( @idPromoBan int, @uid int

2021-08-30 22:24:01    分类:问答    sql-server-2005   alter-table   alter   sql-scripts

Will changing column from timestamp to timestamptz lock the table?

I want to migrate a column from timestamp (no timezone) to timestamptz type. I'm on Postgres 9.3.9. I need to know if this operation will cause a table rewrite (lock the table) as my table is large and the db is live. I found this in the 9.2 release notes: Increasing the length limit for a varchar or varbit column, or removing the limit altogether, no longer requires a table rewrite. Similarly, increasing the allowable precision of a numeric column, or changing a column from constrained numeric to unconstrained numeric, no longer requires a table rewrite. Table rewrites are also avoided in

2021-08-30 11:35:22    分类:问答    postgresql   concurrency   timestamp   postgresql-9.3   alter-table

MySQL - 如何更新小数列以允许更多数字?(MySQL - How do I update the decimal column to allow more digits?)

问题 我是 MySQL 的初学者,我不小心创建了一个表,其中有一列名为 (price decimal(2,2)); 它需要是decimal(4,2)以允许 4 位数字。 由于我已经创建了它,将十进制值更新为decimal(4,2)的最简单方法是什么? 或者我是否需要完全删除该列,并使用正确的数字重新创建它? 回答1 ALTER TABLE mytable MODIFY COLUMN mycolumn newtype 例子: ALTER TABLE YourTableNameHere MODIFY COLUMN YourColumnNameHere decimal(4,2) 回答2 只需使用MODIFY命令ALTER TABLE : ALTER TABLE `table` MODIFY `price` DECIMAL(4,2) 这将允许 2 个小数和 2 个完整数字(最多99.99 )。 如果您想要 4 个完整数字,请改用6,2 (最多允许9999.99 )。 回答3 这不是“更新”的问题,而是更改表结构的问题。 为此,将 ALTER TABLE 与MODIFY子句一起使用: ALTER TABLE YourTableName MODIFY COLUMN price DECIMAL(4,2); sqlfiddle 演示 回答4 使用更改 ALTER TABLE table_name

2021-08-12 08:47:15    分类:技术分享    mysql   sql-update   decimal   alter-table

How to get lastaltertimestamp from Hive table?

Teradata has the concept of lastaltertimestamp, which is the last time an alter table command was executed on a table. lastaltertimestamp can be queried. Does Hive have a similar value that can be queried? The timestamp returned by hdfs dfs -ls /my/hive/file does not reflect alter table commands, so alter table must not modify the file backing Hive file. describe formatted does not provide a last-alter-timestamp either. Thanks

2021-08-11 23:44:15    分类:问答    hadoop   hive   teradata   alter-table

Execution time of ALTER COLUMN

Having a table with 60 columns, and 200 rows. Altering a BIT column from NULL to NOT NULL, now has a running execution time of over 3 hours. Why is this taking so long? This is the query that I'm execution: ALTER TABLE tbl ALTER COLUMN col BIT NOT NULL Is there a faster way to do it, besides creating a new column, updating it with values from the old column, then dropping the old column and renaming the new one? This is on MS SQL Server 2005.

2021-08-11 06:32:35    分类:问答    sql   sql-server-2005   alter-table