一、数据库和SQL介绍
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
数据库用于记录数据,使用数据库记录数据可以表现出各种数据间的联系,也可以很方便地对所记录的数据进行增、删、改、查等操作。数据库保存起来数据,然后在别的地方去使用,因此:数据库技术的根本目标是为了解决数据共享的问题。
结构化查询语言(Structured Query Language)简称SQL,是上世纪70年代由IBM公司开发,用于对数据库进行操作的语言。更详细地说,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
二、MySQL背景介绍
MySQL是一个关系型数据库管理系统,目前属于 Oracle 旗下产品。虽然单机性能比不上oracle,但免费开源,单机成本低且借助于分布式集群所以受到互联网公司的青睐,是互联网公司的主流数据库。
三、MySQL关键术语
- 数据库(database):保存有组织数据的容器
- 表(table):某种特定类型数据的结构化清单
- 模式(schema):关于数据库和表的布局和特性的信息。
- 列(column):表中的一个字段,所有表都是由一个或者多个列组成的。
- 行(row):表中的一个记录。
- 主键(primary key):能够唯一地区分表中的每个行
任意两行都不具有相同的主键值
每个行都必须具有一个主键值(不允许NULL值) - 外键(foreign key):外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。
- 触发器:MySQL响应以下任何语句自动执行的一条SQL语句(或位于BEGIN和END之间的一条语句)。
DELETE
INSERT
UPDATE - 游标(cursor):是一个存储在MYSQL数据库上的数据库查询,它不是一个SELECT语句,而是被该语句检索出来的结果集。
- 视图(View):视图为虚拟的表,它们包含的不是数据而是根据需要检索出来的查询,视图提供了一种MYSQL语句层次的封装,可以用来简化数据处理,重新定义格式和保护基础数据。
- 索引(index):如果没有索引,执行查询时 mysql 必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,mysql 可以直接从索引集中的数据开始查找。也就是说索引可以大大减少DBMS查找数据的时间。
- 范式:关系模型R(U,F),U为属性,F为属性U上的一组数据依赖。
关系数据库的关系是要满足一定要求的,满足不同程度要求的为不同范式。
四、MySQL的安装
下面介绍使用Docker 安装mysql的方式。
docker pull mysql:5.7.27
docker run --name mymysql -e MYSQL_ROOT_PASSWORD =admin -d -p 3306:3306 mysql:5.7.27
- 其中,
MYSQL_ROOT_PASSWORD =admin用于设置root用户的初始密码
# 查看mymysql 的tag
docker ps -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
abd50bd79a59 mysql:5.7.27 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mymysql 0B (virtual 373MB)
0a3b89c25329 zookeeper "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:2181->2181/tcp, 0.0.0.0:2888->2888/tcp, 0.0.0.0:3888->3888/tcp, 0.0.0.0:8080->8080/tcp myzk 38.1kB (virtual 252MB)
4be98db9c9e4 redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp myredis 14B (virtual 104MB)
# 进入容器:
docker exec -it 62349aa31687 /bin/bash
#进入mysql:
mysql -uroot -p
#授权:
mysql> GRANT ALL ON *.* TO 'root'@'%';
#刷新权限:
mysql> flush privileges;
# 更新加密规则:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin' PASSWORD EXPIRE NEVER;
#更新root用户密码:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'admin';
#刷新权限:
mysql> flush privileges;
使用navicat连接:

image.png