数据库相关概念
名称 | 全称 | 简称 |
---|---|---|
数据库 | 存储数据的仓库,数据是有组织的进行存储 | DataBase(DB) |
数据库管理系统 | 操纵和管理数据库的大型软件 | DataBase Management System(DBMS) |
SQL | 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 | Structured Query Language(SQL) |
数据模型
关系型数据库(RDBMS)
概念
建立在关系模型基础上,由多张相互连接的二维表(见下图)组成的数据库。
特点
- 使用表存储数据,格式统一,便于维护
- 使用SQL语言操作,标准统一,使用方便
SQL通用语法
- SQL语句可以单行或者多行书写,以分号结尾
- SQL语句可以使用空格/缩进来增强语句的可读性
- Mysql数据库的SQL语句不区分大小写,关键字使用大写
- 注释:单行注释:--或者# 多行注释:/* 注释内容*/
SQL分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Lanquage | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
DDL-数据库操作
查询
查询所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
当不知道自己在操作哪个数据库时,可以执行该指令。
创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
IF NOT EXISTS\] 判断是否存在,不存在创建 \[DEFAULT CHARSET\] 设置字符集 ### 删除 DROP DATABASE [IF EXISTS] 数据库名; ### 使用 USE 数据库名; ## DDL-表操作-查询 ### 查询当前数据库所有的表 SHOW TABLES; ### 查询表结构 DESC 表名; ### 查询指定表的建表语句(创建表的SQL语句) SHOW CREATE TABLE 表名; ## DDL-表操作-创建 CREATE TABLE 表名( 字段1 字段1类型[COMMENT 字段1注释], 字段2 字段2类型[COMMENT 字段2注释 ], 字段3 字段3类型[COMMENT 字段3注释], ... 字段n 字段n类型[COMMENT 字段n注释 ] )[COMMENT 表注释]; ## DDL-表操作-数据类型    ## DDL-表操作-修改 ### 添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]; ### 修改数据类型 ALETR TABLE 表名 MODIFY 字段名 新数据类型(长度); ### 修改字段名和字段类型 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; ### 删除字段 ALTER TABLE 表名 DROP 字段名; ### 修改表名 ALTER TABLE 表名 RENAME TO 新表名; ## DDL-表操作-删除 在删除表的时候,表中的数据也会被删除。 ### 删除表 DROP TABLE [IF EXISTS] 表名; ### 删除指定表,并重新创建该表 TRUNCATE TABLE 表名; ## DML-添加数据 DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。 ### 给指定字段添加数据 INSERT INTO 表名 (字段1,字段2) VALUES(值1,值2); ### 给全部字段添加数据 INSERT INTO 表名 (值1,值2); ### 批量添加数据 INSERT INTO 表名 (字段1,字段2,...) VALUES(值1,值2,...),(值1,值2,...),...; INSERT INTO VALUES(值1,值2,...),(值1,值2,...),...; 注意 1. 插入数据时,指定的字段/顺序需要与值的顺序是一一对应的 2. 字符串和日期数据应包含在引导中 3. 插入的数据大小,应该在规定的范围内 ## DML-修改数据 UPDATE SET 字段名1=值1,字段名2=值2....[WHERE 条件]; \[WHERE 条件\] 可以有,可以无,无的话修改的是整张表的所有数据。 ## DML-删除数据 DELETE FROM 表名 [WHERE 条件]; DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。 DELETE语句不能删除某一个字段的值(可以使用UPDATE) ## DQL DQL英文全称是Data QueryLanguage(数据查询语言),数据查询语言,用来查询数据库中表的记录。 查询的关键字 SELECT ### DQL语法 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数 ## DQL-基础查询 ### 查询多个字段 SELECT 字段1,字段2,字段3,... FROM 表名; SELECT * FROM 表名; ### 设置别名 SELECT 字段1 [AS 别名1],字段2[AS 别名2],... FROM 表名; ### 去除重复记录 SELECT DISTINCT 字段列表 FROM 表名; ## DQL-条件查询 ### 语法 SELECT 字段列表 FROM 表名 WHERE 条件列表 ### 条件 | 比较运算符 | 功能 | |---------------------|------------------------| | \> | 大于 | | \< | 小于 | | \>= | 大于等于 | | \<= | 小于等于 | | = | 等于 | | \<\> 或!= | 不等于 | | BETWEEN ... AND ... | 在某个范围之内(含最小、最大值) | | IN(...) | 在in之后的列表中的值,多选一 | | LIKE 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) | | IS NULL | 是NULL | | 逻辑运算符 | 功能 | |------------|----------------| | AND 或 \&\& | 并且(多个条件同时成立) | | OR 或 | 或者(多个条件任意一个成立) | | NOT 或! | 非,不是 | ## DQL-聚合函数 将一列数据作为一个整体,进行纵向计算。 | 函数 | 功能 | |-------|------| | count | 统计数量 | | max | 最大值 | | min | 最小值 | | avg | 平均值 | | sum | 求和 | ### 语法 SELECT 聚合函数 (字段列表) FROM 表名; null 不参与所有的聚合运算 ## DQL-分组查询 ### 语法 SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件]; ### where与having区别 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。 判断条件不同:where不能对聚合函数进行判断,而having可以。 ### 注意: * 执行顺序: where \>聚合函数\>having。 * 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义 ## DQL-排序查询 ### 语法 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2; ### 排序方式 ASC:升序 DESC:降序 注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ## DQL-分页查询 ### 语法 SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 注意 * 起始索引从0开始,起始索引=(查询页码-1)\*每页显示记录数 * 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。 * 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。 ### 例子 2.查询第2页员工数据,每页展示10条记录从 SELECT * from emp limit 10,10; ## DQL-执行顺序  ## DCL-用户管理 DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库用户、控制数据库的访问 权限 1. 查询用户 USE mysql; SELECT * FROM user; 2. 创建用户 CREATE USER '用户名' @ '主机名' ID ENTIFIED BY '密码' 3. 修改用户密码 ALTER USER '用户名' @ '主机名' IDENTIFIED WTH mysql native password BY '新密码' 4. 删除用户 DROP USER '用户名' @ '主机名'; ## DCL-权限控制 MySOL中定义了很多种权限,但是常用的就以下几种: | 权限 | 说明 | |---------------------|------------| | ALL, ALL PRIVILEGES | 所有权限 | | SELECT | 查询数据 | | INSERT | 插入数据 | | UPDATE | 修改数据 | | DELETE | 删除数据 | | ALTER | 修改表 | | DROP | 删除数据库/表/视图 | | CREATE | 创建数据库/表 | 1.查询权限 SHOW GRANTS FOR'用户名'@'主机名 2.授予权限 GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名' 3.撤销权限 REVOKE 权限列表0心 数据库名.表名 FROM'用户名'@'主机名';