1. 为什么要使用数据库
-
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
-
持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
2. 数据库的相关概念
DB:数据库(Database) |
---|
即存储数据的“仓库”,其本质是一个文件系统。它保存了一系列有组织的数据。 |
DBMS:数据库管理系统(Database Management System) |
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。 |
SQL:结构化查询语言(Structured Query Language) |
专门用来与数据库通信的语言。 |
数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据。
3. MySQL 概述
- MySQL是一个`开放源代码的关系型数据库管理系统`,由瑞典MySQL AB(创始人Michael Widenius)公司1995年开发,迅速成为开源数据库的 No.1。
- 2008被`Sun`收购(10亿美金),2009年Sun被`Oracle`收购。`MariaDB`应运而生。(MySQL 的创造者担心 MySQL 有闭源的风险,因此创建了 MySQL 的分支项目 MariaDB)
- MySQL6.x 版本之后分为`社区版`和`商业版`。
- MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
- MySQL是开源的,所以你不需要支付额外的费用。
- MySQL是可以定制的,采用了`GPL(GNU General Public License)`协议,你可以修改源码来开发自己的MySQL系统。
- MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
- MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持`4GB`,64位系统支持最大的表文件为`8TB`。
- MySQL使用`标准的SQL数据语言`形式。
- MySQL可以允许运行于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP和Ruby等。
4.SQL 分类
SQL语言在功能上主要分为如下3大类:
-
DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
-
主要的语句关键字包括
CREATE
、DROP
、ALTER
等。
-
-
DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据完整性。
-
主要的语句关键字包括
INSERT
、DELETE
、UPDATE
、SELECT
等。 -
SELECT是SQL语言的基础,最为重要。
-
-
DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和安全级别。
-
主要的语句关键字包括
GRANT
、REVOKE
、COMMIT
、ROLLBACK
、SAVEPOINT
等。
-
因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。
还有单独将
COMMIT
、ROLLBACK
取出来称为TCL (Transaction Control Language,事务控制语言)。
4.1基本规则
-
SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
-
每条命令以 ; 或 \g 或 \G 结束
-
关键字不能被缩写也不能分行
-
关于标点符号
-
必须保证所有的()、单引号、双引号是成对结束的
-
必须使用英文状态下的半角输入方式
-
字符串型和日期时间类型的数据可以使用单引号(' ')表示
-
列的别名,尽量使用双引号(" "),而且不建议省略as
-
4.2 SQL大小写规范 (建议遵守)
MySQL 在 Windows 环境下是大小写不敏感的
MySQL 在 Linux 环境下是大小写敏感的
- 数据库名、表名、表的别名、变量名是严格区分大小写的
- 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。
- 推荐采用统一的书写规范:
- 数据库名、表名、表别名、字段名、字段别名等都小写
- SQL 关键字、函数名、绑定变量等都大写
注释:
单行注释:#注释文字(MySQL特有的方式)
单行注释:-- 注释文字(--后面必须包含一个空格。)
多行注释:/* 注释文字 */
5.基本的SELECT语句
SELECT 标识选择哪些列 FROM 标识从哪个表中选择
-- 条件查询 SELECT * FROM table1 WHERE id=1; -- =查询 SELECT * FROM table1 WHERE id<5; -- <查询 SELECT * FROM table1 WHERE name IS NOT NULL; -- 查询 SELECT * FROM table1 WHERE id BETWEEN 3 AND 5; -- 范围查询,between 后跟小值,否则查询结果为空 SELECT * FROM table1 WHERE id>3 AND id<5; -- 符号范围查询,AND 可与&&互换 SELECT * FROM table1 WHERE id IN(3 , 4,5); -- in或or范围查询 SELECT * FROM table1 WHERE id =3 OR ID= 4 OR ID=5; -- in或or范围查询,OR 和||可互换 SELECT *FROM table1 WHERE name LIKE '__'; -- 模糊查询LIKE,几个下划线就代表几个字符 SELECT *FROM table1 WHERE name LIKE '%名'; -- 模糊查询LIKE,%代表任意多少个字符,只需在所需的位置标注所需的信息。-- 去除重复行
-- 默认情况下,查询会返回全部行,包括重复行。
SELECT DISTINCT id'编号' FROM table1; SELECT DISTINCT id'编号',name'姓名',age'年龄' FROM table1; -- DISTINCT去重查询 -- 1. DISTINCT 需要放到所有列名的前面,如果写成`SELECT salary, DISTINCT department_id FROM employees`会报错。 2. DISTINCT 其实是对后面所有列名的组合进行去重。/*一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘*’。使用通配符虽--然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们。*/
6.列的别名
-
重命名一个列
-
便于计算
-
紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。
-
AS 可以省略
-
建议别名简短,见名知意
-
SELECT id AS '编号',name AS'姓名' FROM table1; -- AS可省略
7.添加更新表中的数据
USE test; -- 使用数据库test SELECT * FROM TABLE1; -- 查询table1的所有字段信息和包含的数据 INSERT INTO TABLE1(ID, NAME, AGE) VALUES (2,'张三',20),(3,'王五',19),(4,'李四',20); -- 添加数据 select *FROM table1; UPDATE table1 SET id=5 WHERE name='刘好'; -- 更新name为刘好的id数据 INSERT INTO table1 VALUE (1,NULL,19); -- 加入数据,和张三王五那条一样,只是省略了id,name,age等字段 DELETE FROM table1 WHERE id=5; -- 删除id为5的数据