菜鸟科技网

Sq数据库命令大全有哪些核心命令?

SQL数据库命令大全涵盖了数据定义语言(DDL)、数据操纵语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)以及事务控制语言(TCL)等多个方面,以下将详细分类介绍常用命令,并通过表格形式对比部分语法差异,帮助用户全面掌握SQL操作。

Sq数据库命令大全有哪些核心命令?-图1
(图片来源网络,侵删)

数据定义语言(DDL)

DDL用于定义和管理数据库的结构,包括创建、修改和删除数据库对象。

  1. 创建数据库

    • 基本语法:CREATE DATABASE 数据库名;
    • 示例:CREATE DATABASE company_db;
    • 指定字符集:CREATE DATABASE company_db DEFAULT CHARACTER SET utf8mb4;
  2. 创建表

    • 基本语法:
      CREATE TABLE 表名 (
          列名1 数据类型 [约束],
          列名2 数据类型 [约束],
          ...
          [表级约束]
      );
    • 示例(创建员工表):
      CREATE TABLE employees (
          emp_id INT PRIMARY KEY,
          emp_name VARCHAR(50) NOT NULL,
          gender ENUM('男', '女'),
          hire_date DATE,
          salary DECIMAL(10,2),
          dept_id INT,
          FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
      );
  3. 修改表结构

    Sq数据库命令大全有哪些核心命令?-图2
    (图片来源网络,侵删)
    • 添加列:ALTER TABLE 表名 ADD COLUMN 列名 数据类型;
      示例:ALTER TABLE employees ADD COLUMN email VARCHAR(100);
    • 修改列:ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型;
      示例:ALTER TABLE employees MODIFY COLUMN emp_name VARCHAR(60);
    • 删除列:ALTER TABLE 表名 DROP COLUMN 列名;
      示例:ALTER TABLE employees DROP COLUMN email;
    • 重命名表:RENAME TABLE 旧表名 TO 新表名;
      示例:RENAME TABLE employees TO staff;
  4. 删除数据库或表

    • 删除表:DROP TABLE 表名;
    • 删除数据库:DROP DATABASE 数据库名;
    • 清空表数据(保留结构):TRUNCATE TABLE 表名;(比DELETE更快,不可回滚)

数据操纵语言(DML)

DML用于操作数据库中的数据,包括插入、更新和删除记录。

  1. 插入数据(INSERT)

    • 插入单条记录:INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2);
      示例:INSERT INTO employees (emp_id, emp_name, hire_date) VALUES (1001, '张三', '2023-01-15');
    • 插入多条记录:
      INSERT INTO employees (emp_id, emp_name, hire_date) VALUES 
          (1002, '李四', '2023-02-20'),
          (1003, '王五', '2023-03-10');
    • 从其他表插入:INSERT INTO 目标表 (列名) SELECT 列名 FROM 源表 WHERE 条件;
  2. 更新数据(UPDATE)

    Sq数据库命令大全有哪些核心命令?-图3
    (图片来源网络,侵删)
    • 基本语法:UPDATE 表名 SET 列名1=值1, 列名2=值2 WHERE 条件;
    • 示例:UPDATE employees SET salary=8500 WHERE emp_id=1001;
    • 注意:省略WHERE会更新全表数据,需谨慎使用。
  3. 删除数据(DELETE)

    • 基本语法:DELETE FROM 表名 WHERE 条件;
    • 示例:DELETE FROM employees WHERE emp_id=1003;
    • 与TRUNCATE的区别:DELETE可回滚,逐条删除;TRUNCATE不可回滚,清空表并重置自增ID。

数据查询语言(DQL)

DQL用于从数据库中检索数据,核心是SELECT语句。

  1. 基本查询

    • 查询所有列:SELECT * FROM 表名;
    • 查询指定列:SELECT 列名1, 列名2 FROM 表名;
    • 去重:SELECT DISTINCT 列名 FROM 表名;
      示例:SELECT DISTINCT dept_id FROM employees;
  2. 条件查询(WHERE)

    • 比较运算符:, >, <, >=, <=, <>(或)
    • 逻辑运算符:AND, OR, NOT
    • 范围查询:BETWEEN...AND..., IN(值1, 值2)
    • 模糊查询:LIKE(匹配任意多个字符,_匹配单个字符)
      示例:SELECT * FROM employees WHERE emp_name LIKE '张%';
    • 空值判断:IS NULL, IS NOT NULL
  3. 排序(ORDER BY)

    • 升序(默认):SELECT * FROM 表名 ORDER BY 列名 ASC;
    • 降序:SELECT * FROM 表名 ORDER BY 列名 DESC;
    • 多列排序:SELECT * FROM employees ORDER BY dept_id ASC, salary DESC;
  4. 聚合函数

    • 常用函数:COUNT()(计数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)
      示例:SELECT dept_id, AVG(salary) AS avg_salary FROM employees GROUP BY dept_id;
  5. 分组(GROUP BY)与筛选(HAVING)

    • 分组:SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名;
    • 分组后筛选:SELECT dept_id, COUNT(*) AS emp_count FROM employees GROUP BY dept_id HAVING COUNT(*)>5;
      (HAVING与WHERE的区别:WHERE在分组前过滤行,HAVING在分组后过滤组)
  6. 限制结果数量(LIMIT)

    • 基本语法:SELECT * FROM 表名 LIMIT 起始位置, 数量;
    • 示例(分页):SELECT * FROM employees LIMIT 0, 10;(从第1条开始取10条)

数据控制语言(DCL)

DCL用于控制数据库的访问权限,主要包括授权和撤销权限。

  1. 授权(GRANT)

    • 语法:GRANT 权限 ON 数据库对象 TO 用户 [WITH GRANT OPTION];
    • 示例:GRANT SELECT, INSERT ON company_db.employees TO 'user1'@'localhost';
    • WITH GRANT OPTION允许用户将权限转授给其他用户。
  2. 撤销权限(REVOKE)

    • 语法:REVOKE 权限 ON 数据库对象 FROM 用户;
    • 示例:REVOKE INSERT ON company_db.employees FROM 'user1'@'localhost';

事务控制语言(TCL)

TCL用于管理事务,确保数据的一致性和完整性。

  1. 事务基本操作

    • 开启事务:START TRANSACTION;(或BEGIN;
    • 提交事务:COMMIT;(保存更改)
    • 回滚事务:ROLLBACK;(撤销未提交的更改)
    • 示例:
      START TRANSACTION;
      UPDATE accounts SET balance=balance-100 WHERE user_id=1;
      UPDATE accounts SET balance=balance+100 WHERE user_id=2;
      COMMIT; -- 或 ROLLBACK;
  2. 事务隔离级别

    • 查看当前隔离级别:SELECT @@transaction_isolation;
    • 设置隔离级别:SET TRANSACTION ISOLATION LEVEL 级别;
      (级别包括:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)

常用函数

SQL提供了丰富的内置函数,简化数据处理。

  1. 字符串函数

    • CONCAT(str1, str2):拼接字符串
    • SUBSTRING(str, 起始位置, 长度):截取子串
    • LENGTH(str):字符串长度
    • LOWER(str)/UPPER(str):转小写/大写
  2. 数值函数

    • ROUND(num, 小数位数):四舍五入
    • CEIL(num)/FLOOR(num):向上/向下取整
    • MOD(num1, num2):取余
  3. 日期函数

    • CURDATE()/NOW():当前日期/日期时间
    • DATE_FORMAT(date, 格式):格式化日期(如%Y-%m-%d
    • DATEDIFF(date1, date2):计算日期差

不同数据库的语法差异对比

功能 MySQL SQL Server Oracle
自增列 INT AUTO_INCREMENT INT IDENTITY(1,1) SEQUENCE + TRIGGER
分页查询 LIMIT 0,10 OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY ROWNUM <= 10 AND ROWNUM > 0
字符串拼接 CONCAT(str1, str2) str1 + str2CONCAT(str1, str2) str1 || str2CONCAT(str1, str2)
注释 -- 注释# 注释 -- 注释/* 注释 */ -- 注释/* 注释 */

相关问答FAQs

Q1: SQL中DELETE和TRUNCATE的区别是什么?
A1: 主要区别有三点:

  1. 功能:DELETE用于删除满足条件的行(可带WHERE条件),TRUNCATE直接清空全表数据;
  2. 性能:TRUNCATE是DDL语句,操作速度快(直接删除表数据并重建表),DELETE是DML语句,逐行删除,速度较慢;
  3. 事务与日志:DELETE操作会被记录到事务日志中,支持回滚(ROLLBACK),TRUNCATE不记录日志,通常不可回滚(部分数据库支持事务回滚);
  4. 自增ID:TRUNCATE会重置自增列的计数器(从1开始),DELETE不会影响自增ID的当前值。

Q2: 如何优化SQL查询性能?
A2: 优化SQL查询性能可从以下方面入手:

  1. 索引优化:为经常查询、排序或作为条件的列创建索引(如WHEREJOINORDER BY涉及的列),但避免过度索引(降低写入性能);
  2. 避免全表扫描:确保查询使用索引,避免对列进行函数操作(如WHERE YEAR(hire_date)=2023,应改为hire_date >= '2023-01-01' AND hire_date < '2024-01-01');
  3. 减少返回数据量:使用SELECT指定必要列,避免SELECT *;合理使用LIMIT分页;
  4. 优化JOIN操作:确保JOIN字段有索引,小表驱动大表(将小表放在驱动表位置);
  5. 使用EXPLAIN分析:通过EXPLAIN查询执行计划,检查是否走索引、是否出现临时表或filesort;
  6. 事务管理:避免长事务,及时提交或回滚,减少锁持有时间。
分享:
扫描分享到社交APP
上一篇
下一篇