2 常用数据库命令行操作

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 \lSELECT 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 创建用户

MySQLMSSQL (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; - -

注意事项

  1. MySQL 默认使用 root 用户管理,授权后需 FLUSH PRIVILEGES 生效。
  2. MSSQL 需要先创建 Login(服务器级) ,再在目标数据库中创建 User(数据库级)
  3. PostgreSQL 默认使用 postgres 用户管理,授权后立即生效。

如果遇到权限问题,请确保使用 管理员账户(如 rootsapostgres 执行命令。

授予所有数据库权限的方法

数据库 授予所有数据库权限的方法 关键命令
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)
相关网址 官网 官方文档
相关推荐
七夜zippoe2 小时前
Docker容器化实战:核心概念、镜像制作与多阶段构建全解析
java·jvm·数据库·docker·oracle·容器化
跟着珅聪学java2 小时前
Electron 精美菜单设计
运维·前端·数据库
xcLeigh2 小时前
Oracle 替换工程实践深度解析:金仓数据库破解 PL/SQL 兼容与跨交易日数据一致性核心难题
数据库·sql·oracle·数据迁移·金仓·kingbasees
软件开发技术深度爱好者2 小时前
基于 Python tkinter 开发的SQLite数据库可视化小工具
数据库·sqlite
泯仲2 小时前
从零起步学习MySQL 第四章:DQL查询全解析
数据库·mysql
原来是猿2 小时前
MYSQL【库操作】
数据库·mysql
皮皮哎哟2 小时前
嵌入式数据库从入门到精通
linux·数据库·sqlite3·sqlite3_open
爱吃羊的老虎3 小时前
【后端】MySQL 主从复制原理深度解析
数据库·mysql
blues92573 小时前
MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互
java·数据库·mysql