如何在PostgreSQL中向列添加注释?
create table session_log (
UserId int index not null,
PhoneNumber int index);
Run Code Online (Sandbox Code Playgroud) 我对Oracle数据库中的几个表具有"只读"访问权限.我需要获取一些列的架构信息.我想使用类似于MS SQL的东西sp_help.
我在这个查询中看到了我感兴趣的表:
SELECT * FROM ALL_TABLES
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,Oracle告诉我"在架构中找不到表",是的,参数是正确的.
SELECT
DBMS_METADATA.GET_DDL('TABLE', 'ITEM_COMMIT_AGG', 'INTAMPS') AS DDL
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
在使用我的Oracle通用翻译器9000后,我推测这不起作用,因为我没有足够的权限.鉴于我的约束,我如何获得表上的列的数据类型和数据长度?我有PL-SQL语句的读访问权限?
我有下表:
CREATE TABLE child(
id INTEGER PRIMARY KEY,
parent_id INTEGER CONSTRAINT parent_id REFERENCES parent(id),
description TEXT);
Run Code Online (Sandbox Code Playgroud)
如何删除约束?
当我在Oracle shell中运行以下内容时,它可以正常工作
truncate table table_name
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将其放入存储过程时
CREATE OR REPLACE PROCEDURE test IS
BEGIN
truncate table table_name;
END test;
/
Run Code Online (Sandbox Code Playgroud)
它失败了
ERROR line 3, col 14, ending_line 3, ending_col 18, Found 'table', Expecting: @ ROW or ( or . or ; :=
Run Code Online (Sandbox Code Playgroud)
为什么?
谢谢,Klas Mellbourn
我正在尝试编写SQL Server数据库更新脚本.我想测试表中是否存在列,然后如果它不存在则添加具有默认值的列,最后根据同一表中不同列的当前值更新该列.我希望这个脚本可以多次运行,第一次更新表时,在后续运行中应该忽略脚本.我的脚本目前如下所示:
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'PurchaseOrder' AND COLUMN_NAME = 'IsDownloadable')
BEGIN
ALTER TABLE [dbo].[PurchaseOrder] ADD [IsDownloadable] bit NOT NULL DEFAULT 0
UPDATE [dbo].[PurchaseOrder] SET [IsDownloadable] = 1 WHERE [Ref] IS NOT NULL
END
Run Code Online (Sandbox Code Playgroud)
SQL Server返回错误"无效的列名'IsDownloadable'",即我需要在更新列之前提交DDL.我尝试了各种排列,但是我无法快速进行.
我有这个代码:
ALTER TABLE `settings`
ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1
Run Code Online (Sandbox Code Playgroud)
并且我想仅在此列不存在时才更改此表.
我正在尝试很多不同的方法,但没有任何作用:
ALTER TABLE `settings`
ADD COLUMN IF NOT EXISTS `multi_user` TINYINT(1) NOT NULL DEFAULT 1
Run Code Online (Sandbox Code Playgroud)
用程序:
DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
DECLARE _count INT;
SET _count = ( SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'settings' AND
COLUMN_NAME = 'multi_user');
IF _count = 0 THEN
ALTER TABLE `settings` ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1
END IF;
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我在END IF中出错,然后在END中然后在1中出错
我怎样才能让它变得尽可能简单?
我在这里查看MySQL文档并试图理清FOREIGN KEY和CONSTRAINT之间的区别.我认为FK 是一种约束,但是文档似乎在谈论它们,就像它们是分开的东西一样.
创建FK的语法是(部分)......
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
Run Code Online (Sandbox Code Playgroud)
所以"CONSTRAINT"子句是可选的.你为什么要包括它或不包括它?如果你把它留下来,MySQL会创建一个外键但不是约束吗?或者它更像是一个"CONSTRAINT"只不过是你FK的名字,所以如果你没有指定它,你会得到一个匿名的FK?
任何澄清将不胜感激.
谢谢,
阮经天
谁能告诉我如何为Oracle模式中的所有表,视图,索引,包,过程,函数,触发器,类型,序列,同义词,授权等生成DDL?理想情况下,我也想复制行,但这不太重要.
我希望在某种类型的预定作业上执行此操作,而不是每次都手动执行此操作,以便在SQL Developer中使用向导进行排除.
理想情况下,因为我将在几个具有相互授予和同义词的模式上运行它,我想有一种方法在输出中进行查找/替换,因此模式名称匹配我的新模式的名称成为.
谢谢!
如何一次为MySQL数据库中的所有表生成DDL.我知道以下查询将输出表的DDL.但是我想要同时使用所有表的DDL,因为我的数据库中有数百个表.
show create table <database name>.<table name>;
Run Code Online (Sandbox Code Playgroud)
例如:
show create table projectdb.customer_details;
Run Code Online (Sandbox Code Playgroud)
上面的查询将导致customer_details表的DDL .
我在Windows操作系统上使用MySQL和MySQL工作台.
ddl ×10
mysql ×3
oracle ×3
constraints ×2
plsql ×2
t-sql ×2
alter-table ×1
comments ×1
database ×1
foreign-keys ×1
postgresql ×1
privileges ×1
schema ×1
sql-server ×1
sqlite ×1