0 简介
MySQL、MSSQL、PostgreSQL 的默认命令行工具对比及登录示例;
在登录后的 查询数据库列表、进入指定数据库、查询表结构 的详细操作示例。
1 默认命令行工具
| 数据库 | MySQL | MSSQL (sqlcmd) | PostgreSQL (psql) |
|---|---|---|---|
| 默认命令行工具 | mysql |
sqlcmd |
psql |
| 核心参数 | -u:指定用户名(必需)。 -p:提示输入密码(安全推荐)。 -h:远程主机地址(默认本地)。 -P:端口号(默认 3306)。 -D:直接选择数据库(可选)。 -e:直接执行 SQL 语句(非交互式)。 |
-S:服务器名称或 IP(必需)。 -U:用户名(必需)。 -P:密码(可选,交互式更安全)。 -d:初始数据库(可选)。 -Q:直接执行查询并退出(非交互式)。 -C:信任服务器证书。 |
-h:远程主机地址(默认本地)。 -p:端口号(默认 5432)。 -U:用户名(默认当前系统用户)。 -d:数据库名称(必需)。 -W:强制提示输入密码(即使配置了信任认证)。 |
| 本地登录 | mysql -u root -p |
sqlcmd -S . -E |
psql 指定用户和数据库: psql -U postgres -d test_db |
| 远程登录 | mysql -h 192.168.1.100 -P 3306 -u admin -pPASSWD |
sqlcmd -S 192.168.1.100 -U sa -P password 信任服务器证书: sqlcmd -S 192.168.1.100 -U sa -P password -C |
psql -h 192.168.1.100 -p 5432 -U remote_user -d remote_db -W |
| 非交互式执行查询 | mysql -h 192.168.1.100 -P 3306 -u admin -pPASSWD -e "SHOW DATABASES;" |
sqlcmd -S 192.168.1.100 -U sa -P password -C -Q "SELECT @@VERSION;" 信任服务器证书: psql -U postgres -C |
psql -U csg -d postgres -c "\l" 通过环境变量传递密码:PGPASSWORD='password ' psql -U csg -d postgres |
| 导入 SQL 文件 | mysql -u 用户名 -p 数据库名 < 文件.sql |
sqlcmd -S 服务器名 -U 用户名 -P 密码 -d 数据库名 -i 文件.sql |
psql -h 主机 -U 用户名 -d 数据库名 -f 文件.sql |
2 查询数据库
| 操作 | MySQL | MSSQL (sqlcmd) | PostgreSQL (psql) |
|---|---|---|---|
| 查询数据库 | SHOW DATABASES; |
SELECT name FROM sys.databases; GO |
\l 或 SELECT datname FROM pg_database; |
| 切换数据库 | USE test_db; |
USE test_db; GO |
\c test_db |
| 当前数据库名 | SELECT DATABASE(); |
SELECT DB_NAME() AS CurrentDatabase; GO |
SELECT current_database(); |
| 查询所有表 | SHOW TABLES; |
SELECT name FROM sys.tables; GO |
\dt |
| 查询表结构 | DESCRIBE users; |
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='users'; GO |
\d users 或 SQL 查询 |
3 创建用户
在 MySQL 、MSSQL (sqlcmd) 和 PostgreSQL (psql) 中,新建用户并授权的命令有所不同。
| 操作 | MySQL | MSSQL (sqlcmd) | PostgreSQL (psql) |
|---|---|---|---|
| 新建用户 | CREATE USER 'user'@'host' IDENTIFIED BY 'pass'; |
CREATE LOGIN user WITH PASSWORD='pass'; CREATE USER user FOR LOGIN user; |
CREATE USER user WITH PASSWORD 'pass'; |
| 授权 | GRANT ALL ON db.* TO 'user'@'host'; |
GRANT CONTROL ON DATABASE::db TO user; |
GRANT ALL ON DATABASE db TO user; |
| 刷新 | FLUSH PRIVILEGES; |
- | - |
注意事项
- MySQL 默认使用
root用户管理,授权后需FLUSH PRIVILEGES生效。 - MSSQL 需要先创建 Login(服务器级) ,再在目标数据库中创建 User(数据库级)。
- PostgreSQL 默认使用
postgres用户管理,授权后立即生效。
如果遇到权限问题,请确保使用 管理员账户(如 root、sa、postgres) 执行命令。
授予所有数据库权限的方法
| 数据库 | 授予所有数据库权限的方法 | 关键命令 |
|---|---|---|
| MySQL | 授予 *.* 的所有权限 |
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%'; |
| MSSQL | 授予 CONTROL SERVER 或逐个数据库 db_owner |
USE master; GO GRANT CONTROL SERVER TO user; GO 或动态 SQL 遍历数据库 |
| PostgreSQL | 授予 SUPERUSER 或逐个数据库 ALL PRIVILEGES |
ALTER USER user WITH SUPERUSER; 或动态 SQL 遍历数据库 |
以下是详细步骤:
3.1 MySQL
进入 MySQL 命令行
bash
mysql -u root -p
输入密码后进入 MySQL Shell。
新建用户
sql
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
'username':新用户名'host':允许访问的主机(%表示任意主机,localhost表示仅本地)'password':用户密码
示例:
sql
CREATE USER 'newuser'@'%' IDENTIFIED BY 'mypassword';
授权
sql
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
database_name.*:指定数据库及其所有表(*.*表示所有数据库)ALL PRIVILEGES:所有权限(可替换为SELECT, INSERT, UPDATE等)
示例:
sql
GRANT ALL PRIVILEGES ON mydb.* TO 'newuser'@'%';
刷新权限
sql
FLUSH PRIVILEGES;
验证
sql
SHOW GRANTS FOR 'newuser'@'%';
3.2 MSSQL (sqlcmd)
进入 sqlcmd
bash
sqlcmd -S server_name -U sa -P password
-S:SQL Server 实例名(如localhost或.\SQLEXPRESS)-U:管理员用户名(如sa)-P:密码
新建登录账户(Login)
sql
CREATE LOGIN login_name WITH PASSWORD = 'password';
示例:
sql
CREATE LOGIN newuser WITH PASSWORD = 'mypassword';
在目标数据库中创建用户并关联登录账户
sql
USE database_name;
CREATE USER user_name FOR LOGIN login_name;
示例:
sql
USE mydb;
CREATE USER newuser FOR LOGIN newuser;
授权
sql
GRANT CONTROL ON DATABASE::database_name TO user_name;
CONTROL:最高权限(可替换为SELECT, INSERT, UPDATE等)
示例:
sql
GRANT CONTROL ON DATABASE::mydb TO newuser;
验证
sql
SELECT name, type_desc FROM sys.database_principals;
退出 sqlcmd
sql
EXIT
3.3 PostgreSQL (psql)
进入 psql
bash
psql -U postgres -W
输入密码后进入 PostgreSQL Shell。
新建用户
sql
CREATE USER username WITH PASSWORD 'password';
示例:
sql
CREATE USER newuser WITH PASSWORD 'mypassword';
新建数据库(可选)
sql
CREATE DATABASE dbname;
示例:
sql
CREATE DATABASE mydb;
授权
sql
GRANT ALL PRIVILEGES ON DATABASE dbname TO username;
示例:
sql
GRANT ALL PRIVILEGES ON DATABASE mydb TO newuser;
更细粒度的权限控制(可选)
sql
\c mydb -- 切换到目标数据库
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO newuser;
验证
sql
\du -- 查看所有用户
\l -- 查看所有数据库
退出 psql
sql
\q
4 创建数据
| 操作 | MySQL | MSSQL (sqlcmd) | PostgreSQL (psql) |
|---|---|---|---|
| 创建数据库 | CREATE DATABASE IF NOT EXISTS testDB; |
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'testDB') BEGIN CREATE DATABASE testDB; END GO |
|
| 切换数据库 | USE testDB; |
USE testDB; GO |
\c testDB |
| 检查表是否存在 | CREATE TABLE IF NOT EXISTS `tb_factory_camera` |
IF OBJECT_ID('dbo.tb_factory_camera', 'U') IS NULL |
CREATE TABLE IF NOT EXISTS tb_factory_dict |
| 注释 | 创建表时添加COMMENT= |
单独添加EXEC sp_addextendedproperty |
单独添加 COMMENT ON TABLE COMMENT ON COLUMN |
| 插入测试数据 | INSERT INTO 数据库名.表名 |
INSERT INTO 数据库名.架构.表名 |
INSERT INTO 表名 |
详见下文
4.1 MySQL
1 ) 创建数据库
sql
CREATE DATABASE IF NOT EXISTS orbitmonitor;
USE orbitmonitor;
2 ) 创建表
sql
CREATE TABLE IF NOT EXISTS `tb_factory_camera` (
`camera_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '相机序号',
`camera_name` varchar(50) DEFAULT NULL COMMENT '相机设备的名称',
`camera_type` int(11) NOT NULL DEFAULT '0' COMMENT '相机类型 0:可见光(默认),1:红外+可见光',
`camera_ip` varchar(15) DEFAULT NULL COMMENT '相机设备的ip',
`camera_port` int(11) DEFAULT NULL COMMENT '相机设备的port',
`camera_channel` int(11) DEFAULT 1 COMMENT '相机设备的channel',
`camera_user` varchar(30) DEFAULT NULL COMMENT '相机设备的用户名',
`camera_pwd` varchar(30) DEFAULT NULL COMMENT '相机设备的密码',
`camera_status` int(1) NOT NULL DEFAULT '0' COMMENT '相机设备是否启动 0启用1禁用',
PRIMARY KEY (`camera_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='厂区行为相机设备表';
3 ) 插入数据
sql
INSERT INTO orbitmonitor.tb_factory_camera (camera_name,camera_type,camera_ip,camera_port,camera_channel,camera_user,camera_pwd,camera_status) VALUES
('hxcamera_192.168.1.151',0,'192.168.1.151',8000,1,'admin','csg300222',0),
('hxcamera_192.168.1.11',0,'192.168.1.11',8000,1,'admin','admin12345',0);
4.2 MSSQL
1 ) 创建数据库
检查数据库是否存在,如果不存在则创建
sql
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'orbitmonitor')
BEGIN
CREATE DATABASE orbitmonitor;
END
GO
切换到数据库
sql
USE orbitmonitor;
GO
2 ) 创建表
sql
IF OBJECT_ID('dbo.tb_factory_camera', 'U') IS NULL
BEGIN
CREATE TABLE dbo.tb_factory_camera (
camera_id INT IDENTITY(1,1) PRIMARY KEY, -- 自增主键
camera_name NVARCHAR(50) NULL, -- 相机名称
camera_type INT NOT NULL DEFAULT 0, -- 相机类型(0:可见光, 1:红外+可见光)
camera_ip NVARCHAR(15) NULL, -- 相机 IP
camera_port INT NULL, -- 相机端口
camera_channel INT DEFAULT 1, -- 相机通道
camera_user NVARCHAR(30) NULL, -- 相机用户名
camera_pwd NVARCHAR(30) NULL, -- 相机密码
camera_status BIT NOT NULL DEFAULT 0 -- 相机状态(0:启用, 1:禁用)
);
END
GO
添加表注释(MSSQL 不支持直接 COMMENT,改用扩展属性)
sql
EXEC sp_addextendedproperty
'MS_Description', N'厂区行为相机设备表',
'SCHEMA', 'dbo',
'TABLE', 'tb_factory_camera';
GO
添加列注释
sql
(示例:camera_id 列)
EXEC sp_addextendedproperty
'MS_Description', N'相机序号(自增主键)',
'SCHEMA', 'dbo',
'TABLE', 'tb_factory_camera',
'COLUMN', 'camera_id';
GO
EXEC sp_addextendedproperty
'MS_Description', N'相机名称(如:厂区东门相机)',
'SCHEMA', 'dbo',
'TABLE', 'tb_factory_camera',
'COLUMN', 'camera_name';
GO
3 ) 插入数据
sql
INSERT INTO dbo.tb_factory_camera (
camera_name, camera_type, camera_ip, camera_port, camera_channel, camera_user, camera_pwd, camera_status
)
VALUES
('hxcamera_192.168.1.151', 0, '192.168.1.151', 8000, 1, 'admin', 'csg300222', 0),
('hxcamera_192.168.1.11', 0, '192.168.1.11', 8000, 1, 'admin', 'admin12345', 0);
GO
4.3 PostgreSQL
1 ) 创建数据库
检查数据库是否存在,如果不存在则创建
sql
DO $$
BEGIN
IF NOT EXISTS (SELECT FROM pg_database WHERE datname = 'orbitmonitor') THEN
CREATE DATABASE orbitmonitor;
END IF;
END
$$;
切换到数据库
sql
/c orbitmonitor;
2 ) 创建表
sql
CREATE TABLE IF NOT EXISTS tb_factory_dict (
dict_id SERIAL PRIMARY KEY, -- SERIAL 替代 AUTO_INCREMENT
area_name VARCHAR(50) DEFAULT NULL, -- 注释通过 COMMENT ON 单独添加
camera_ip VARCHAR(15) DEFAULT NULL,
fun_type INTEGER DEFAULT NULL, -- PostgreSQL 中 INT 是 INTEGER 的别名
area_x1 INTEGER NOT NULL DEFAULT 0,
area_y1 INTEGER NOT NULL DEFAULT 0,
area_x2 INTEGER NOT NULL DEFAULT 0,
area_y2 INTEGER NOT NULL DEFAULT 0,
ex_area_x1 INTEGER NOT NULL DEFAULT 0,
ex_area_y1 INTEGER NOT NULL DEFAULT 0,
ex_area_x2 INTEGER NOT NULL DEFAULT 0,
ex_area_y2 INTEGER NOT NULL DEFAULT 0,
recognize_range INTEGER NOT NULL DEFAULT 0,
area_point VARCHAR(100) DEFAULT NULL -- PostgreSQL 默认字符编码为 UTF8,无需显式指定
);
添加表注释(MSSQL 不支持直接 COMMENT,改用扩展属性)
sql
-- 添加表注释
COMMENT ON TABLE tb_factory_dict IS '厂区行为相机电子围栏信息表';
添加列注释
sql
COMMENT ON COLUMN tb_factory_dict.dict_id IS 'id';
COMMENT ON COLUMN tb_factory_dict.area_name IS '电子围栏区域名称';
COMMENT ON COLUMN tb_factory_dict.camera_ip IS '相机设备的ip';
COMMENT ON COLUMN tb_factory_dict.fun_type IS '功能类型
3 ) 插入数据
sql
INSERT INTO tb_factory_camera (
camera_name, camera_type, camera_ip, camera_port, camera_channel, camera_user, camera_pwd, camera_status
)
VALUES
('hxcamera_192.168.1.151', 0, '192.168.1.151', 8000, 1, 'admin', 'csg300222', 0);
-1 附录
| 操作 | MySQL | MSSQL (sqlcmd) | PostgreSQL (psql) |
|---|---|---|---|
| 相关网址 | 官网 | 官方文档 |