ORACLE、MySQL、PostgreSQL 客户端 sqlplus,mysql,psql 常用命令对比(三)
文章目录
[toc]
本篇是 ORACLE、MySQL、PostgreSQL 客户端 sqlplus,mysql,psql 常用命令对比 系列文章的第三篇。第一篇是在 1/16日发布,第二篇是1/20日发布,现在是第三篇,就这样鸽了半年。
ORACLE、MySQL、PostgreSQL 客户端 sqlplus,mysql,psql 常用命令对比(一) 客户的安装以及连接数据库
ORACLE、MySQL、PostgreSQL 客户端 sqlplus,mysql,psql 常用命令对比(二)提示符的配置
刚接触PG的时候有个事情最疑惑,就是有时候输入exit会提醒我 Use \q to quit.
有时候不会,而有些时候呢,他不提醒我,就可以直接退出。
1 | abc=# select * from |
后来才搞明白,原来是上一个查询没结束的时候,会提醒\q
退出。虽然这个提醒很友好,但是对我来说很困惑,主要是你在书写换行的输入(也就是未完成的一个完整的sql)提示符是跟重新输入的提示符是完全一样的(就在写这篇文章的时候发现是不一样的,稍微有点区别。。。)。
mysql的提示如下:
1 | mysql> select * from |
这个提示符跟重新输入一个完整查询的提示符是有区别的,可以知道这是未完成的输入。
sqlplus 的提示符,这也很明显是一个查询没有完成。
1 | SQL> select * from |
psql 的提醒就完全不一样了,未完成的语句, 就在刚才,也就我写这篇文章的时候,才发现,是有区别的,是有区别的,是有区别的,之前是我眼神不济,是我眼神不济,是我眼神不济,是由 =# 变成了 -# ,普通用户是由 => 变成了 -> ,其中唯一的变化是有 = 变成了 - ,而且还是在中间夹杂着变化了。
其实你仔细观察 MySQL 也是变成了 -,但是这个 - (减号我通常叫横线) 不是主要的,主要的是 前面的 mysql 标识没了,同时他是又 > 变成了 -> ,也就是新增了长度,同时前面的 mysql 标识去掉了,很容易分辨,但是 psql,就是由 = 变成了 - ,辨识度有一点点低。
1 | psql abc |
其实我觉得 PROMPT2
设置成带行号跟 sqlpus
那样更好,跟 mysql
那样也可以。
这是带行号,前后带空格的,跟 ORACLE 的 sqlplus
类似
psql
跟 sqlplus
类似的提示符:
1 | abc=# \set PROMPT2 ' %l ' |
psql
跟 mysql
类似的提示符:
1 | abc=# \set PROMPT2 ' %[%033[1;31m%]%R%[%033[0m%]%# ' |
命令行结束符
三种数据库都主要以 分号(;
) 为结束符。
mysql 命令行结束符
但是 mysql 还可以以\g 和\G 作为结束符。
ego (\G) Send command to mysql server, display result vertically.
go (\g) Send command to mysql server.
其中 \G
可以竖直的形式展示,\g
等价于 ;
,如同如下演示。
1 | mysql> select * from cards limit 3\g |
psql 命令行结束符
psql 呢,\g
也等价于分号;
(可以通过help 查看到 \g or terminate with semicolon to execute query)
1 | abc=# help |
sqlplus 命令行结束符
sqlplus 呢,他就有点复杂了,
sqlplus 联机文档地址:http://download.oracle.com/docs/cd/E11882_01/server.112/e16604/ch_four.htm#i1039255
[原文]
Ending a SQL Command
You can end a SQL command in one of three ways:
- with a semicolon (
;
)- with a slash (/) on a line by itself
- with a blank line
可以通过下面三种方式来结束SQL命令:
- 使用一个分号(;);
- 在单独一行使用一个斜划线(/);
- 使用一个空行;
键入分号就是告诉 sqlplus 你将要执行命令,通常在命令最后一行的末尾;
像例子中表示的那样:sqlplus 进程将 SQL 命令存储在 SQL 缓冲中,可以查看 SQL 细节。如果你在输入分号之前错误的按了回车键,sqlplus将会提示你在下一行继续输入命令,直到你键入分号然后按回车键执行命令为止。
斜划线独自占一行的意思就是告诉 sqlplus 你将要执行命令了。在命令的最后 一行按回车,sqlplus提示你下一个行号,然后可以键入斜划线,然后按回车,则执行命令。sqlplus将执行的命令存储在缓冲里。
空行在SQL语句或脚本中表示你想结束键入命令,但不执行。当你在命令的最后一行按回车键,sqlplus提示你下一行号。
总结:记住都是以分号(;)结束就好了,再记住 mysql 的\G
是以竖直的方式显示就好了。
显示当前用户
sqlplus | mysql | psql |
---|---|---|
show user |
select current_user; select user(); |
select * from current_user; select user; |
注意⚠️:MySQL 中的 select current_user;和
select user();
的区别:
1 | SELECT current_user; |
- 返回当前会话正在使用的用户账户。
- 这个账户可能是通过
GRANT
语句赋予权限的账户。 - 反映的是当前连接的实际权限。
1 | SELECT user(); |
- 返回客户端最初连接到 MySQL 服务器时使用的用户账户。
- 这个值在整个连接期间保持不变。
- 不受
GRANT
语句或DEFINER
权限的影响。
显示当前数据库
sqlplus | mysql | psql |
---|---|---|
show parameter db_name |
select database(); |
select current_database(); |
显示所有用户
sqlplus | mysql | psql |
---|---|---|
select username from dba_users |
select user,host from mysql.user; |
\du; SELECT usename FROM pg_user; |
显示所有数据库
sqlplus | mysql | psql |
---|---|---|
- | show databases; |
\l; \l+; |
创建数据库(database)
sqlplus | mysql | psql |
---|---|---|
dbca 命令 |
create database; |
create database |
注意:数据库(database)和 schema
的区别:
MySQL 中 database
和 schema
是相同的,可以通过help create database;
来看到。
1 | help create database; |
PostgreSQL 中 schema
和 database
是不同的。这里我问了下AI,给我提供了以下区别:
在 PostgreSQL 中,数据库(database)和模式(schema)是两个不同层级的组织结构,它们有着明显的区别。让我们详细比较一下:
- 层级
- Database:是最高层级的容器。
- Schema:是数据库内的一个命名空间。
- 包含关系
- 一个 PostgreSQL 实例可以包含多个数据库。
- 一个数据库可以包含多个模式。
- 隔离性
- Database:完全隔离,不同数据库的对象不能直接互相访问。
- Schema:同一数据库内的不同模式可以互相访问(如果有权限)。
- 连接
- 连接到 PostgreSQL 时,你必须指定一个数据库。
- 连接后,可以在不同的模式间切换。
- 默认情况
- 每个新建的数据库都会自动创建一个名为 “public” 的默认模式。
- 数据库没有默认名称,必须明确创建。
- 用途
- Database:通常用于分隔不同的应用或项目。
- Schema:用于在同一数据库内组织对象,如表、视图、函数等。
- 权限管理
- Database:可以控制谁可以连接到数据库。
- Schema:可以更细粒度地控制对特定对象组的访问。
- 命名空间
- 不同数据库中的对象名称可以重复。
- 同一数据库不同模式中的对象名称可以重复。
- 资源隔离
- Database:提供更强的资源隔离,可以有独立的配置。
- Schema:主要提供逻辑隔离,共享数据库资源。
- 备份和恢复
- 通常以数据库为单位进行备份和恢复。
- 模式级别的备份需要特殊处理。
- 创建语法
- Database:
CREATE DATABASE dbname;
- Schema:
CREATE SCHEMA schemaname;
- 使用场景
- Database:不同的客户、完全独立的应用。
- Schema:同一应用的不同模块、多租户系统中的租户隔离。
- 切换
- Database:需要重新连接。
- Schema:可以在同一连接中切换(
SET search_path TO myschema;
)。总结:
- 数据库提供了更高层次的隔离和组织,适合完全独立的应用或项目。
- 模式提供了数据库内部的逻辑分组,适合同一应用内的模块化组织或多租户隔离。
ORACLE 中 database
和 schema
的区别
通过 ORACLE 的 database
是整个 Oracle 实例,通常一个实例管理一个数据库,包含所有的数据文件、控制文件、重做日志文件等。
而 schema
在 oracle 中 基本上等同于用户账户,每个用户账户自动拥有一个与其用户名同名的schema,schema是数据库对象(如表、视图、存储过程等)的集合。
ORACLE 中 database
是通过 dbca 复杂的命令来创建的,而 schema
是通过 create user
来创建。
进入数据库
进入数据库 abc
sqlplus | mysql | psql |
---|---|---|
- | use abc; |
\c abc |
退出数据库
sqlplus | mysql | psql |
---|---|---|
exit /quit |
exit /quit |
exit /quit /\q |
查看表结构
sqlplus | mysql | psql |
---|---|---|
desc tablename |
desc tablename |
\d tablename |
显示 sql 运行时间
sqlplus | mysql | psql |
---|---|---|
set timing on set timing off |
默认显示 | \timing on \timing off |
sqlplus 是通过 set timing on
/set timing off
来显示或者取消sql 运行时间,其中of
和off
是必填项。psql 是 执行一次 \timing
是显示,再执行一次就是取消,或者使用 on
/off
来显示或者取消,on
/off
不是必填项。
编辑 SQL
sqlplus | mysql | psql |
---|---|---|
edit |
edit |
\e |
清空屏幕或者其他操作系统命令
sqlplus | mysql | psql |
---|---|---|
!clear |
system clear |
\! clear |
注意:sqlplus 和 psql 都是!调用os 命令,但是 sqlplus 的 !
和 命令之间可以有空格也可以没有空格,但是 psql 的 !
前面需要加\
,同时 !
和 命令之间必须要有个空格,不光clear
命令可以使用,其他的操作系统命令也都可以使用,比如 hostname
,ifconfig
等
执行 sql 文件
sqlplus | mysql | psql |
---|---|---|
@c.sql |
source c.sql |
\i c.sql |
原文作者: liups.com
原文链接: http://liups.com/posts/159adffb/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议