术语

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;

  • 删除:
    • 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 ‘用户表’;

c,DDL-表操作-数据类型

  • 数值类型(参照Java)
    • TINYINT(1byte),SMALLINT(2bytes),MEDIUMINT(3bytes),INT(4bytes),BIGINT(8bytes),FLOAT(4bytes),DOUBLE(8bytes)
    • 有符号(SIGNED),范围有负数,无符号(UNSIGNED),范围无负数,eg:TINYINT 有符号:-128127,无符号: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,所以就没有再更新数据库原理了)