菜鸟科技网

数据库主要命令有哪些?

数据库作为信息系统的核心组件,其操作离不开一系列标准化的命令,这些命令构成了与数据库交互的基础,涵盖了数据定义、数据操作、数据查询和数据控制等多个方面,理解并熟练运用这些命令,是进行数据库管理与应用开发的关键。

数据库主要命令有哪些?-图1
(图片来源网络,侵删)

在数据定义层面,数据定义语言(DDL)负责数据库对象的创建与管理,CREATE命令用于创建各种数据库对象,例如创建数据库本身使用CREATE DATABASE database_name;,创建数据表则需指定表名及各列的名称、数据类型和约束条件,如CREATE TABLE table_name (column1_name data_type constraint, column2_name data_type constraint, ...);,常见的约束包括主键约束(PRIMARY KEY)、外键约束(FOREIGN KEY)、唯一约束(UNIQUE)、非空约束(NOT NULL)以及检查约束(CHECK),与CREATE相对的是DROP命令,它用于删除已存在的数据库对象,其语法为DROP OBJECT_TYPE object_name;,例如DROP TABLE table_name;会删除表及其所有数据,操作不可逆,需谨慎使用,ALTER命令则用于修改已存在的数据库对象的结构,最常用的是修改表结构,如添加列ALTER TABLE table_name ADD COLUMN column_name data_type;,修改列定义ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;,或删除列ALTER TABLE table_name DROP COLUMN column_name;,TRUNCATE命令用于快速清空表中的所有数据,仅保留表结构,其语法为TRUNCATE TABLE table_name;,它比DELETE FROM table_name;不带WHERE子句的删除操作效率更高,且不记录删除操作的每一行日志。

数据操作语言(DML)专注于对数据库中表的数据进行增、删、改操作,INSERT命令用于向表中插入新的数据行,其基本语法为INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);,若插入所有列的值,可省略列名列表,UPDATE命令用于修改表中已存在的数据,通常需要结合WHERE子句来指定修改的条件,否则将更新表中的所有行,语法为UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;,DELETE命令用于从表中删除数据行,同样需要WHERE子句来限定删除的范围,语法为DELETE FROM table_name WHERE condition;,若不带WHERE子句,则会删除表中的所有数据,其后果与TRUNCATE类似,但DELETE操作会记录日志,可以回滚。

数据查询语言(DQL)是数据库使用中最频繁的部分,其核心命令是SELECT,SELECT命令用于从数据库表中检索数据,其语法灵活且强大,最简单的形式是SELECT column1, column2, ... FROM table_name;,用于查询指定列的所有数据,使用则表示查询所有列,WHERE子句用于设定查询条件,过滤出符合特定条件的行,支持比较运算符(=, >, <, >=, <=, <>)、逻辑运算符(AND, OR, NOT)、范围运算符(BETWEEN...AND...)、集合运算符(IN, NOT IN)以及模糊查询(LIKE,配合通配符%和_),GROUP BY子句将查询结果按照一个或多个列进行分组,常与聚合函数(如COUNT计数、SUM求和、AVG平均值、MAX最大值、MIN最小值)一起使用,以便对每个分组进行统计,HAVING子句则用于对分组后的结果进行进一步过滤,类似于WHERE子句,但它是作用于组而不是单个行,ORDER BY子句用于对查询结果进行排序,可以指定按哪些列排序,以及排序方式是升序(ASC,默认)还是降序(DESC),LIMIT子句(在MySQL等数据库中)用于限制返回结果集的行数,常用于实现分页查询,如SELECT * FROM table_name LIMIT offset, count;

数据控制语言(DCL)用于管理数据库的访问权限和安全级别,GRANT命令用于授予用户或角色特定的权限,例如GRANT SELECT, INSERT ON table_name TO 'username'@'host';表示授予用户对指定表的查询和插入权限,REVOKE命令则用于撤销之前授予的权限,语法为REVOKE privilege_type ON object_name FROM 'username'@'host';,除了针对对象的权限,还有管理用户账户的命令,如CREATE USER用于创建新用户,DROP USER用于删除用户,ALTER USER用于修改用户属性(如密码设置ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';)。

数据库主要命令有哪些?-图2
(图片来源网络,侵删)

为了更清晰地展示部分命令的结构和示例,以下列举几个常用命令的简要对比:

命令类型 命令关键字 主要功能 基本语法示例
DDL CREATE 创建数据库对象 CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50));
DDL DROP 删除数据库对象 DROP TABLE students;
DDL ALTER 修改数据库对象结构 ALTER TABLE students ADD COLUMN age INT;
DML INSERT 插入数据 INSERT INTO students (id, name, age) VALUES (1, '张三', 20);
DML UPDATE 修改数据 UPDATE students SET age = 21 WHERE id = 1;
DML DELETE 删除数据 DELETE FROM students WHERE id = 1;
DQL SELECT 查询数据 SELECT * FROM students WHERE age > 18 ORDER BY name ASC;
DCL GRANT 授予权限 GRANT SELECT ON students TO 'reader'@'localhost';
DCL REVOKE 撤销权限 REVOKE INSERT ON students FROM 'reader'@'localhost';

这些命令构成了数据库操作的基石,通过它们的组合使用,可以实现对数据库中数据的全面管理和高效查询,无论是简单的数据录入,还是复杂的多表连接查询与统计分析,都离不开这些核心命令的灵活运用,掌握它们,是进入数据库世界、进行有效数据管理的关键一步。

相关问答FAQs

问题1:TRUNCATE TABLE和DELETE FROM table_name;在没有WHERE子句的情况下,都能清空表数据,它们有什么本质区别?

数据库主要命令有哪些?-图3
(图片来源网络,侵删)

解答:TRUNCATE TABLE和DELETE FROM table_name;(不带WHERE子句)虽然都能达到清空表数据的目的,但它们在实现方式、性能和影响上有显著区别。实现方式与日志:DELETE是DML命令,它会逐行删除表中的数据,并为每一行删除操作记录详细的日志(包括事务日志),因此可以回滚(在事务未提交前),而TRUNCATE是DDL命令,它通过释放表的数据页并重置表的定义(如自增计数器)来快速清空数据,它通常不记录删除每一行的日志,只记录整个表被截断的操作日志。性能:由于TRUNCATE不记录行级日志,其执行速度远快于DELETE,特别是对于大表,第三,事务与回滚:DELETE操作是事务的一部分,如果在一个事务中执行DELETE,可以回滚该删除操作,TRUNCATE通常也会在一个事务中执行(在支持事务的数据库中),但在某些数据库系统中(如MySQL的InnoDB引擎),TRUNCATE会隐式提交当前事务,因此不能回滚,第四,自增列:TRUNCATE会重置表的自增列计数器,使其从初始值(通常是1)重新开始,而DELETE不会影响自增列的当前值,第五,触发器:DELETE操作会激活表的触发器(如果定义了AFTER DELETE或BEFORE DELETE触发器),而TRUNCATE通常不会触发这些触发器,TRUNCATE效率更高,但功能更受限且不可控;DELETE效率较低,但更灵活,支持事务回滚和触发器。

问题2:在SQL查询中,WHERE子句和HAVING子句都可以用于过滤数据,它们的使用场景有何不同?

解答:WHERE子句和HAVING子句都用于过滤数据,但它们作用于查询的不同阶段,因此使用场景有明确区别。WHERE子句:在数据分组之前进行过滤,它作用于表中的原始数据行或通过JOIN连接后的行,根据指定的条件筛选出符合条件的行,然后这些行才会参与到后续的GROUP BY分组和聚合函数计算中,WHERE子句不能直接使用聚合函数(如SUM, AVG, COUNT等)作为过滤条件,因为聚合函数的值是在分组之后才计算出来的,WHERE子句通常用于过滤掉不满足基本业务条件的数据行,以减少后续处理的数据量,提高查询效率。HAVING子句:在数据分组之后进行过滤,它作用于由GROUP BY子句分组后产生的结果集(即每个分组),通常与GROUP BY子句一起使用,用于筛选出满足特定条件的分组,HAVING子句可以直接使用聚合函数,因为它是在聚合函数计算完成之后才进行过滤的,HAVING子句主要用于对分组后的统计结果进行进一步筛选,筛选出平均年龄大于25岁的部门”或“筛选出员工数量超过10人的部门”,WHERE是过滤“行”,HAVING是过滤“组”,在一个包含GROUP BY的查询中,通常会先用WHERE过滤原始行,再用GROUP BY分组,然后用聚合函数计算,最后用HAVING过滤分组结果。SELECT department_id, COUNT(*) as employee_count FROM employees WHERE salary > 5000 GROUP BY department_id HAVING COUNT(*) > 5;,此查询先筛选出薪资大于5000的员工,然后按部门分组,最后筛选出员工数大于5的部门。

分享:
扫描分享到社交APP
上一篇
下一篇