是否有一些 SQL 要么返回一个表名列表,要么(切入正题)返回一个布尔值以确定具有某种模式的表名是否存在?
具体来说,我需要知道数据库中是否有一个名为 、 、 、 、 、 、 等的表INV[Bla](INVclay这INVcherri部分INVkelvin是INVmorgan我INVgrandFunk正在INVgobbledygook寻找INV2468WhoDoWeAppreciate的INV;表名的其余部分几乎可以是任何内容)。
IOW,SQL语句中可以使用“通配符”吗,例如:
SELECT * tables
FROM database
WHERE tableName = 'INV*'
Run Code Online (Sandbox Code Playgroud)
或者这将如何实现?
我正在尝试使用我生成的架构文件通过我的 Java 应用程序创建数据库。在模式中,我也包含了 drop 查询。但我想对 DROP QUERY 做一些改进。所以我想在运行 drop 查询之前检查 db 对象的存在,并且只有当它存在时才删除。我用谷歌搜索并找到了一些 oracle 链接,一些链接建议遵循以下语法,有些提到ORACLE 不支持这种语法。
SYNTAX A:
IF EXISTS DROP TABLE TABLE_NAME
SYNTAX B:
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下查询:-
IF EXISTS (SELECT * FROM dba_objects WHERE OBJECT_NAME = 'BBB' )
DROP TABLE [BBB]
Run Code Online (Sandbox Code Playgroud)
但它给出了错误:-
Error starting at line 2 in command:
DROP TABLE [BBB]
Go
Error report:
SQL Error: ORA-00903: invalid table name
00903. 00000 - "invalid table name"
*Cause: …Run Code Online (Sandbox Code Playgroud) 我正在为我正在使用的食谱网站构建 SQL 数据库。我是多对多风格的新手,对我目前拥有的东西没有信心。不可避免地,我希望最终结果是建立一个可靠的设置,用户可以:
将配方添加到数据库
按准备时间、烹饪时间、菜肴、类别、食物类别和课程排序
通过添加所选食谱中的成分总量,能够从每周膳食计划中生成购物清单。(这是最重要的!)
我将挑战自己找出如何添加食谱中的成分以生成购物清单,但这篇文章的问题是“我应该如何构建我的表格并连接所有内容?”
这是我迄今为止在我的 SQL 数据库中所拥有的:
如果您认为自己有答案,请构建与我的表格类似的表格。我是一个视觉学习者,将不胜感激。此外,如果您能解释我可能遗漏或可能不会遗漏的内容,将不胜感激。
- Recipe(table)
- recipe_id (primary key)
- recipe_name
- recipe_description
- course
- food_category
- cuisine
- prep_time
- cook_time
- Ingredients(table)
- ingredient_id (primary key)
- ingredient_name
- recipe_id (foreign key)
- Quantity(table)
- quantity_id (primary key)
- recipe_id (foreign key)
- ingredient_id (foreign key)
- ingredient_quantity
- ingredient_measurement
- Recipe Steps(table)
- step_id (primary key)
- step_description
- recipe_id (foreign key)
- Join(table)*
- join_id (primary key) …Run Code Online (Sandbox Code Playgroud) 我最近查看了我的 schema.rb 文件,并惊讶地发现我的数据库中确实存在的某些列没有出现,并且一些表完全丢失了。通过“def change add_column”迁移将丢失的列添加到数据库中,尽管以这种方式添加的某些列确实在 schema.rb 中按预期显示。
仔细检查后,我意识到自从我创建用户表以来,schema.rb 还没有更新。
20151019205241_create_users.rb:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps null: false
end
end
end
Run Code Online (Sandbox Code Playgroud)
这在实践中并没有给我带来问题,但我认为 schema.rb 应该保持自动更新,并且更新它以重新创建数据库非常重要。谁能帮我弄清楚为什么它不会更新?
一种可能性是当我将数据库从 sqlite3 切换到 postgresql 时它停止更新。我记不太清楚了,但我认为时机是有道理的。
我为订阅产品设计了一个数据库架构。用户可以选择从某个日期开始订阅一定天数。用户可以在几天内取消订阅,但之后仍保持订阅有效。这意味着如果用户订阅一个月,她可以在 10,15 和 20 天取消订阅,因此只需支付 27 天(30 减 3)。
到目前为止,我已经提出了这个模式。
现在,由于用户可以在任何一天取消订阅,我应该如何跟踪不同的用户和他们订阅的日期?
我想到的解决方案是创建一个新表 Plan_Transaction_user,它将跟踪该日期的每个日期和交易 ID。这样,如果用户在特定日期取消订阅,则该交易 ID 将没有该日期的记录。
表将如下所示:
Date Transaction ID
1-1-2017 1
1-1-2017 2
1-1-2017 3
1-2-2017 1
1-2-2017 3
Run Code Online (Sandbox Code Playgroud)
由于与 transaction_id 2 关联的用户在第 2 天取消了她的交易记录,因此该表中不存在。
现在,如果我有 5000 个客户群,那么在一年内最好的情况下,我将拥有 5000 * 365 ~ 180 万行。我确信这不是最好的方法。您能否向我建议更好的模式或对现有模式进行一些更有效的更改?以防万一您想知道我将使用 MariaDB (AWS RDS) 作为数据库并使用 Python 2 作为我的语言。
谢谢你,奥哈斯
注意:不是Postgis 安装的副本:类型“几何”不存在
我正在尝试使用 Postgis 几何列在名为test.
首先我跑了:
SET search_path TO test;
Run Code Online (Sandbox Code Playgroud)
然后当我尝试运行以下语句时:
CREATE TABLE spatials (id serial, name text, geo geometry, PRIMARY KEY (id));
Run Code Online (Sandbox Code Playgroud)
我收到错误 type "geometry" does not exist
我试过运行以下两个:
CREATE EXTENSION postgis;
--AND:
CREATE EXTENSION postgis SCHEMA test;
Run Code Online (Sandbox Code Playgroud)
但两者都会导致错误 extension "postgis" already exists
请注意,使用public模式时它工作正常。
有什么我在这里想念的吗?
我喜欢SHOW TABLES查询如何返回列出的每个表的行和字节,但不幸的是,SHOW SCHEMAS查询并非如此。
获取模式列表总字节大小的最佳方法是什么?
我正在建立一个用户可以对产品进行投票或投票的系统,我需要能够明确计算出产品的起伏数量,以及最近一段时间的总分.
每个投票都可以选择对其进行评论,并且用户需要能够回应/提升其他人的评论(有点像转推),这也将根据转发的父投票加/减产品的总分.
以下是我目前提出的表格:
产品
ID,名称,category_id
投票
ID,user_id,product_id,parent_id,评论,分数,日期时间
用户
名,用户名等
我想我可能需要一个评论表来有效地做到这一点?根据我在StackOverflow上读到的一些建议,投票'得分字段是1或-1,这将允许我收集该SUM()列来计算总票数,另一种可能是单独的vote_up和vote_down表...但是我我只是不确定.
database database-design cakephp relational-database database-schema
我正在尝试列出数据库中的所有表.\ dt没有这样做,可能是因为名称冲突.我尝试了很多命令,但是当不同模式中的两个表共享一个名称时,只有一个表被\ dt列出:
CREATE DATABASE tester;
\c tester
CREATE SCHEMA hid1;
CREATE SCHEMA hid2;
CREATE TABLE a (a int);
CREATE TABLE b (a int);
CREATE TABLE hid1.a (a int);
CREATE TABLE hid1.b (a int);
CREATE TABLE hid1.c (a int);
CREATE TABLE hid2.a (a int);
CREATE TABLE hid2.d (a int);
\dt
SET search_path TO public,hid1,hid2;
\dt
SET search_path TO hid1,public,hid2;
\dt
SET search_path TO hid2,hid1,public;
\dt
Run Code Online (Sandbox Code Playgroud)
即
tester=# \dt
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
hid1 …Run Code Online (Sandbox Code Playgroud) 我有一个包含大约500K作业的表,每个作业都有一个唯一的ID用作主键,状态用于指示作业是挂起,完成还是失败.状态是一个非关键的整数.
我的问题是,我尝试根据状态选择作业的简单查询需要花费太多时间,超过10分钟.在DB中连接了大约46个线程,我也重新启动但它没有帮助性能.
我粘贴了表模式和我尝试在此运行的查询:http: //pastie.org/10416054
有没有办法找到瓶颈和优化表,所以它不需要那么长时间?
database-schema ×10
sql ×4
postgresql ×3
mysql ×2
cakephp ×1
database ×1
ddl ×1
oracle11g ×1
performance ×1
postgis ×1
size ×1
snowflake-cloud-data-platform ×1
windows-ce ×1