数据库相关知识

一、数据库的概念

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就行。 

 在连接对应的用户时,现在终端登录该用户,不然的话是连不上的:

 成功界面:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tina@Qian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值