我们的数据库是 SQL Server 2008 R2。我们有一些表有一些 varchar(500) 列,我想切换到 datetime2 或 bigint。我可以保证要切换的列中的所有数据对于正确的类型都是有效的。列更改确实会影响索引,但不会影响键。
在与同事讨论时,我们得出了两种解决问题的方法。这两个都将通过 T-Sql 脚本完成。
ALTER TABLE x ALTER COLUMN Y datetime2,然后重建或重新创建索引。因为我相信数据会干净利落地转换,所以我倾向于#2。我的同事和 DBA 朋友更喜欢 #1,但我的同事不记得他们为什么这样训练他。DBA 朋友正在休假,所以我没有问他为什么。
有人可以提供有关他们认为更好的选择以及为什么的见解吗?最终这是我的决定,我想知道为什么 #1 比 #2 更受欢迎?
我需要检查datecom小于datelivr
create table Commande
(
Numcom int identity primary key,
Datecom date,
Datelivr date,
Codecli int foreign key references clients (Codecli)
)
alter table Commande
add constraint date_check check(datediff(day,Datecom,Datelivr) > 0)
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息:
ALTER TABLE 语句与 CHECK 约束“date_check”冲突。冲突发生在数据库“tp4”,表“dbo.Commande”中。
这怎么会发生?
我想将所有表从架构移动xyz到默认架构public。
我可以移动单个表
ALTER TABLE table_name
SET SCHEMA public;
Run Code Online (Sandbox Code Playgroud)
我可以得到所有的桌子
SELECT table_name FROM information_schema.tables WHERE table_schema='xyz'
Run Code Online (Sandbox Code Playgroud)
有没有办法将这两者结合在一起?
我们有一个非常大的POSTGRES表,包含超过80 亿行,并且以非常高的速度增长(每天 3000 万行)。
我们的表是按日期分区的。每个分区包含6 个月的数据,除了第一个分区包含近18 个月的数据。
Postgres 版本:PostgreSQL 12.11
数据库规格: db.r6g.16xlarge (vCPU:64,内存:512,EBSBandwidth(Mbps):19000)
表架构:
create table table_1
(
id bigint default nextval('table_1_id_seq'::regclass) not null,
user_id integer not null,
amount numeric(18, 2) not null,
date timestamp not null,
column_1 varchar not null,
column_2 varchar,
.
.
primary key (id, date)
) partition by RANGE (date);
Run Code Online (Sandbox Code Playgroud)
该表还包含多个索引(包括部分索引)
create index index_1
on table_1 …Run Code Online (Sandbox Code Playgroud) 我有一些许多用户需要访问的表:
mysql> show create table v3_cam_date\G
*************************** 1. row ***************************
Table: v3_cam_date
Create Table: CREATE TABLE `v3_cam_date` (
`campaignid` mediumint(9) NOT NULL DEFAULT '0',
`totalclick` mediumint(9) unsigned NOT NULL DEFAULT '0',
`totalview` int(11) unsigned NOT NULL DEFAULT '0',
`realclick` mediumint(9) unsigned NOT NULL DEFAULT '0',
`clickcharge` mediumint(9) unsigned NOT NULL DEFAULT '0',
`viewcharge` int(11) unsigned NOT NULL DEFAULT '0',
`uv` mediumint(9) unsigned NOT NULL DEFAULT '0',
`uc` mediumint(9) unsigned NOT NULL DEFAULT '0',
`dt` date NOT NULL DEFAULT '0000-00-00',
`ctr` …Run Code Online (Sandbox Code Playgroud) 我是 PostgreSQL 的新手,这就是我问这个问题的原因。我有一个表app_client_users和一个名为client_id. 最初我将其设置为NOT NULL,现在我想将其更改为允许 NULL。我试过了
alter table app_client_users alter column client_id int NULL ;
Run Code Online (Sandbox Code Playgroud)
和
alter table app_client_users alter column client_id NULL ;
Run Code Online (Sandbox Code Playgroud)
这是行不通的。我该如何解决?
我在 SQL Server (Azure) 中有一个包含 140 万行的表。
我想索引其中一列;但是,它的数据类型是nvarchar(max)(通过使用我想象的 EF 默认为这样)。我正在使用实体框架,并且可以进行迁移,将此数据类型更改为nvarchar(50).
我担心这需要多长时间,以及是否会导致锁定问题。我只扩展过列,所以我不确定会发生什么。我确实知道此列中的数据适合新尺寸。
我正计划创建数据库的副本并尝试一下。我也考虑过迁移到一个新列,但如果不是太痛苦,我更愿意更新当前列。
我有一个包含一些行的表,我尝试使用以下命令添加一个标识列:
ALTER TABLE sourceTable
ADD COLUMN ogc_fid int
GENERATED BY DEFAULT AS IDENTITY;
Run Code Online (Sandbox Code Playgroud)
建议使用上面的命令来回答这个问题:
但我得到:
错误:“ogc_fid”列包含空值
SQL 状态:23502
看起来表的现有行没有自动生成标识,但会导致此错误(如果表没有行,该命令可以正常工作)。有任何想法吗?我是否必须首先为我添加的列生成值DEFAULT nextval('some_sequence')?或者在 PostgreSQL 10 中有更好的方法吗?
我们有一个由 Postgresql v11.4提供支持的 Rails 应用程序,我想在其中添加一个具有默认值和非空约束的新列,如下所示:
ALTER TABLE "blogs" ADD "published" boolean DEFAULT FALSE NOT NULL
Run Code Online (Sandbox Code Playgroud)
我知道添加具有默认值的新列是安全的。但是,与 组合使用仍然安全吗NOT NULL?或者它会锁定数据库吗?谢谢!
我做了这个查询:ALTER TABLE dbname.tablename DROP COLUMN columnname它已经运行了几个小时,我想知道它还需要多长时间。
大约有 750m 行。
谢谢 !
如果您需要更多详细信息,我会提供给他们,我不想提供那些没有用的信息
alter-table ×10
postgresql ×5
sql-server ×3
datatypes ×2
mysql ×2
null ×2
constraint ×1
ddl ×1
drop-table ×1
identity ×1
innodb ×1
locking ×1
partitioning ×1
schema ×1
t-sql ×1