数据库原理及应用基础
术语
1,数据是数据库储存的基本对象,而数据库则是长期储存在计算机中,有组织,可共享的大量数据的集合
基本特点:永久储存,有组织,可共享,冗余度小,易扩展
2,一些基本模型术语:
- 关系(r):就是一个整体的表,可对关系的描述:关系名 (属性1,属性2…..);关系名就是表名;
- 关系完整性约束条件:实体,参照,用户定义完整性
- 属性:表中的一列为一个属性
- 域:属性的取值范围,一个具有相同类型的值集合
- 元组(t):表中的一行
- 主码:也叫码键,表中的某个属性组,它可以唯一确定一个元组,就是一个比较特殊可以用它来确定唯一的值,有点类似于c中的指针;
- 分量:元组中的一个属性值
- 关系模式:对关系的描述,也叫联系
3,数据库系统里有三种模式:
a,模式(逻辑模式,概念模式):数据库中的全体数据逻辑结构和特征的描述,与物理储存的细节和硬件环境,与具体的应用程序,开发环境及高级程序设计语言无关,它是数据库系统模式的中间层
b,外模式(子模式,用户模式):数据库用户使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示,每个用户只能看见和访问对应的外模式中的数据,用户只能与外模式建立联系
c,内模式(储存模式,物理模式):是数据物理结构和储存方式的描述,是数据在数据库内部的表示方式:记录的储存方式,索引的组织方式,数据是否压缩储存,数据是否加密,数据储存记录记录结构的规定用户-外模式-模式-内模式
4,二级映像,三级模式
4,E-R图:实体用方框,属性用椭圆,关系用菱形
MySQL
基本含义:
数据模型组成的三要素:数据结构,数据操作,数据的完整性约束条件
数据库(DB):储存数据的仓库
数据库管理系统(DBMS)
数据库系统(DBS):包含了数据库和数据库管理系统
型:对某一类数据的结构和属性的说明,值:对型的一个具体赋值
笛卡尔积:域的相乘,就是域之间的排列组合
基数:一个域允许的不同取值的个数。如域d1,的基数为2,域d2的基数为3,则总基数为2*3=6;
MySQL: 操纵何管理数据库的软件,下载安装后,在终端打开,用:net start mysql80,停止用:net stop mysql80
MySQL数据库模型:
1,关系型数据库(RDBMS):建立在关系型模型基础上,由多张相互连接的二维表组成的数据库
下载安装MySQL
1,登录数据库命令:cd C:\Program Files\MySQL\MySQL Server 8.0\bin(由于我配置了环境变量,所这步可以省略)
2, 客户端连接,输入mysql -h localhost -u root -p,进入数据库,也可以直接在开始直接打开MySQL的命令提示板输入密码即可
3,输入show databases; 查看当前数据库列表
4,退出执行命令:exit或者quit
一些专业的名词解释:1,索引:加快查询速度的有效方式,用户可以在基本表上建立一个或者多个索引,以提供存取路径,索引是属于内模式的范畴。唯一的索引:使用UNIQUE关键字,每个索引值对应唯一一条数据记录 2,视图:视图是从一个或者几个基本表导出的表,数据库只存在视图的定义而不是存放视图对应的数据,基本表中的数据发生变化,从视图查询出的数据也会随之变化。
SQL:
SQL:是用于管理数据库的标准化编程语言,它用于查询,更新,插入和删除数据库中的数据,操作数据库的语言,不管什么数据库管理系统(DBMS),SQL都实用
以下所写都是用的关系模型;
一,SQL的通用语法:
a,可单行或多行书写,一分号结尾
b,可以使用空格或者缩进来增强语句的可读性
c,MySQL数据库的SQL语句部区分大小写,关键字建议大写
d,注释:
- 单行注释:– 注释内容或 #注释内容(MySQL特有)
- 多行注释:/* 注释内容*/
二,SQL的分类:
DDL
1,DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)
a,DDL-数据库操作:
- 查询:
- 查询所有数据库:SHOW DATABASES;
- 查询当前数据库:SELECT DATABASE();
- 创建:
- CREATE DATABASE[IF NOT EXISTS]数据库名[DEFAULT CHARSET 字符集] [COLLATE 排序规则];
括号代表可以有的,eg:CREATE DATABASE IF NOT EXISTS itcast DEFAULT CHARSET utf8mb4;也可以直接创建CREATE DATABASE itcast;
- CREATE DATABASE[IF NOT EXISTS]数据库名[DEFAULT CHARSET 字符集] [COLLATE 排序规则];
- 删除:
- DROP DATABASE[IF EXISTS]数据库名;
- 使用:
- USE 数据库名;顾名思义切换到一个数据库中
b,DDL-表操作
- 查询
- 查询当前数据库所有表:SHOW TABLES;
- 查询表的结构:DESC 表名;
- 查询指定表的建表语句 SHOW CREATE TABLE 表名;
- 创建
- CREATE TABLE 表名(
字段1 字段类型 COMMENT 字段1注释,
字段1 字段类型 COMMENT 字段1注释,
字段n 字段类型 COMMENT 字段n注释
)[COMMENT 表注释] ;
(注意:最后一个字段没有逗号,字段的注释必须用’’围住,可以先在记事本上写,然后直接复制)
mysql> CREATE TABLE tb_user(
-> id int COMMENT ‘编号’
-> ) COMMENT ‘用户表’;
- CREATE TABLE 表名(
c,DDL-表操作-数据类型
- 数值类型(参照Java)
- TINYINT(1byte),SMALLINT(2bytes),MEDIUMINT(3bytes),INT(4bytes),BIGINT(8bytes),FLOAT(4bytes),DOUBLE(8bytes)
- 有符号(SIGNED),范围有负数,无符号(UNSIGNED),范围无负数,eg:TINYINT 有符号:-128
127,无符号:0255; - 举例:年龄:age TINYINT UNSIGNED;分数:score DOUBLE(4,1),4为标度,总共的数字个数,1为精度,小数的位数
- 字符串类型
- CHAR :定长字符串;VARCHAR:变长字符串;TEST:长文本数据;
- CHAR(10),性能好;VARCHAR(10)
- 日期时间类型
- DATE:范围:1000-01-01至9999-12-31,格式:YYYY-MM-DD 日期值 eg:brithday DATE
- TIME:范围:-838:59:59至838:59:59,格式:HH:MM:SS 时间值
- YEAR:范围:1901至2155 格式:YYYY 年份值
- DATETIME:混合日期和时间 格式:YYYY-MM-DD HH-MM-SS
- TIMESTAMP :混合日期和时间,时间戳 格式:YYYY-MM-DD HH-MM-SS
d,DDL-表操作-修改
- 添加字段:ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释] [约束 ];
- 修改字段
- 修改数据类型 : ALTER TBALE 表名 字段名 新数据类型(长度);
- 修改字段名,字段类型 :ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释] [约束 ];
- 删除字段 : ALTER TABLE 表名 DROP 字段名;
- 修改表名 :ALTER TABLE 表名 RENAME TO 新表名;
- 删除:
- 删除表 :DROP TABLE [IF EXISTS]表名;
- 删除指定表,并重新创建该表 : TRUNCATE TABLE 表名;(一般不使用它,因为它会重新创建该表,只是没有结构)
MySQL 图形化界面:DataGrip,使用它就可以直接写了
DML
2,DML:数据操作语言,用来对数据库表中的数据进行修改 涉及的关键字:INSERT INTO
a,DML-添加数据:
- 给指定字段添加数据:INSERT INTO 表名(字段名1,字段名2… )VALUES(值1,值2…);
- 给全部字段添加数:INSERT INTO 表名 VALUES(值1,值2…);值1,就是表中第一列
- 批量添加数据:
- INSERT INTO 表名(字段名1,字段名2… )VALUES(值1,值2…),(值1,值2…),(值1,值2…);
- INSERT INTO 表名 VALUE(值1,值2),(值1,值2…)(值1,值2…);
b,DML-修改数据
- UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,…[WHERE 条件];
c,DML-删除数据 - DELETE FROM 表名 [WHERE 条件];
DQL
3,DQL:数据查询语言,用来查询数据库中的表的记录 涉及的关键字:SELECT
a,DQL-语法(也是编写顺序):
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
b,DQL-基本查询
- 查询多个字段
- SELECT 字段1,字段2,字段3…. FROM 表名;
- SELECT *FROM 表名;查询所有字段
- 设置别名:SELECT 字段1[AS 别名1],字段2[AS 别名2]…FROM 表名;
- 去除重复记录:SELECT DISTINCT 字段列表 FROM 表名;
c,DQL-条件查询 - 语法:SELECT 字段列表 FROM 表名 WHERE 条件列表;
- 条件:where后面可以跟比较运算符(>,<,!=,is NULL,BETWEEN AND ,IN(),LIKE 占位符 _ % )和逻辑运算符(AND ,&&,OR,||,NOT,!)
- in(),就是括号里的条件任意满足其一即可,between最小值 and 最大值,like 模糊匹配 下划线_占一个字符,百分号% h后跟谁查谁,最后一个字符,例如查询名字为俩个字的员工:like ‘_ _’; 例如查身份证最后一个字符为X:like ‘%x’;
c,DQL-聚合函数
- 介绍:将一列数据作为一个整体,进行纵向计算
- 常见的聚合函数
- count :统计数量
- max :最大值
- min : 最小值
- avg : 平均值
- sum : 求和
- 语法
- SELECT 聚合函数(字段列表)FROM 表名;
d,DQL-分组查询
- 语法:SELECT 字段列表 FROM 表名[WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
- where与having区别:
- 执行时机不同:where是分组前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤
- 判断条件不同:where不能对聚合函数进行判断,而having可以;
- 注意事项:执行顺序:where>聚合函数>having; 分组后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
e,DQL-排序查询
- 语法: SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2,排序方式二;
- 排序方式:
- ASC: 升序(默认值)
- DESC: 降序
f,DQL-分页查询
- 语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
- 注意:
- 起始索引从零开始,起始索引 = (查询页码-1)*每页显示记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中式LIMIT
- 如果查询的是第一页数据,起始索引可以省略,直接写limit 10
h,DQL-执行顺序
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
SELECT
字段列表
ORDER BY
排序字段列表
LIMIT
分页参数
DCL
4,DCL:数据控制语言,用来创建数据库用户,控制数据库的访问权限,就是控制有那些用户可以访问数据库
a,DCL-用户管理
- 查询用户:USE mysql; SELECT *FROM user;
- 创建用户:CREATE USER ‘用户名‘@’主机名’ IDENTIFIED BY ‘密码’;
- 修改用户密码:ALTER USER ‘用户名‘@’主机名’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;
- 删除用户:DROP USER ‘用户名‘@’主机名’;
- 主机名:localhost 代表只能在当前主机访问数据库,% 代表可以在任意主机上访问数据库;
b,DCL-控制权限
- ALL ,ALL PRIVILEGES : 所有权限
- SELECT : 查询数据
- INSERT :插入数据
- UPDATE : 修改数据
- DELETE : 删除数据
- ALTER : 修改表
- DROP : 删除数据库,表,视图
- CREATE : 创建数据库,表
- 主要使用:
- 查询权限:SHOW GRANTS FOR ‘用户名‘@’主机名’;
- 授予权限:GRANT 授权列表 ON 数据库名.表名 TO ‘用户名‘@’主机名’;
- 撤销权限:REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名‘@’主机名’;
(由于后面要学习solidity,所以就没有再更新数据库原理了)