数据库的相关概念:
DB:数据库(Database):
即存储数据的仓库,其本质是一个文件系统。保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System):
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
SQL:结构化查询语言(Structured Query Language):
专门用来与数据库通信的语言。
RDBMS:关系型数据库(Relational Database Management System):
- 关系型数据库,模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。
- 关系型数据库以行(row)和列(column)的形式存储数据,以便于用户理解。这一系列的行和列被称为表(table),一组表组成了一个库(database)。
- 表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的联系均用关系模型类表示。关系型数据库,就是建立在关系模型基础上的数据库。
- SQL就是关系型数据库的查询语言。
关系型数据库的优势:
- 复杂查询:可以用SQL语句方便地在一个表以及多个表之间做非常复杂的数据查询。
- 事务支持:使得对于安全性很高的数据访问要求得以实现。
非关系型数据库:
基于键值对存储数据,不需要经过SQL层的解析,性能非常高。同时,通过减少不常用的功能,进一步提高性能。
关系型数据库设计规则:
- 关系型数据库的典型数据结构就是数据表,这些数据表的组成都是结构化的。
- 将数据放到表中,表再放到库中。一个数据库可以有多个表,每一个表都有一个名字,用来标识自己。表名具有唯一性。
- 表具有一些特性,这些特性定义了数据在表中如何存储(类似于“类”)。
表、记录、字段
- E-R(entity-relationship,实体-联系)模型中三个主要概念:实体集、属性、联系集。
- 一个实体集(class)对应于数据库中的一个表(table),一个实体(instance)则对应数据库表中的一行(row),也称为一条记录(record)。一个属性(attribute)对应于数据表中的一列(column),也称为一个字段(field)。
表的关联关系:
- 表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
- 四种关联关系:一对一关系,一对多关系,多对多关系,自我引用。
SQL的分类:
DDL(Data Define Language、数据定义语言):这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要的语句关键字包括CREATE、DROP、ALTER、RENAME、TRUNCATE等。
DML(Data Manipulation Language、数据操作语言):用于添加、删除、更新和查询数据库记录,并检查数据完整性。
主要的语句关键字包括INSERT、DELETE、UPDATE、SELECT等。
DCL(Data Control Language、数据控制语言):用于定义数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字包括GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT等。
由于查询语句使用的比较频繁,所以很多人将查询语句分出类作为一类:DQL(数据查询语言),也有将COMMIT、ROLLBACK去出来称为TCL(事物控制语言)。
SQL语言的规则与规范
基本规则:
- SQL可以写在一行或多行。为了提高可读性,各子句分行写,必要时使用缩进。
- 每一条命令以;或\g或\G结束。
- 关键字不能被缩写也不能分行。
- 关于标点符号:
· 必须保证所有的括号、引号是成对结束的。
· 必须使用英文状态下的半角输入方式(即要用英文输入写代码,不能用非英文输入)。
字符串型和日期时间类型的数据可以使用单引号表示。
· 列的别名,尽量使用双引号,不建议省略as。
MySQL大小写的规范(建议遵守)
- MySQL在Window环境下大小写不敏感
- MySQL在Linux环境下大小写敏感
数据库名、表名、表别名、变量名是严格区分大小写的。
SQL关键字、函数名、绑定变量等都大写。
注释:
单行注释:
方式①:#注释文字(MySQL特有)
--后面必须有一个空格)
多行注释:
/*注释文字*/
命名规则:
- 数据库、表名不得超过30个字符,变量限制为29个。
- 必须只能包含A-Z、a-z、0-9、_ 共63个字符。
- 数据库名、表名、字段名等对象名中间不要包含空格
- 同一个MySQL软件中,数据库不能重名。同一个库中,表不能重名。同一个表中,字段不能重名。
- 必须保证字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,要在SQL语句中使用`(着重号)引起来。
- 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,在另一个表里就别变成整数。
基本的SELECT ... FROM ... 结构:
SELECT ...(字段1,字段2,……) FROM ...(表名)
表名指字段所在的表名,如果字段并不在某个表,使用dual(伪表)当表名。
*符号放在字段处表示相应表中的所有的字段。
列的别名:
- 重命名一个列,便于计算(建议别名简短,并见名知意)。
- 紧跟列名,可以选择:在列名和别名之间加入关键字AS(也可以省略)。别名使用双引号,以便于在别名中包含空格或特殊的字符并区分大小写。
- AS全称:alias,别名。
例如:
SELECT sigma_man sigma , best_friend AS bsfd FROM classmate , teacher AS "my teacher";
去除重复行:
在SELECT关键字后加上DISTINCT关键字即可将指定字段出现重复的行去除。
例如:
SELECT DISTINCT member_id FROM employee;
空值参与运算:
空值:NULL(意味着“无”)
所有的运算符或列值遇到NULL值,运算的结果都为NULL。
着重号(` `):
若字段名、表名和保留字、数据库系统或常用方法冲突,就要加上着重号` `引起来。
例如:SELECT * FROM `ORDER`
查询常数:
查询操作时,若查询的字段为一个常数,则会有相应的常数的列,列的内容都是此常数。
显示表结构:
DESCRIBE 表名; (DESCRIBE也可以用DESC替换)
用于显示表中的字段的详细信息。
过滤数据:
语法:
SELECT 字段1,字段2……
FROM 表名
WHERE 过滤条件
·使用WHERE语句,将不满足条件的行过滤掉。
·WHERE子句紧跟FROM子句。