mysql学习--使用navicat查看数据库密码

数据库通常分为两种:关系型数据库非关系型数据库,关系型数据库通常会建立很多二维数据表,形成一对一、一对多、多对多等关系;之后利用SQL语句查询我们所需要的数据;非关系型数据库基于Key-Value的对应关系,并且查询的过程中不需要经过SQL解析

在公司中,使用关系型数据库较多,其中非关系型数据库更多的是用在爬取数据中。
学习mysql更多的是学习SQL语句,SQL语句是我们与数据库沟通的语言

SQL语句分类

  1. DDL

数据定义语言,可以通过DDL语句对数据库或者表进行创建、删除、修改等操作

  1. DML

数据操作语言,可以通过DML语句对表进行添加、删除、修改等操作

  1. DQL

数据查询语言,可以通过DQL从数据库中查询记录

  1. DCL

数据控制语言,对数据库、表格的权限进行相关访问操作

在SQL的学习中DQL语句是重点内容,需要特别学习,同时也需要知道基本的数据库、表的增删改查操作

数据库的、表增删改SQL语句
  • 对表操作
-- 查看当前数据库中有那些表
SHOW TABLES;
-- 查看某一张表的表结构
DESC t_singer;
-- 创建一张新的表(如果不存在)
CREATE TABLE IF NOT EXISTS `users`(
name VARCHAR(10),
age INT,
height DOUBLE
);
-- 删除一个表(如果表存在)
DROP TABLE IF EXISTS `users`;
-- 创建一个完整的表结构
-- 	默认值为0 DEFAULT(0)
-- 	唯一且不为空 UNIQUE NOT NULL
CREATE TABLE IF NOT EXISTS `users`(
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) UNIQUE NOT NULL,
	level INT DEFAULT(0),
	telPhone VARCHAR(20) UNIQUE
);
-- 修改表结构
-- 修改表名字
ALTER TABLE `users` RENAME `t_users`;
-- 添加新字段(createTime TIMESTAMP类型)
ALTER TABLE `t_users` ADD createTime TIMESTAMP;
ALTER TABLE `t_users` ADD updateTime TIMESTAMP;
-- 修改字段名称(修改createTime为createAt DATETIME类型)
ALTER TABLE `t_users` CHANGE createTime createAt DATETIME;
-- 删除某一个字段
ALTER TABLE `t_users` DROP updateTime;
-- 修改某一字段的类型(将id改为bigint类型)
ALTER TABLE `t_users` MODIFY id BIGINT;
  • 对数据进行操作
CREATE TABLE IF NOT EXISTS `products`(
	`id` INT PRIMARY KEY AUTO_INCREMENT,
	`title` VARCHAR(20),
	`description` VARCHAR(200),
	`price` DOUBLE,
	`publishTime` DATETIME
);
-- 插入数据
INSERT INTO `products` (title,description,price,publishTime) VALUES ('苹果','苹果只要998',998,'2122-09-10');
INSERT INTO `products` (title,description,price,publishTime) VALUES ('香蕉','香蕉只要888',888,'2123-09-10');
INSERT INTO `products` (title,description,price,publishTime) VALUES ('栗子','栗子只要666',666,'2127-06-06');
-- 删除数据(全部删除)
-- DELETE FROM `products`
-- 删除某条数据
DELETE FROM `products` WHERE id=5;
-- 修改数据(表中全部数据)
UPDATE `products` SET price=8888;
-- 修改数据(根据条件修改某一条数据)
UPDATE `products` SET price=8888 WHERE id=6;
UPDATE `products` SET price=8888,title='栗子好吃' WHERE id=6;

-- 当修改某一条数据时,使用最新的时间记录
ALTER TABLE `products` ADD `updateTime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
查询操作
  • 基本查询
CREATE TABLE IF NOT EXISTS `t_products` (
	id INT PRIMARY KEY AUTO_INCREMENT,
	brand VARCHAR(20),
	title VARCHAR(100) NOT NULL,
	price DOUBLE NOT NULL,
	score DECIMAL (2,1),
	voteCnt INT,
	URL VARCHAR(100),
	pid INT
);

-- 基本查询
-- 查询所有数据的所有字段
SELECT * FROM `t_products`;
-- 查询所有字段,并且指定对应的字段
SELECT id,brand,title,price FROM `t_products`;
-- 查询字段后给字段重命名(起一个别名 AS可以省略)
SELECT id AS phoneId,brand AS phoneBrand,title AS phoneTitle,price AS phonePrice FROM `t_products`;
-- WHERE的比较运算符
SELECT * FROM `t_products` WHERE price <1000;
-- 大于等于
SELECT * FROM `t_products` WHERE price >=3000;
-- 等于
SELECT * FROM `t_products` WHERE price =2699;
-- 查询所有品牌
SELECT * FROM `t_products` WHERE brand='栗子';
-- 查询不是苹果品牌
SELECT * FROM `t_products` WHERE brand!='苹果';

-- 查询brand为华为,并且价格小于2000的手机
SELECT * FROM `t_products` WHERE brand='栗子' && price<3000;
SELECT * FROM `t_products` WHERE brand='栗子' AND price<3000;
-- 查询华为手机或价格大于5000的手机
SELECT * FROM `t_products` WHERE brand='栗子' || price>5000;
SELECT * FROM `t_products` WHERE brand='栗子' OR price>5000;
-- 查询区间范围
SELECT * FROM `t_products` WHERE price>=1000 && price<=2000;
SELECT * FROM `t_products` WHERE price BETWEEN 1000 AND 2000;

-- 枚举多个结果,其中之一 小米或华为
SELECT * FROM `t_products` WHERE brand ='香蕉' OR brand ='栗子';
SELECT * FROM `t_products` WHERE brand IN ('香蕉','栗子');

-- 模糊查询
-- 查询所有title以v开头的商品
SELECT * FROM `t_products` WHERE title LIKE 'v%';
-- 查询所有title中带v的商品
SELECT * FROM `t_products` WHERE title LIKE '%v%';
-- 查询所有title带M,并且M必须是第三个字符
SELECT * FROM `t_products` WHERE title LIKE '__M%';

-- 对结果进行排序
-- 查询所有价格大于1000的产品,并且按照评分的降序获取结果
SELECT * FROM `t_products` WHERE price>1000 ORDER BY score DESC;

SELECT * FROM `t_products` WHERE price>1000 ORDER BY score ASC;

-- 分页查询(查询20条数据从41条开始查找)
SELECT * FROM `t_products` LIMIT 20 OFFSET 40;

  • 聚合函数
-- 计算华为手机的平均价格
SELECT AVG(price) FROM `t_products` WHERE brand='栗子';
-- 计算华为手机的平均分数
SELECT AVG(score) AS miAvgScore FROM `t_products` WHERE brand='香蕉';

-- 选择手机中评分最高/最低的分数
SELECT MAX(score) FROM `t_products`;
SELECT MIN(score) FROM `t_products`;

-- 计算所有手机一共有多少投票
SELECT SUM(voteCnt) from `t_products`;

-- 计算一共有多少商品(填*的原因是因为填写其他字段可能为空)
SELECT COUNT(*) FROM `t_products`;
-- 计算华为
SELECT COUNT(*) FROM `t_products` WHERE brand='栗子';
-- 计算华为手机的平均价格
SELECT AVG(price) FROM `t_products` WHERE brand='香蕉';
-- 计算华为手机的平均分数
SELECT AVG(score) AS miAvgScore FROM `t_products` WHERE brand='香蕉';

-- 选择手机中评分最高/最低的分数
SELECT MAX(score) FROM `t_products`;
SELECT MIN(score) FROM `t_products`;

-- 计算所有手机一共有多少投票
SELECT SUM(voteCnt) from `t_products`;

-- 计算一共有多少商品(填*的原因是因为填写其他字段可能为空)
SELECT COUNT(*) FROM `t_products`;
-- 计算华为
SELECT COUNT(*) FROM `t_products` WHERE brand='栗子';

-- GROUP BY 对数据根据品牌进行分组ROUND(AVG(score),2)保留两位小数
SELECT
	brand,
	MAX( price ) maxPrice,
	MIN( price ) minPrice,
	ROUND( AVG( price ), 2 ) avgPrice,
	ROUND( AVG( score ), 2 ) avgScore
FROM
	`t_products` 
GROUP BY
	brand
	HAVING avgScore>7 AND avgPrice>4000;
-- 	对分组查询结果进行约束(平均分大于7的并且平均价格大于4000的)

基本的查询语句就这么多,查询语句也包含左连接、右连接等操作,篇幅有限,下次分享,剩下的就来分享我遇到的一些问题。

遇到问题

在刚学mysql的时候,需要连接数据库,之前我在navicat连接过我本地的数据库,但是由于时间比较长,我把密码忘了,那样就没法使用代码连接到数据库了,经过百度,我找到了使用navicat查看数据库密码的一个操作。

  1. 导出连接
    在这里插入图片描述
    选择要导出的数据库,记住要勾选下边的导出密码,
  2. 找到加密后的密码
    在导出的文件中找到Password,复制后边加密的密码
  3. 打开破解网站复制下列代码
<?php
class NavicatPassword
{
    protected $version = 0;
    protected $aesKey = 'libcckeylibcckey';
    protected $aesIv = 'libcciv libcciv ';
    protected $blowString = '3DC5CA39';
    protected $blowKey = null;
    protected $blowIv = null;
     
    public function __construct($version = 12)
    {
        $this->version = $version;
        $this->blowKey = sha1('3DC5CA39', true);
        $this->blowIv = hex2bin('d9c7c3c8870d64bd');
    }
     
    public function encrypt($string)
    {
        $result = FALSE;
        switch ($this->version) {
            case 11:
                $result = $this->encryptEleven($string);
                break;
            case 12:
                $result = $this->encryptTwelve($string);
                break;
            default:
                break;
        }
         
        return $result;
    }
     
    protected function encryptEleven($string)
    {
        $round = intval(floor(strlen($string) / 8));
        $leftLength = strlen($string) % 8;
        $result = '';
        $currentVector = $this->blowIv;
         
        for ($i = 0; $i < $round; $i++) {
            $temp = $this->encryptBlock($this->xorBytes(substr($string, 8 * $i, 8), $currentVector));
            $currentVector = $this->xorBytes($currentVector, $temp);
            $result .= $temp;
        }
         
        if ($leftLength) {
            $currentVector = $this->encryptBlock($currentVector);
            $result .= $this->xorBytes(substr($string, 8 * $i, $leftLength), $currentVector);
        }
         
        return strtoupper(bin2hex($result));
    }
     
    protected function encryptBlock($block)
    {
        return openssl_encrypt($block, 'BF-ECB', $this->blowKey, OPENSSL_RAW_DATA|OPENSSL_NO_PADDING);
    }
     
    protected function decryptBlock($block)
    {
        return openssl_decrypt($block, 'BF-ECB', $this->blowKey, OPENSSL_RAW_DATA|OPENSSL_NO_PADDING);
    }
     
    protected function xorBytes($str1, $str2)
    {
        $result = '';
        for ($i = 0; $i < strlen($str1); $i++) {
            $result .= chr(ord($str1[$i]) ^ ord($str2[$i]));
        }
         
        return $result;
    }
     
    protected function encryptTwelve($string)
    {
        $result = openssl_encrypt($string, 'AES-128-CBC', $this->aesKey, OPENSSL_RAW_DATA, $this->aesIv);
        return strtoupper(bin2hex($result));
    }
     
    public function decrypt($string)
    {
        $result = FALSE;
        switch ($this->version) {
            case 11:
                $result = $this->decryptEleven($string);
                break;
            case 12:
                $result = $this->decryptTwelve($string);
                break;
            default:
                break;
        }
         
        return $result;
    }
     
    protected function decryptEleven($upperString)
    {
        $string = hex2bin(strtolower($upperString));
         
        $round = intval(floor(strlen($string) / 8));
        $leftLength = strlen($string) % 8;
        $result = '';
        $currentVector = $this->blowIv;
         
        for ($i = 0; $i < $round; $i++) {
            $encryptedBlock = substr($string, 8 * $i, 8);
            $temp = $this->xorBytes($this->decryptBlock($encryptedBlock), $currentVector);
            $currentVector = $this->xorBytes($currentVector, $encryptedBlock);
            $result .= $temp;
        }
         
        if ($leftLength) {
            $currentVector = $this->encryptBlock($currentVector);
            $result .= $this->xorBytes(substr($string, 8 * $i, $leftLength), $currentVector);
        }
         
        return $result;
    }
     
    protected function decryptTwelve($upperString)
    {
        $string = hex2bin(strtolower($upperString));
        return openssl_decrypt($string, 'AES-128-CBC', $this->aesKey, OPENSSL_RAW_DATA, $this->aesIv);
    }
};
 
 
$navicatPassword = new NavicatPassword(12);
$decode = $navicatPassword->decrypt('复制出来的密码');
echo $decode."\n";
?>
  1. 点击执行破解
    在这里插入图片描述
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: instantclient-basic-windows是Oracle提供的一种可以在Windows操作系统上运行的基本客户端工具。它包含了必需的组件,用于连接和管理Oracle数据库。这个基本客户端工具是免费提供的,可以从Oracle官方网站上进行下载和安装。 Navicat是一款功能强大的数据库管理工具,它提供了一个直观的图形用户界面,让用户能够轻松地管理和操作各种类型的数据库,包括Oracle数据库Navicat支持使用各种客户端工具连接到Oracle数据库,其中就包括instantclient-basic-windows。 使用Navicat连接Oracle数据库时,需要先将instantclient-basic-windows安装在计算机上。然后,在Navicat的连接设置中,选择Oracle数据库类型,并指定正确的连接参数,如主机名、端口号、用户名和密码等。Navicat使用instantclient-basic-windows提供的客户端工具,通过这些连接参数与Oracle数据库建立连接。一旦连接成功,用户就可以使用Navicat的各种功能,如查询、导入导出数据、创建和修改表格、执行SQL语句等。 总之,instantclient-basic-windows和Navicat是两个可以配合使用的工具,用于在Windows操作系统上连接和管理Oracle数据库。它们提供了一种方便、直观的方式,让用户能够轻松地操作数据库,并进行各种数据库管理任务。 ### 回答2: instantclient-basic-windows是Oracle公司提供的一个轻量级的客户端软件包,用于在Windows操作系统上与Oracle数据库进行连接和交互。 Navicat是一种功能强大的多数据库管理工具,它支持与各种类型的数据库进行连接和管理,包括Oracle数据库Navicat提供了一个直观和用户友好的界面,使用户能够轻松地执行各种数据库操作,如创建和修改表、执行查询和导入导出数据等。 使用instantclient-basic-windows和Navicat,我们可以实现以下功能: 1. 连接Oracle数据库:instantclient-basic-windows提供了必需的驱动程序和库,Navicat可以使用这些驱动程序与Oracle数据库进行连接。我们可以通过输入数据库的连接信息,如主机名、端口号、用户名和密码等,来建立与数据库的连接。 2. 数据库管理:Navicat允许我们创建、修改和删除数据库对象,如表、视图、存储过程等。我们可以使用图形界面进行这些操作,无需编写复杂的SQL语句。 3. SQL查询和脚本执行:Navicat提供了一个SQL编辑器,我们可以在该编辑器中编写SQL查询语句,并执行查询以获取所需的数据。此外,我们还可以执行SQL脚本,批量执行多个SQL语句。 4. 数据导入导出:Navicat支持将数据从不同的数据源导入到Oracle数据库中,或者将数据从Oracle数据库导出到其他数据源。我们可以选择不同的数据格式,如CSV、Excel等,进行数据导入导出。 总的来说,instantclient-basic-windows和Navicat是两种不同的软件,分别用于提供与Oracle数据库的连接和管理工具。它们的结合可以帮助我们更方便地连接和操作Oracle数据库。 ### 回答3: instantclient-basic-windows是Oracle公司提供的一套免费的Oracle客户端工具。它包含了执行数据库操作所需的库文件和工具,可以用于与Oracle数据库进行连接和交互。instantclient-basic-windows的安装过程相对简单,只需要将相应的文件解压到指定目录即可。 而Navicat是一款知名的多数据库管理工具,支持多种数据库类型,包括Oracle、MySQL、SQL Server等。通过Navicat,用户可以方便地进行数据库的管理、查询、导入导出等操作,快速地浏览和编辑数据库中的表格和数据。 使用instantclient-basic-windows和Navicat配合使用,可以实现便捷的Oracle数据库操作。首先,我们可以通过将instantclient-basic-windows的路径配置到系统环境变量中,使得Navicat能够正常连接Oracle数据库。然后,在Navicat中添加一个新的Oracle连接,填写相应的连接信息,包括主机、端口、用户名、密码等。最后,点击连接按钮,Navicat将会使用instantclient-basic-windows提供的功能与Oracle数据库建立连接,并可以在界面中进行数据库的各种操作。 使用instantclient-basic-windows和Navicat可以带来许多便利,比如可以更加高效地管理和操作Oracle数据库,可以通过可视化界面直观地进行数据的增删改查,可以方便地导入导出数据等。因此,这对开发人员和数据库管理员来说都是非常有价值的工具组合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值