MySQL中的模式和数据库之间有区别吗?在SQL Server中,数据库是与模式相关的更高级别的容器.
我读过这篇文章Create Schema并Create Database在MySQL中做了同样的事情,这使我相信模式和数据库对于相同的对象来说是不同的单词.
我很好奇SQL Server连接字符串中的令牌"Trusted_Connection"和"Integrated Security"之间有什么区别(我相信其他数据库/驱动程序不支持这些).我明白他们是等同的.
要比较不同供应商(Oracle,SQL Server,DB2,MySQL和PostgreSQL)的数据库,如何唯一地识别任何对象,我是否需要目录?例如,在Java的DatabaseMetadata中,我应该至少指定目录和模式fooPattern.
目录只是数据存储的抽象是真的吗?
我有一个带有许多表的postgresql数据库.如果我查询:
SELECT column_name
FROM information_schema.columns
WHERE table_name="my_table";
Run Code Online (Sandbox Code Playgroud)
我将获得正确返回的列的列表.
但是,当我查询时:
SELECT *
FROM "my_table";
Run Code Online (Sandbox Code Playgroud)
我收到错误:
(ProgrammingError) relation "my_table" does not exist
'SELECT *\n FROM "my_table"\n' {}
Run Code Online (Sandbox Code Playgroud)
有关为什么我可以获取列,但无法查询表的任何想法?目标是能够查询表.
问题:是否可以在迁移脚本中创建新数据库然后连接到该数据库?怎么样?
我的场景: 我正在尝试在我的Java项目中使用flyway(使用Jersey2.4 + tomcat 7 + PostgreSQL 9.3.1 + EclipseLink的RESTful应用程序)来管理使用git的不同开发人员之间的变化.我编写了我的init脚本并运行它:
PGPASSWORD='123456' psql -U postgres -f migration/V1__initDB.sql
Run Code Online (Sandbox Code Playgroud)
它工作得很好.问题是我不能用我的脚本创建新的数据库.当我在我的脚本中包含以下行时:
CREATE DATABASE my_database OWNER postgres ENCODING 'UTF8';
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
org.postgresql.util.PSQLException: ERROR: CREATE DATABASE cannot run inside a transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:395)
at com.googlecode.flyway.core.dbsupport.JdbcTemplate.executeStatement(JdbcTemplate.java:230)
at com.googlecode.flyway.core.dbsupport.SqlScript.execute(SqlScript.java:89)
at com.googlecode.flyway.core.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:72)
at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:252)
at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:250)
at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)
at com.googlecode.flyway.core.command.DbMigrate.applyMigration(DbMigrate.java:250)
at com.googlecode.flyway.core.command.DbMigrate.access$700(DbMigrate.java:47)
at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:189)
at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:138)
at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:56)
at com.googlecode.flyway.core.command.DbMigrate.migrate(DbMigrate.java:137)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:872)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:819)
at com.googlecode.flyway.core.Flyway.execute(Flyway.java:1200)
at …Run Code Online (Sandbox Code Playgroud) 我有一个表格,其中包含一个字符变化(12)字段,这是它的PRIMARY KEY.我跑了这个查询
SELECT * FROM bg WHERE bg_id ='470370111002'
Run Code Online (Sandbox Code Playgroud)
它从表中选择一行.一切看起来都不错 然后我试试.
INSERT INTO csapp_center_bgs(bg_id,center_id) VALUES('470370111002',2)
Run Code Online (Sandbox Code Playgroud)
bg_id上有一个外键,看起来像......
ALTER TABLE csapp_center_bgs
ADD CONSTRAINT csapp_center_bgs_bg_id_65c818f360c84dc5_fk_bg_bg_id
FOREIGN KEY (bg_id)
REFERENCES tiger.bg (bg_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED;
Run Code Online (Sandbox Code Playgroud)
这是精确的错误......
ERROR: insert or update on table "csapp_center_bgs" violates foreign key constraint "csapp_center_bgs_bg_id_65c818f360c84dc5_fk_bg_bg_id"
DETAIL: Key (bg_id)=(470370111002) is not present in table "bg".
********** Error **********
ERROR: insert or update on table "csapp_center_bgs" violates foreign key constraint "csapp_center_bgs_bg_id_65c818f360c84dc5_fk_bg_bg_id"
SQL state: …Run Code Online (Sandbox Code Playgroud) 在R中,我与此数据库具有SQL Server连接:
从这个答案,我知道这些水平是catalogs (=databases), schemas, and tables。如下代码:
library(odbc)
library(DBI)
library(RSQlite)
library(dbi)
confull <- odbc::dbConnect(odbc(),
Driver = "SQL Server",
Server = "XXX")
odbcListObjects(confull, schema="schema")
Run Code Online (Sandbox Code Playgroud)
产量:
name type
1 DBAInfo catalog
2 InBluePrism catalog
3 master catalog
4 msdb catalog
5 tempdb catalog
Run Code Online (Sandbox Code Playgroud)
问题:
catalogs?SQLite表中?对于第一个问题,我尝试了以下方法:
> all_schemas <- DBI::dbGetQuery(confull, "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA")
> all_schemas
SCHEMA_NAME
1 dbo
2 guest
3 INFORMATION_SCHEMA
4 sys
5 CCAutomation
6 XXXXXX\\xxxAdmin
7 XXXXXX\\z_swmon
8 NT …Run Code Online (Sandbox Code Playgroud) 来自 Silberschatz 等人的数据库系统概念:
\n\n\n4.5.7 模式、目录和环境
\n与早期的 \xef\xac\x81le 系统一样,早期的数据库系统也为所有关系提供一个名称空间。用户必须协调以确保他们不会尝试对不同的关系使用相同的名称。现代数据库系统为命名关系提供了三级层次结构。层次结构的顶层由目录组成,每个目录都可以包含架构。SQL 对象(例如关系和视图)包含\n在架构内。(某些数据库实现使用术语\n \xe2\x80\x9cdatabase"代替术语目录。)
\n为了对数据库执行任何操作,用户(或程序)\n必须\xef\xac\x81首先连接到数据库。用户必须提供用户名\n并且通常还需要提供密码以验证用户的身份。每个用户都有一个默认的目录和架构,并且该组合对于该用户来说是唯一的。当用户连接到数据库系统时,将为该连接设置默认\n目录和架构;这对应于当用户登录操作系统时\n当前目录被设置为用户\xe2\x80\x99 的主目录。
\n为了唯一地标识关系,可以使用由三部分组成的名称,例如\ncatalog5.univ schema.course 我们可以省略\n目录组件,在这种情况下,名称的目录部分被视为\n默认目录用于连接。因此,如果catalog5是默认目录,我们可以使用univ schema.course来唯一地标识相同的关系。
\n
谢谢。
\n从 R Studio 的ODBC 数据库文档中,我可以看到一个如何将 SQL 表读入 R 数据框架的简单示例:
data <- dbReadTable(con, "flights")
Run Code Online (Sandbox Code Playgroud)
BGBUref让我粘贴我正在尝试读取 R 数据框的表格图形(?)。这是来自我在 R studio 中的连接窗格。
如果我使用与上面相同的语法,con我的输出在哪里dbConnect(...) ,我得到以下内容:
df <- dbReadTable(con, "BGBURef")
#> Error: <SQL> 'SELECT * FROM "BGBURef"' nanodbc/nanodbc.cpp:1587: 42S02:
#> [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name
#> 'BGBURef'.
Run Code Online (Sandbox Code Playgroud)
我对“表”的理解是否不正确?或者我是否需要执行类似的操作才能访问嵌套BGBUref表:
df <- dbReadTable(con, "QnRStore\dbo\BGBURef")
#> Error: '\d' is an unrecognized escape in character string starting ""QnRStore\d"
Run Code Online (Sandbox Code Playgroud)
如果我单击小电子表格图标,数据BGBUref框将出现在 R Studio 中。就我而言,我只是不知道如何将其放入定义的数据框中df。
这是我运行这些命令时的输出: …
在 Postgres 和 SQL 标准中,我们都有这样的包含层次结构:
- 一台计算机可能有一个或多个集群。
- 数据库服务器是一个集群。
- 一个集群有[目录][8]。(目录 = 数据库)
- 目录有[schemas][9]。(Schema = [namespace][10] of tables,和安全边界)
- 模式有 [表][11]。
- 表有 [行][12]。
- 行有值,由[列][13]定义。
在 postgresql 中,我有一个名为的数据库students,下面有一个名为的表student:
postgres=# \c students
You are now connected to database "students" as user "postgres".
students=# \dt;
public | student | table | postgres
Run Code Online (Sandbox Code Playgroud)
我想知道数据库students是否也是目录?
students和之间的模式在哪里student?
一般来说,我如何列出
我怎样才能显示
谢谢。
postgresql ×5
sql-server ×4
database ×3
mysql ×2
r ×2
sql ×2
constraints ×1
db2 ×1
dbplyr ×1
flyway ×1
foreign-keys ×1
inheritance ×1
java ×1
jdbc ×1
odbc ×1
oracle ×1
r-dbi ×1
schema ×1
search-path ×1
sqlite ×1