好的,所以Sybase(12.5.4)将允许我执行以下操作以DROP表(如果它已经存在):
IF EXISTS (
SELECT 1
FROM sysobjects
WHERE name = 'a_table'
AND type = 'U'
)
DROP TABLE a_table
GO
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试对表创建执行相同操作,我总是会收到警告,表已经存在,因为它继续并尝试创建我的表并忽略条件语句.试试两次运行以下语句,你会明白我的意思:
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE name = 'a_table'
AND type = 'U'
)
CREATE TABLE a_table (
col1 int not null,
col2 int null
)
GO
Run Code Online (Sandbox Code Playgroud)
运行以上错误会产生以下错误:
SQL Server错误(localhost)错误:2714 at Line:7消息:数据库中已存在名为"a_table"的对象.
这有什么用??!
我的数据库背景是Oracle,所以我很惊讶地发现Postgres包含了事务中的模式更改 - 如果你开始一个,创建一个表然后回滚,表就会消失.它也适用于添加和删除列.显然这非常好.
我们将对部署依赖于此功能的架构增量的方式进行一些更改.在我们开始之前,我想知道事务保证的扩展程度,但我在文档中找不到任何相关信息.我假设我只是使用了错误的搜索词 - 我的搜索只会进入包含"事务","创建"和"表格"等词的大型命令列表.
任何人都可以给我一些关于Postgres中关于事务模式更改的文档或讨论的指示吗?(我们正在使用8.2.13,虽然我们将在不太遥远的未来进行升级.)或者只是关于不包含在交易中的声明的一些细节?
在表格下的Sql Developer中,我看到了表格,但有些表格中有$.
例:
tb$something
Run Code Online (Sandbox Code Playgroud)
当桌子名称时,'$'符号是什么意思?
我正在阅读SQL Server的最大容量规范,我发现了一个宽表的名称.它与标准表的不同之处在于,它可以具有多达30,000列,而不是普通(窄)表,仅限于更熟悉的1024列.我用Google搜索广告,但似乎没有任何相关内容.这个新表类型是否有更正式的名称???
那么为什么我们有两种不同类型的表,你如何创建这个特殊的表,以及使用这个表似乎可以容纳更多数据的限制是什么?anhyone知道吗?
我想知道是否有办法迫使MSSQL Management Studio生成这样的脚本:
ALTER TABLE Mytable
ADD MyCol bit NOT NULL
CONSTRAINT MyColDefault
DEFAULT 0 WITH VALUES
ALTER TABLE [dbo].Mytable
ALTER COLUMN MyCol2 int NULL
GO
Run Code Online (Sandbox Code Playgroud)
当我改变一个表上的一个非常简单的列属性时.如果我在设计器中执行此操作并请求生成的脚本,则脚本不会执行此类简单任务,而是复制tmp表中的所有数据,删除原始表,使用原始表名重命名tmp表.当然,丢弃并重新创建每个约束和关系.
有什么选择我可以改变以改变这种行为吗?或者,这可能是有可能的,在使用上面的简单ALTER TABLE时是否存在一些危险?
谢谢.
是否有CREATE TABLE IF NOT EXISTS创建数据库的模拟?
背景:我正在编写一个脚本,以便在未知系统上自动设置PostgreSQL中的模式.我不确定数据库(或者甚至是模式的一部分)是否已经部署,所以如果某些结构已经存在,我想构建我的代码以使其失败(或理想情况下甚至显示错误).我想区分阻止我创建数据库的错误(因此中止未来的架构更改,因为它们不起作用)来自此错误.
我在本地安装了InnoDB的MySQL 5.5.37和Ubuntu 13.10上的apt-get.我的机器是台式机上的i7-3770 + 32Gb内存+ SSD硬盘.对于仅包含150万条记录的表"mytable",以下DDL查询需要超过20分钟(!):
ALTER TABLE mytable ADD some_column CHAR(1) NOT NULL DEFAULT 'N';
Run Code Online (Sandbox Code Playgroud)
有没有办法改善它?我检查了
show processlist;
Run Code Online (Sandbox Code Playgroud)
它显示它出于某种原因正在复制我的表格.令人不安的是令人不安的.有没有办法关掉这个副本?是否有其他方法可以提高向大表添加列的性能?
除此之外,我的数据库相对较小,只有1.3Gb转储大小.因此它(理论上)应该100%适合记忆.
有设置可以帮助吗?迁移到Precona会改变一切吗?
补充:我有
innodb_buffer_pool_size = 134217728
Run Code Online (Sandbox Code Playgroud) 自从更新到 Spring Boot 2 后,我注意到在使用 spring.jpa.properties.javax.persistence.schema-generation.scripts.* 选项时生成 DDL 文件的方式发生了变化。
以前,在 Spring Boot 1.5 中,每次我运行我的应用程序或测试时(我也有检查这些文件内容的集成测试),DDL 文件会重新生成,例如:
drop table testSchema.App if exists
drop table testSchema.AppMetadata if exists
drop table testSchema.Server if exists
drop table testSchema.User if exists
drop table testSchema.UserRole if exists
drop table testSchema.UserToken if exists
Run Code Online (Sandbox Code Playgroud)
现在,升级到 Spring Boot 2.0.5 后,每次我运行我的测试或应用程序时,内容都会以这种方式附加到 DDL 文件中:
drop table testSchema.App if exists
drop table testSchema.AppMetadata if exists
drop table testSchema.Server if exists
drop table testSchema.User if exists
drop table testSchema.UserRole if exists
drop table testSchema.UserToken …Run Code Online (Sandbox Code Playgroud) 我有几个我想在create table之后运行的自定义DDL语句:
update_function = DDL("""
CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ language 'pgplsql';
""")
update_trigger = DDL("""
CREATE TRIGGER update %(table)s_timestamp BEFORE UPDATE
ON %(table)s FOR EACH ROW EXECUTE PROCEDURE update_timestamp();
""")
Run Code Online (Sandbox Code Playgroud)
而且我像这样附上他们:
event.listen(Session.__table__, 'after_create', update_function)
event.listen(Session.__table__, 'after_create', update_trigger)
Run Code Online (Sandbox Code Playgroud)
当我这样做时create_all,我得到了我期望的SQL:
CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ language 'pgplsql';
CREATE TRIGGER update session_timestamp BEFORE UPDATE
ON session …Run Code Online (Sandbox Code Playgroud) ddl ×10
postgresql ×3
sql ×3
database ×2
t-sql ×2
alembic ×1
conditional ×1
jpa ×1
mysql ×1
oracle ×1
performance ×1
schema ×1
spring-boot ×1
sql-server ×1
sqlalchemy ×1
ssms ×1
sybase-ase ×1
transactions ×1