一、数据库的概念
1.1 为什么会出现数据库:
数据库的出现是为了解决数据存储和管理的问题。在计算机系统中,数据通常以结构化的形式存在,例如表格、记录等。而且,现代应用程序通常需要处理大量数据,需要对这些数据进行高效、可靠的存储和管理。因此,数据库就应运而生,它们可以提供多用户访问、数据完整性保护、灵活的查询和高效的数据存储和检索等功能。随着互联网和移动设备的普及,数据库变得越来越重要,已成为现代信息技术的基础设施之一。
1.2 数据库的概念:
数据库是一个有组织的数据集合,它可以通过计算机系统进行管理、维护和访问。数据库中的数据通常以结构化的方式进行组织和存储,并且在数据存储的同时保持数据的完整性和一致性。数据库可以被看作是应用程序的后端,提供一个可靠的数据存储和管理的解决方案,以支持各种业务流程和应用程序的需求。数据库还具有以下特点:
(1)数据共享:多个用户可以访问同一个数据库,并对其中的数据进行读写。
(2)数据一致性:数据库会对数据进行严格的管理,确保数据的正确性和完整性。
(3)数据独立性:应用程序和数据库的结构可以相互独立,应用程序改变不会影响数据库结构。
(4)数据安全:数据库会对用户进行身份验证,并提供各种访问控制和安全策略,以防止未经授权的访问和数据泄露。
(5)数据备份和恢复:数据库会对数据进行备份,以保证在出现故障或数据损失时可以快速恢复数据。
1.3 数据库的分类:
数据库可以根据其逻辑结构和应用范围进行分类,以下是一些常见的分类方式:
1.3.1 按照数据模型分类:
(1)关系型数据库:使用表格来表示数据之间的关系,如MySQL、Oracle等。
(2)非关系型数据库:使用键和值(Key-Value)对来表示数据,如MongoDB、Redis等。
(3)层次数据库:使用树形结构来组织数据,如IBM的Information Management System(IMS)。
(4)网络数据库:使用图形结构来组织数据,如Integrated Data Store(IDS)。
1.3.2 按照应用范围分类:
(1)个人数据库:用于个人存储和管理数据,如Microsoft Access。
(2)企业数据库:用于企业级应用和数据管理,如Oracle Database、Microsoft SQL Server等。
(3)数据仓库:用于大规模数据处理和分析,如Hadoop、Teradata等。
(4)分布式数据库:将数据存储在多个计算机节点上,以提高可靠性和性能,如Cassandra、Couchbase等。
1.3.3 按照数据处理方式分类:
(1)OLTP数据库:用于在线事务处理,如银行交易系统。
(2)OLAP数据库:用于在线分析处理,如决策支持系统。
二、数据库的安装
如果原来用注册表安装过MySQL数据库,再重新安装的时候要把原来的卸载干净,要不然很有可能在安装过程中出现问题,具体卸载可以看看下面这篇文章:
MySQL5.5完全卸载_mysql5.5卸载_ImagineTheFire的博客-CSDN博客
2.1 安装包下载
2.1.1 在官网MySQL :: Download MySQL Community Server直接下载安装包进行安装:
2.1.2 直接下载安装包版本的可以不用进入注册表,卸载很方便(安装包如下:)
链接:https://pan.baidu.com/s/1rThi9JbjAwj8fox0NCL8Eg?pwd=cm9e
提取码:cm9e
--来自百度网盘超级会员V4的分享
2.2 配置环境变量
2.2.1 下载压缩包版本之后,直接解压,解压之后找到bin目录并复制一下:
2.2.2 接下来,找到电脑中的:高级系统设置-->环境变量-->Path-->编辑-->新建-->复制刚才的路径-->点击确定即可:
2.3 my.ini文件
2.3.1 配置my.ini文件:
my.ini文件文件如下:
链接:https://pan.baidu.com/s/13OFDVh4-p_Gs3wmUIwM6LA?pwd=ziqs
提取码:ziqs
--来自百度网盘超级会员V4的分享
2.3.2 初始化my.ini文件
使用管理员身份打开控制台,执行初始化代码(要将目录改成自己my.ini文件的目录):
mysqld --defaults-file="D:\MYSQL\mysql-8.0.33-winx64\my.ini" --initialize-insecure
2.4 在终端进行mysql的操作
2.4.1 安装mysql服务:
mysqld --install
2.4.2 启动mysql的服务:
net start mysql
2.4.3 进入到mysql的控制台:
-- 刚开始是没有密码的,直接按回车键
mysql -uroot -p -- -u是账号,-p是密码
2.4.4 修改密码(在mysql的命令行中修改密码):
alter user 'root'@'localhost' identified with mysql_native_password by '123';
密码可以自己设,一般都设一个比较简单容易记的密码
2.4.5 停止服务、退出服务:
net stop mysql -- 停止服务
exit; -- 退出服务
2.4.6 进入mysql控制台:
mysql -u用户名 -p密码
三、数据库的基本操作
3.1 数据定义语言( Data Define Language,DDL)
3.1.1 数据库的创建
(1)显示所有数据库:
-- 语法格式:show databases;
show databases; -- 显示所有数据库
-- 显示结果:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
(2)创建数据库:
-- 语法格式 create database 数据库名;
create database db_test; -- 创建一个名为db_test的数据库
show databases; -- 显示当前所有的数据库
-- 解决中文乱码问题(这是5.x版本的创建,8.x之后就不用设置格式了,自动就是utf-8)
-- create database db2 default character set utf8;
-- 显示创建新数据库之后的结果
+--------------------+
| Database |
+--------------------+
| db_test |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
(3)删除数据库:
-- 语法格式: drop database 数据库名称;
drop database db_test; -- 删除名为db_test的数据库;
show databases;
-- 显示删除后的结果:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
(4)使用数据库(切换数据库):
-- 语法格式:use 数据库名;
use db_test; -- 使用(切换)数据库
-- 显示操作后的结果
Database changed
(5)查看当前数据库的状态:
-- 语法格式:status;
status; -- 查看数据库状态
3.1.2 表的创建
表的基本概念:
表头(header):表的元数据或列信息,是描述数据库表各列(字段)的属性和约束规则的集合;
列(col):由表头定义的每一列描述了一个属性,并且所有行都包含这个属性的数据。
行(row):也被称为记录(Record)、元组(Tuple)或实体(Entity),是一组具有相同数据类型的数据的集合。每一行都描述了一个具体的人/物等实体的相关信息。
值(value):每个数据列所包含的具体数值或空值(NULL)。值是行和列的交汇点,每个值都对应一个特定的行和列。
键(key):是数据库中用于标识不同记录的一组或多组列。
(1)创建表:
-- 语法格式:create table 表名 (列名1 列1的类型, 列名2 列2的类型, ……);
create table tb_user (id int, name varchar(20), age int);
(2)查看当前数据库中所有的表:
-- 语法格式:show tables;
show tables; -- 查看当前数据库中所有的表
-- 显示结果:
+-------------------+
| Tables_in_db_test |
+-------------------+
| tb_user |
+-------------------+
(3)查看当前表的结构:
-- 语法格式:desc 表名;
desc tb_user;
-- 显示结果:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
(4)表添加列:
-- 语法格式:alter table 表名 add 要增加的列名 列的类型;
alter table tb_user add email varchar(30);
desc tb_user;
-- 显示结果:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
(5)表修改列:
-- 语法格式: alter table 表名 change 旧列名 新列名 新列类型 【约束】;
-- 【约束】目前可以不用管
alter table tb_user change email password varchar(20);
desc tb_user;
-- 显示结果:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
| password | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
(6)表删除列:
-- 语法格式:alter table 表名 drop 要删除的列名;
alter table tb_user drop password;
desc tb_user;
-- 显示结果:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
(7)修改表的名称:
-- 语法格式: alter table 原表名 rename 新表名;
alter table tb_user rename tb_stu;
desc tb_user;
-- 会报错:
-- ERROR 1146 (42S02): Table 'db_test.tb_user' doesn't exist
desc tb_stu;
-- 显示结果:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
(8)清除表中所有数据:
-- 语法格式:truncate table 表名;
truncate table tb_stu;
-- 目前没有学习查询语句,所以看不到变化,后面再展示变化
(9)删除表:
-- 语法格式: drop table 表名;
drop table tb_stu;
desc tb_stu;
-- ERROR 1146 (42S02): Table 'db_test.tb_stu' doesn't exist
3.2 数据操纵语言(Data Manifacture Language,DML )
3.2.1 插入操作:
-- 语法格式:insert into tb_user (列名1,列名2,……) values (值1,值2,……);
insert into tb_user (id,name,age) values (01,'小明',18);
-- 语法糖(简化语法):insert into tb_user values (值1,值2,……);
insert into tb_user values (02,'小红',19);
3.2.2 查询操作:
-- 语法格式:select 列1,列2,…… from 表名;
select id,name,age from tb_user;
-- 语法糖:select * from 表名;
select * from tb_user;
-- 显示结果:
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | 小明 | 18 |
| 2 | 小红 | 19 |
+------+------+------+
-- 通过where进行条件的筛选
-- select * from 表名称 where 关系表达式
-- 显示结果:
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | 小明 | 18 |
+------+------+------+
3.2.3 更新操作:
-- 语法格式:update 表名 set 列1=值1,列2=值2,…… where 更新条件;
update tb_user set age=20 where id=1;
select * from tb_user;
-- 显示结果:
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | 小明 | 20 |
| 2 | 小红 | 19 |
+------+------+------+
3.2.4 删除操作:(如果没有where,那么会删除表中所有的数据 )
-- 语法格式:delete from 表名 where 删除条件;
delete from tb_user where id=1;
select * from tb_user ;
-- 显示结果:
+------+------+------+
| id | name | age |
+------+------+------+
| 2 | 小红 | 19 |
+------+------+------+
truncate tb_user; -- 清除所有数据
select * from tb_user ;
-- 显示结果:
-- Empty set (0.00 sec)
3.3 数据控制语句(Data Controller Language,DCL )
3.3.1 用户操作(在root用户下操作):
(1)创建新用户:
-- 语法格式(不止一种):create user '用户名'@'ip对应的服务器' identified with mysql_native_password by '密码';
-- 上面语法格式创建
create user 'xiaoming'@'localhost' identified with mysql_native_password by '123';
-- 没有单引号
create user admin@localhost identified with mysql_native_password by '123';
-- 大写格式
CREATE USER `wangwei`@`localhost` IDENTIFIED WITH mysql_native_password BY '123';
localhost可以使用%进行代替,一定要谨慎使用,使得所有的服务器ip都可以连接(但是不建议将root用户设置为%)
(2)查询用户:
-- 语法格式:select 要查询的属性1,属性2 from mysql.user;
select user,host from mysql.user;
-- 显示结果:
+------------------+-----------+
| user | host |
+------------------+-----------+
| admin | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| wangwei | localhost |
| xiaoming | localhost |
+------------------+-----------+
(3)删除用户:
-- 语法格式:drop user '用户名'@'ip对应的服务器'
-- 两个格式都可以删除
drop user 'wangwei'@'localhost';
drop user xiaoming@localhost;
-- 显示结果:
+------------------+-----------+
| user | host |
+------------------+-----------+
| admin | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
3.3.2 用户授权:
默认情况下创建用户是没有权限的,但是root用户拥有一切权限,所以可以通过root用户进行授权
(1)用root用户对指定用户进行授权(对admin进行授权)
-- 语法格式(5.x版本的):GRANT 要授予的权限(SELECT,INSERT,UPDATE,DELETE,CREATE),DROP ON 要授权的数据库名.表名 TO '用户名'@'ip对应的服务器' IDENTIFIED BY '密码';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON db_test.tb_user TO 'admin'@'localhost' IDENTIFIED BY '123';
-- 显示结果(因为我是8.x版本的,所以会报错):
-- ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '123'' at line 1
-- 语法格式(8.x版本的,不需要后面密码那一部分):GRANT 要授予的权限(SELECT,INSERT,UPDATE,DELETE,CREATE),DROP ON 要授权的数据库名.表名 TO '用户名'@'ip对应的服务器'
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON db_test.tb_user TO 'admin'@'localhost';
-- 显示结果:
-- Query OK, 0 rows affected (0.01 sec)
(2)查询当前用户权限:
exit; -- 从终端退出数据库操作
mysql -uadmin -p123 -- 登录admin用户
-- 语法格式(查看当前用户权限):show grants;
show grants;
-- 显示结果:
+-----------------------------------------------------------------------------------------+
| Grants for admin@localhost |
+-----------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `admin`@`localhost` |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `db_test`.`tb_user` TO `admin`@`localhost` |
+-----------------------------------------------------------------------------------------+
-- 语法格式(查看用户其他权限)show grants for 用户名@ip对应的服务器;
-- 一般都是使用root用户进行查看,其他用户想要查看的的话要授权给他
show grants for admin@localhost;
-- 显示结果:
+-----------------------------------------------------------------------------------------+
| Grants for admin@localhost |
+-----------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `admin`@`localhost` |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `db_test`.`tb_user` TO `admin`@`localhost` |
+-----------------------------------------------------------------------------------------+
(3)撤销权限(root用户进行):
-- 语法格式:revoke all on *.* from 用户名@ip对应的服务器;
revoke all on *.* from admin@localhost;
show grants for admin@localhost;
-- 显示结果:
+-------------------------------------------+
| Grants for admin@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `admin`@`localhost` |
+-------------------------------------------+
四、客户端可视化工具:
4.1 Navicat:
https://pan.baidu.com/s/10dBOeXl5SJC3VmxRuCdvtA?pwd=xm2o
提取码:xm2o
--来自百度网盘超级会员V4的分享
Navicat是一款数据库管理工具,可以连接到各种不同类型的数据库,包括MySQL、Oracle、PostgreSQL、SQL Server等。它提供了一个可视化的界面,使用户可以方便地管理和操作数据库,例如创建表格、执行查询、导入导出数据等。Navicat也支持SSH和HTTP隧道,以确保数据库连接的安全性。此外,Navicat还提供了多种语言和主题选择,以满足不同用户的需求。
4.2 SQLyog:
SQLyog是一款面向MySQL数据库的图形化管理工具,它提供了一个直观易用的用户界面,使用户可以方便地管理和操作MySQL数据库。SQLyog支持多种常见的数据库管理任务,例如创建和修改表格、执行查询、导入导出数据等,还提供了一些高级功能,例如自动备份和恢复、数据同步等。此外,SQLyog还支持SSH和HTTP隧道,以确保数据库连接的安全性。SQLyog还提供了多个版本,包括社区版、企业版等,以满足不同用户的需求和预算。
4.3 DataGrip:
DataGrip是一款由JetBrains开发的跨平台数据库集成开发环境(IDE),可用于管理和操作多种类型的数据库,例如MySQL、PostgreSQL、Oracle、SQL Server等。它提供了一个直观的用户界面,支持多种功能,包括代码自动完成、语法高亮、重构等,可以帮助用户更轻松地编写和维护SQL代码。DataGrip还提供了一些高级功能,例如智能导入和导出数据、比较和同步数据库结构等,使用户可以更高效地管理和操作数据库。此外,DataGrip还可以与其他JetBrains产品集成,例如IntelliJ IDEA、PyCharm等,为开发人员提供更完整的工具链。
4.4 IDEA自带的插件:
IDEA右边工具栏,有个Database图案, 一般都是内置好的,无需额外的操作去安装。
点击Database:
URL:我是连接本地的 MySQL,所以就是 localhost,如果是连接其他地方的MySQL,就要换成你要连接的数据库(记得权限问题),然后点击Test Connection就行。
在连接对应的用户时,现在终端登录该用户,不然的话是连不上的:
成功界面: