是否可以在不使用create table语句并指定每个列类型的情况下从select语句创建临时(仅会话)表?我知道派生表能够做到这一点,但那些是超临时的(仅限语句),我想重用.
如果我不必编写create table命令并保持列列表和类型列表匹配,那么可以节省时间.
我想在SQLite数据库中创建一个表,如果它还不存在的话.有没有办法做到这一点?如果表存在,我不想删除它,只有在没有的情况下才创建它.
在MySQL脚本中,您可以编写:
CREATE TABLE IF NOT EXISTS foo ...;
Run Code Online (Sandbox Code Playgroud)
... 其他的东西 ...
然后您可以多次运行该脚本而无需重新创建表.
你如何在PostgreSQL中做到这一点?
我正在研究一个发布DDL的程序.我想知道是否CREATE TABLE可以回滚和类似的DDL
描述每个数据库如何使用DDL处理事务.
我不明白这个查询有什么问题?查询工具不希望在PostgreSQL中创建表.
CREATE TABLE article (
article_id bigint(20) NOT NULL auto_increment,
article_name varchar(20) NOT NULL,
article_desc text NOT NULL,
date_added datetime default NULL,
PRIMARY KEY (article_id)
);
Run Code Online (Sandbox Code Playgroud) 我可以复制一个MySQL表来创建一个新表:
CREATE TABLE newtable SELECT * FROM oldtable
Run Code Online (Sandbox Code Playgroud)
这可以,但索引不会复制到新表.如何复制包含索引的表?
我想创建一个325列的表:
CREATE TABLE NAMESCHEMA.NAMETABLE
(
ROW_ID TEXT NOT NULL , //this is the primary key
324 column of these types:
CHAR(1),
DATE,
DECIMAL(10,0),
DECIMAL(10,7),
TEXT,
LONG,
) ROW_FORMAT=COMPRESSED;
Run Code Online (Sandbox Code Playgroud)
我用TEXT替换了所有VARCHAR,我在MySQL的my.ini文件中添加了Barracuda,这是添加的属性:
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_file_format_check = ON
Run Code Online (Sandbox Code Playgroud)
但我仍然有这个错误:
Error Code: 1118
Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Run Code Online (Sandbox Code Playgroud)
编辑:我无法更改数据库的结构,因为它是遗留的应用程序/系统/数据库.创建一个新表,它是遗留数据库的导出.
编辑2:我写的这个问题与其他人类似,但内部有一些我在互联网上找到的解决方案,如VARCHAR和Barracuda,但我仍然有这个问题所以我决定打开一个新的问题已经内部的经典答案,看看是否有人有其他答案
我目前有:
CREATE TABLE galleries_gallery (
id INT NOT NULL PRIMARY KEY IDENTITY,
title NVARCHAR(50) UNIQUE NOT NULL,
description VARCHAR(256),
templateID INT NOT NULL REFERENCES galleries_templates(id),
jsAltImgID INT NOT NULL REFERENCES libraryImage(id)
jsAltText NVARCHAR(500),
dateCreated SMALLDATETIME NOT NULL,
dateUpdated SMALLDATETIME NOT NULL,
lastUpdatedBy INT,
deleted BIT NOT NULL DEFAULT 0
);
Run Code Online (Sandbox Code Playgroud)
但是这会增加自动生成名称的约束,这使得以后很难删除约束.为了命名约束,我需要添加什么?
上面的例子是mssql我也需要它在postgresql中
我是这个SQL的新手; 我已经看到类似的问题与更大的程序,我目前无法理解.我正在为我的主页上使用的卡片游戏创建一个数据库.
我在Windows上使用MySQL Workbench.我得到的错误是:
错误代码:1364.字段'id'没有默认值
CREATE TABLE card_games
(
nafnleiks varchar(50),
leiklysing varchar(3000),
prentadi varchar(1500),
notkunarheimildir varchar(1000),
upplysingar varchar(1000),
ymislegt varchar(500),
id int(11) PK
);
insert into card_games (nafnleiks, leiklysing, prentadi, notkunarheimildir, upplysingar, ymislegt)
values('Svartipétur',
'Leiklýsingu vantar',
'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.',
'Heimildir um notkun: Árni Sigurðsson (1951). Hátíðir og skemmtanir fyrir hundrað árum',
'Aðrar upplýsingar',
'ekkert hér sem stendur'
);
values('Handkurra',
'Leiklýsingu vantar',
'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个之前删除的表.
但是当我这样做的时候CREATE TABLE A ...我收到以下错误:
关系'A'已经存在.
我验证了SELECT * FROM A,但后来又出现了另一个错误:
关系'A'不存在.
我已经试图在\dS+列出所有关系时找到它,但它并不存在.
为了使这一点复杂化,我通过在另一个数据库中创建此表来测试这个,我得到了同样的错误.我认为这个表被删除时可能会出错.有任何想法吗?
这是代码:我正在使用Power SQL生成的代码.我没有使用序列有相同的错误.它只是在我更改名称时起作用,在这种情况下我不能这样做.
CREATE SEQUENCE csd_relationship_csd_relationship_id_seq;
CREATE TABLE csd_relationship (
csd_relationship_id INTEGER NOT NULL DEFAULT nextval('csd_relationship_csd_relationship_id_seq'::regclass),
type_id INTEGER NOT NULL,
object_id INTEGER NOT NULL,
CONSTRAINT csd_relationship PRIMARY KEY (csd_relationship_id)
);
Run Code Online (Sandbox Code Playgroud) create-table ×10
mysql ×4
postgresql ×4
sql ×4
ddl ×2
constraints ×1
identifier ×1
indexing ×1
insert ×1
select ×1
sql-server ×1
sqlite ×1
temp-tables ×1
transactions ×1