Bootstrap

数据库与SQL语言

1. 常见数据库介绍

1.1 关系型数据库

数据库介绍
MySQL开源免费的数据库,中型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
Oracle收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
DB2IBM公司的数据库产品,收费的。常应用在银行系统中。
SQLserverMicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SQLite嵌入式的小型数据库,应用在手机端。

1.2 非关系型数据库

数据库介绍
Redis是一个小而美的数据库,主要用在key-value 的内存缓存,读写性能极佳。
HBaseHBase是列式数据库,目标是高效存储大量数据。
MongoDBMongoDB是文档型数据库,非常接近关系型数据库的。

2. SQL语言分类

2.1 DDL

DDL是指数据库定义语言(Data Definition Language),用于定义和管理数据库对象,例如表、索引、视图等。

DDL语句不涉及具体数据的操作,而是用于创建、修改和删除数据库结构。

下面是对DDL语句按照操作对象分类的详细解释:

(1)对数据库的操作:

CREATE DATABASE:用于创建数据库。

ALTER DATABASE:用于修改数据库的属性。

DROP DATABASE:用于删除数据库。

USE:用于选择要使用的数据库。

(2)对表的操作:

CREATE TABLE:用于创建表。

ALTER TABLE:用于修改表的结构,如添加、修改或删除列、索引等。

DROP TABLE:用于删除表。

TRUNCATE TABLE:用于删除表中的数据,但保留表的结构。

RENAME TABLE:用于重命名表。

(3)对列的操作:

ALTER TABLE:通过ALTER TABLE语句,可以添加、修改或删除表的列。

RENAME COLUMN:用于重命名表中的列。

(4)对索引的操作:

CREATE INDEX:用于创建索引。

DROP INDEX:用于删除索引。

(5)对约束的操作:

CREATE TABLE:可以在CREATE TABLE语句中定义表级约束,如主键约束、唯一约束、外键约束等。

ALTER TABLE:通过ALTER TABLE语句,可以添加、修改或删除表级约束。

(6)对视图的操作:

CREATE VIEW:用于创建视图。

ALTER VIEW:用于修改视图的定义。

DROP VIEW:用于删除视图。

(7)对存储过程与函数的操作:

CREATE PROCEDURE:用于创建存储过程。

ALTER PROCEDURE:用于修改存储过程的定义。

DROP PROCEDURE:用于删除存储过程。

CREATE FUNCTION:用于创建函数。

ALTER FUNCTION:用于修改函数的定义。

DROP FUNCTION:用于删除函数。

(8)其他操作:

COMMENT:用于为数据库、表、列等对象添加注释。

注意1:具体的语法和用法可能因数据库管理系统的不同而有所差异。在实际使用中,请参考相应的数据库文档以获得准确的语法和用法。

注意2:DDL语句会自动提交事务,即在执行完DDL语句后,会立即生效,并且无法回滚。因此,在执行DDL语句之前,请确保针对数据库的操作是安全的,并且确保没有正在进行的重要数据操作。

2.2 DML

DML是指数据库操作语言(Data Manipulation Language),用于对数据库中的数据进行操作,包括插入、更新和删除数据。

以下是常见的DML语句和其功能:

INSERT INTO:用于向数据库中插入新的行。

例:INSERT INTO mytable (column1, column2) VALUES ('value1', 'value2');

UPDATE:用于修改数据库中的数据。

例:UPDATE mytable SET column1 = 'new value' WHERE condition;

DELETE FROM:用于从数据库中删除数据。

例:DELETE FROM mytable WHERE condition;

注意1:DML语句必须在事务中执行,以确保数据的一致性和完整性。在执行DML语句之后,可以通过提交事务(COMMIT)将修改的数据永久保存到数据库中,或者通过回滚事务(ROLLBACK)来撤销对数据的修改。

注意2:DML语句也可以与DDL语句结合使用,例如可以在一个事务中先创建表(DDL),然后插入数据(DML),最后提交事务。这样可以确保数据的一致性,并且可以实现复杂的数据库操作。

2.3 DQL

DQL是指数据库查询语言(Data Query Language),用于从数据库中检索数据。

最常见的DQL语句是SELECT,它用于从一个或多个表中查询数据,并返回满足指定条件的结果集。

以下是常见的DQL语句和其功能:

SELECT:用于从数据库中查询数据。

例:SELECT column1, column2 FROM mytable WHERE condition;

FROM:指定要查询的数据表。

例:SELECT column1, column2 FROM mytable;

WHERE:指定查询过滤条件。

例:SELECT column1, column2 FROM mytable WHERE condition;

GROUP BY:按照指定的列对查询结果进行分组。

例:SELECT column1, COUNT(column2) FROM mytable GROUP BY column1;

HAVING:指定对分组后的结果进行过滤的条件。

例:SELECT column1, COUNT(column2) FROM mytable GROUP BY column1 HAVING COUNT(column2) > 10;

ORDER BY:指定查询结果的排序顺序。

例:SELECT column1, column2 FROM mytable ORDER BY column1 ASC;

JOIN:用于将多个表按照某些条件连接在一起进行查询。

例:SELECT t1.column1, t2.column2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;

注意1:除了SELECT语句,DQL还可以包括其他一些语句,如子查询语句(将一个查询结果作为另一个查询的输入)、WITH语句(定义可重用的查询块)、UNION操作(将多个查询结果合并)等。

注意2:DQL语句是用于查询数据的,不会对数据库中的数据进行修改。如果需要修改数据,则需要使用DML语句(如INSERT、UPDATE和DELETE)或DDL语句(如CREATE和ALTER)来操作数据库。

2.4 DCL

DCL是指数据库控制语言(Data Control Language),用于定义数据库的安全性和完整性规则,以及授权和撤销用户对数据库对象的访问权限。

DCL语句用于管理数据库的安全性和完整性,限制哪些用户可以对数据库进行操作,以及哪些操作可以执行。通过GRANT命令,可以授予用户或用户组包括SELECT、INSERT、UPDATE、DELETE等在内的数据库操作权限。REVOKE命令可以从用户或用户组中撤销已授予的权限。DENY命令用于明确拒绝用户执行某些操作的权限。

除了权限管理,DCL还包括事务管理的命令。事务是一组数据库操作,要么全部执行,要么全部回滚。COMMIT命令用于将当前事务中的所有修改永久保存到数据库中,而ROLLBACK命令用于撤销当前事务中的所有修改。

以下是常见的DCL命令和其功能:

GRANT:用于向用户或用户组授予特定的数据库操作权限。

例:GRANT SELECT, INSERT ON mytable TO user;

REVOKE:用于从用户或用户组中撤销特定的数据库操作权限。

例:REVOKE DELETE ON mytable FROM user;

DENY:用于阻止用户或用户组对数据库对象进行特定的操作,即拒绝权限。

例:DENY UPDATE ON mytable TO user;

COMMIT:将当前事务中的所有修改永久保存到数据库中。

例:COMMIT;

ROLLBACK:撤销当前事务中的所有修改,恢复到事务开始前的状态。

例:ROLLBACK;

注意:DCL语句一般只能由具有特定权限的用户执行。数据库管理员(DBA)通常具有执行DCL语句的权限,以便对数据库进行有效的授权和管理。

3. SQL基本语法

(1)SQL语句可以单行或多行书写,以分号结尾。

正确的写法:

select * from students;

(2)可使用空格和缩进来增强语句的可读性。

正确的写法:

select
  *
from students;

(3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

虽然MySQL数据库的SQL语句不区分大小写,但是在实践中,为了代码的可读性和一致性,关键字通常会使用大写。

例如:

正确的写法:

SELECT * FROM user;

等价于

select * from user; 

(4)可以使用单行与多行注释。

对于单行注释,可以使用"--"符号(“--”后有空格)进行注释,例如:

-- 这是单行注释,注释内容写在行的最开始位置
SELECT column1, column2
FROM mytable
WHERE condition;

对于多行注释,可以使用"/* ... */"进行注释,例如:

/*
这是多行注释,
可以写多行的注释内容,
直到遇到 
*/
SELECT column1, column2
FROM mytable
WHERE condition;
​

;