IDEA爪哇操作数据库

news2024/10/8 11:38:21

少小离家老大回,乡音无改鬓毛衰

⒈.IDEA2018设置使用主题颜色

IDEA2018主题颜色分为三种:idea原始颜色,高亮色,黑色

设置方法:Settings–Appearance&Behavior–Appearance

 

⒉.mysql中,没有my.ini,只有my-defaule.ini,查找修改并保存my.ini

因为mysql5.7中文乱码的原因,所以需要找到my.ini文件修改编码,但进入mysql安装目录,找不到my.ini,只有my-default.ini。

在Windows 10中,MySQL5.7的my-default.ini和my.ini不是同一个文件,在不同的文件路径下!在隐藏文件夹C:\ProgramData\中,先进入C盘,点左上角的查看,然后勾选隐藏的项目,此时会出现ProgramData文件夹,进入找到mysql

里面就有my.ini
然后用记事本打开my.ini 修改 保存。


⒊.[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决方法
1、在windows环境下,MySQL的安装路径中有一个my.ini文件,在里面加入以下内容:
(一定要在[mysqld] 下面添加)

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2、在虚拟机环境下的/etc/my.cnf配置文件的[mysqld] 下添加以下内容:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

重启MySQL即可


⒋.登入MySQL数据库grant无法授权 1044 - Access denied for user 'root'@'%' to database 'blog'

一、检查user表中root@'%'grant的权限

select HOST,USER,Grant_priv,Super_priv from mysql.`user`;

 

可以看到现在这两个权限都是N
二、更新它们为Y,然后重启mysql

update mysql.user set Grant_priv='Y',Super_priv='Y' where user = 'root' and host = '%';
#加载授权
flush privileges;

三、重启mysql

service mysqld restart

测试一下再执行grant语句就成功了


 

⒌.MySQL 用户权限说明

客户端执行 SQL 语句查看权限列表:

DESC mysql.user;

权限说明如下:

  • Select_priv:通过 SELECT 命令选择数据
  • Insert_priv:通过 INSERT 命令插入数据
  • Update_priv:通过 UPDATE 命令修改现有数据
  • Delete_priv:通过 DELETE 命令删除现有数据
  • Create_priv:通过 CREATE 命令创建新的数据库和表
  • Drop_priv:通过 DROP 命令删除现有数据库和表
  • Reload_priv:使用 FLUSH 语句或与之等效的 mysqladmin 命令刷新主机、刷新日志、刷新特权、刷新状态、刷新表、刷新线程
  • Shutdown_priv:关闭服务器。将此权限提供给 root 账户之外的任何用户时,都应当非常谨慎
  • Process_priv:使用 SHOW PROCESSLIST 语句查看服务的线程信息
  • File_priv:使用 LOAD DATA 、SELECT ... INTO OUTFILE 语句和 LOAD_FILE 函数在服务器主机上读写任意文件
  • Grant_priv:将该用户自己的权限授予其他用户
  • References_priv:创建/删除外键,创建/删除外键时需要操作者有此特权
  • Index_priv:创建/删除索引
  • Alter_priv:使用 ALTER 语句重命名或修改表结构
  • Show_db_priv:使用 SHOW DATABASES 语句查看服务器上所有数据库的名字。无此特权的用户只能看到自己权限内的数据库的名字
  • Super_priv:超级用户(待补充)
  • Create_tmp_table_priv:使用 CREATE TEMPLATE TABLE 语句创建临时表。服务器不会对临时表做任何权限检查,操作者可以对临时表执行任意操作
  • Lock_tables_priv:使用 LOCK TABLES 语句锁定操作者拥有 SELECT 权限的数据表。锁定数据表后,其他会话暂无对该表的读写操作权
  • Execute_priv:执行存储操作(待补充)
  • Repl_slave_priv:复制服务器。在查询操作量巨大的使用场景下,需要一台或多台从属服务器来分担主服务器的查询工作。创建从属服务器通常采用复制的方法,执行复制操作的用户需要此权限
  • Repl_client_priv:查询复制服务器操作的执行状况。执行 SHOW MASTER STATUS 、SHOW SLAVE STATUS 和 SHOW BINARY LOGS 语句查看复制得到的从属服务器的状态,拥有复制服务器权限的用户默认拥有执行这三个语句的权限
  • Create_view_priv:创建视图
  • Show_view_priv:查看视图
  • Create_routine_priv:创建例程。例程包括 PROCEDURE 和 FUNCTION
  • Alter_routine_priv:修改和删除例程
  • Create_user_priv:针对用户和角色的增删改查操作
  • Event_priv:针对事务的增删改查操作
  • Trigger_priv:针对触发器的增删改查操作
  • Create_tablespace_priv: 针对表空间和日志文件组的增删改查操作。表空间就是存放数据表及其数据的地方

⒍.数据库密码忘记了怎么办

方法1: 用SET PASSWORD命令

首先登录MySQL。

格式:mysql> set password for 用户名@localhost = password('新密码');  
例子:mysql> set password for root@localhost = password('123');  

方法2:用mysqladmin

格式:mysqladmin -u用户名 -p旧密码 password 新密码  
例子:mysqladmin -uroot -p123456 password 123 

方法3:用UPDATE直接编辑user表

首先登录MySQL。

mysql> use mysql;  
mysql> update user set password=password('123') where user='root' and host='localhost';  
mysql> flush privileges;  

注意,MySQL的密码字段可能变为了authentication_string

方法4:在忘记root密码的时候,可以这样

以windows为例:

  1. 关闭正在运行的MySQL服务。
  2. 打开DOS窗口,转到mysql\bin目录。
  3. 输入mysqld --skip-grant-tables 回车。–skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
  4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。
  5. 输入mysql回车,如果成功,将出现MySQL提示符 >。
  6. 连接权限数据库: use mysql; 。
  7. 改密码:update user set password=password(“123”) where user=“root”;(别忘了最后加分号) 。
  8. 刷新权限(必须步骤):flush privileges; 。
  9. 退出 quit。
  10. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。
    改完数据库密码还要去phpadmin的配置文件更新
    打开你安装的xampp目录,找到phpMyAdmin,打开它,找到config.inc.php ,用记事本或UE打开,可以看到它的密码是空的,加上你修改过的密码,保存,然后重启一下阿帕奇和mysql,再打开xampp的控制面板中MySQL的Admin即可

⒎mysql数据库的默认密码是多少

简介:本文主要介绍MySQL的默认密码是什么,以及如何修改默认密码。

MySQL是一种常用的关系型数据库管理系统,它是一种开源的软件,可以免费使用。在安装MySQL时,系统会要求设置root用户的密码,但是有些情况下,用户可能会忘记设置密码或者使用了默认密码,这时候就需要知道MySQL的默认密码是什么了。

MySQL的默认密码在不同版本中可能会有所不同,但是大部分情况下默认密码都是空的,也就是没有密码。如果您在安装MySQL时没有设置密码,那么您可以尝试使用空密码进行登录,也就是直接按回车键即可。

如果您无法使用空密码进行登录,那么您可以尝试使用一些常见的默认密码,例如“password”、“123456”等。但是需要注意的是,这些默认密码并不是所有版本都适用,而且使用默认密码会存在一定的安全风险,因此强烈建议您尽快修改密码。

如何修改MySQL的密码?

如果您需要修改MySQL的密码,可以按照以下步骤进行操作:

1. 进入MySQL命令行界面,输入以下命令:

ysql -u root -p

2. 系统会提示您输入密码,如果密码正确,就可以进入MySQL的命令行界面了。

3. 输入以下命令,修改root用户的密码:

ewpassword';

ewpassword是您想设置的新密码,可以根据需要进行修改。

4. 修改完成后,输入以下命令退出MySQL命令行界面:

exit;

MySQL的默认密码大部分情况下是空的,如果无法登录可以尝试使用一些常见的默认密码。建议尽快修改密码,以提高数据库的安全性。修改MySQL密码可以通过进入命令行界面,并使用ALTER USER命令进行操作。

⒏.java多线程去拷贝数据库方法

场景:
        2个数据库,一个数据库的表拷贝到另一个库里面

代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class DatabaseCopy {
    // 数据库连接配置
    private static final String SOURCE_DB_URL = "jdbc:mysql://localhost:3306/XXX";
    private static final String SOURCE_DB_USERNAME = "root";
    private static final String SOURCE_DB_PASSWORD = "root";

    private static final String TARGET_DB_URL = "jdbc:mysql://localhost:3306/YYY";
    private static final String TARGET_DB_USERNAME = "root";
    private static final String TARGET_DB_PASSWORD = "root";

    // 源表和目标表配置
    private static final String[] TABLE_NAMES = {"all_XXX"};
    private static final String TARGET_TABLE_NAME = "all_YYY";

    // 增加线程池大小,例如10个线程
    private static final int THREAD_POOL_SIZE = 10;

    public static void main(String[] args) {
        long startTime = System.currentTimeMillis(); // 记录开始时间
        int tablesCopied = 0; // 记录复制的表格数量

        try {
            // 连接源数据库
            Connection sourceConnection = DriverManager.getConnection(SOURCE_DB_URL, SOURCE_DB_USERNAME, SOURCE_DB_PASSWORD);

            // 连接目标数据库
            Connection targetConnection = DriverManager.getConnection(TARGET_DB_URL, TARGET_DB_USERNAME, TARGET_DB_PASSWORD);

            for (String tableName : TABLE_NAMES) {
                // 获取源表结构
                String sourceTableStructureQuery = "SHOW CREATE TABLE " + tableName;
                Statement structureStatement = sourceConnection.createStatement();
                ResultSet structureResult = structureStatement.executeQuery(sourceTableStructureQuery);

                if (structureResult.next()) {
                    String createTableStatement = structureResult.getString(2);

                    // 创建相同结构的表格在目标数据库
                    Statement createTableStatementTarget = targetConnection.createStatement();
                    createTableStatementTarget.execute(createTableStatement);

                    tablesCopied++; // 增加复制的表格数量
                } else {
                    System.err.println("未能获取表格结构:" + tableName);
                }
            }

            // 复制数据
            ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);

            for (int i = 0; i < THREAD_POOL_SIZE; i++) {
                executorService.submit(() -> {
                    Connection threadSourceConnection = null;
                    Connection threadTargetConnection = null;
                    try {
                        threadSourceConnection = DriverManager.getConnection(SOURCE_DB_URL, SOURCE_DB_USERNAME, SOURCE_DB_PASSWORD);
                        threadTargetConnection = DriverManager.getConnection(TARGET_DB_URL, TARGET_DB_USERNAME, TARGET_DB_PASSWORD);
                        threadTargetConnection.setAutoCommit(false); // 禁用自动提交以使用事务

                        for (String tableName : TABLE_NAMES) {
                            String copyDataQuery = "INSERT INTO " + TARGET_TABLE_NAME + " SELECT * FROM " + tableName;
                            System.out.println(copyDataQuery);
                            Statement copyStatement = threadTargetConnection.createStatement();
                            int rowsCopied = copyStatement.executeUpdate(copyDataQuery);

                            System.out.println("线程 " + Thread.currentThread().getName() + " 成功复制 " + rowsCopied + " 行数据到目标数据库中的 " + TARGET_TABLE_NAME + " 来自表格 " + tableName);
                        }

                        // 提交事务
                        threadTargetConnection.commit();
                    } catch (SQLException e) {
                        e.printStackTrace();
                        // 回滚事务以确保数据一致性
                        try {
                            if (threadTargetConnection != null) {
                                threadTargetConnection.rollback();
                            }
                        } catch (SQLException ex) {
                            ex.printStackTrace();
                        }
                    } finally {
                        try {
                            if (threadTargetConnection != null) {
                                threadTargetConnection.close();
                            }
                            if (threadSourceConnection != null) {
                                threadSourceConnection.close();
                            }
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }

            // 关闭线程池
            executorService.shutdown();
            while (!executorService.isTerminated()) {
                Thread.sleep(100);
            }

            // 关闭连接
            sourceConnection.close();
            targetConnection.close();

            long endTime = System.currentTimeMillis(); // 记录结束时间
            long totalTime = endTime - startTime; // 计算总时间

            System.out.println("成功复制 " + tablesCopied + " 张表格到目标数据库,总用时:" + totalTime + " 毫秒");
        } catch (SQLException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

写的不严谨,代码里面现在有问题只能复制表,插入数据不了数据,大家自己解开问题。

⒐.注意:MySQL不支持SELECT INTO语法

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉中的自监督学习

如何只使用少量标记示例来训练模型&#xff1f; 到目前为止&#xff0c;人工智能所提供的大部分价值都来自于在日益庞大的数据集上训练的监督模型。其中许多数据集都是由人类标记的&#xff0c;这是一项枯燥、耗时、容易出错&#xff0c;有时还很昂贵的工作。自监督学习&#x…

JVM基础面试题

JDK、JRE、JVM的关系 JVM Java虚拟机&#xff0c;它只识别.class类型文件&#xff0c;它能将class文件中的字节码指令进行识别并调用操作系统向上的API完成动作。 JRE Java运行时环境。它主要包含两部分&#xff1a;Jvm的标准实现和Java的一些基本类库。相对于JVM来说,JRE多出来…

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念&#xff1a; 实现方式&#xff1a; 使用PathVariable 在url相同的情况下&#xff0c;会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处&#xff1a;简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一&#xff1a;这里…

无涯教程-JavaScript - TIME函数

描述 TIME函数返回特定时间的十进制数。如果在输入功能之前单元格格式为"常规",则输出格式为日期。 TIME返回的十进制数是一个介于0(零)到0.99988426之间的值,代表从0:00:00(12:00:00 AM)到23:59:59(11:59:59 P.M.)的时间。 语法 TIME (hour, minute, second)争论…

Android studio 调整jar包顺序

第一步&#xff1a;编译jar包&#xff0c;放入lib路径下&#xff1a;如&#xff1a; 第二步&#xff1a;app 目录下build.gradle 中添加 compileOnly files(libs/classes.jar) 第三步&#xff1a;project目录下build.gradle 中添加 allprojects {gradle.projectsEvaluated {t…

十四、MySQL(DCL)如何实现用户的简单管理?配置用户?

1、DCL语句&#xff1a; 要学习DCL语言&#xff0c;就要清楚DCL语言是用来干什么的&#xff0c;首先DCL语言英文全称是Data Control Language&#xff0c;是数据控制语言&#xff0c;主要用来管理数据库用户、控制数据库的访问权限/ 2、DCL的基础语法&#xff1a; &#xff08;…

SpringBoot项目启动时预加载

SpringBoot项目启动时预加载 Spring Boot是一种流行的Java开发框架&#xff0c;它提供了许多方便的功能来简化应用程序的开发和部署。其中一个常见的需求是在Spring Boot应用程序启动时预加载一些数据或执行一些初始化操作。 1. CommandLineRunner 和 ApplicationRunner Spri…

垃圾回收 - 标记压缩算法

压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先&#xff0c;这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…

mtbatisplus

title: mybatis_plus date: 2023-09-03 21:06:27 tags: mybatis_plusreviews 约定大于配置 默认 当我们要使用mybatisplus的时候 我们需要去集成mp提供的BaseMapper public interface UserMapper extends BaseMapper 关于mybatisplus常用注解 注解到类上 TableName(“表…

【c++】只出现一次的数字I II III(三个版本:三道题)

注&#xff1a;看这篇文章之前你需要了解& | ^ << >> 这五个运算符&#xff0c;此外&#xff0c;代码均经过测试运行通过 目录 1、只出现一次的数字I&#xff08;难度&#xff1a;简单&#xff09; 2、只出现一次的数字II&#xff08;难度&#xff1a;中等&a…

Ubuntu之apt-get系列--apt-get安装软件的方法/教程

原文网址&#xff1a;Ubuntu之apt-get系列--apt-get安装软件的方法/教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Ubuntu使用apt-get安装软件的方法。 安装软件 先更新列表 sudo apt-get update 安装软件 sudo apt-get install <package name>[<version>]…

importlib的使用、9个视图子类、视图集、drf之路由、drf之请求响应回顾、GenericViewSet相关流程图

一 drf之请求响应回顾 # 1 drf请求-请求对象&#xff1a;data&#xff0c;query_params&#xff0c;其他跟之前一样&#xff0c;FILES-默认&#xff1a;支持三种编码-局部配置&#xff1a;视图类中-from rest_framework.parsers import JSONParser, FormParser, MultiPartPars…

MySQL的故事——MySQL架构与历史

MySQL架构与历史 文章目录 MySQL架构与历史一、MySQL逻辑架构二、并发控制三、事务四、多版本并发控制(MVCC) 一、MySQL逻辑架构 第一层&#xff1a;连接处理、授权认证、安全等等 第二层&#xff1a;查询解析、分析、优化、缓存以及所有的内置函数。包含跨存储引擎的功能&…

【数据结构与算法】十大经典排序算法

文章目录 前言一、常见十大排序算法总结1、名词解释2、时间复杂度 二、排序算法与C语言实现1、冒泡排序2、选择排序3、插入排序4、希尔排序5、归并排序6、快速排序7、堆排序8、计数排序9、桶排序10、基数排序 总结 前言 排序算法是《数据结构与算法》中最基本的算法之一。 排序…

java:操作cookie

背景 cookie 是一种客户端会话技术&#xff0c;将数据保存到客户端。主要流程就是&#xff1a; 1、服务器把数据设置到cookie并返回给浏览器 2、浏览器自动保存 3、浏览器下一次发送请求自动携带cookie给服务器 我们主要来看一下 java 是怎么操作 cookie 的。 cookie介绍 特…

区块链技术与应用 - 学习笔记2【密码学基础】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…

Node.js安装使用

目录 一、安装 Node.js二、环境变量配置三、npm常用命令 Node.js 是一个强大的运行时环境&#xff0c;它使您能够在服务器端运行 JavaScript 代码。它非常流行&#xff0c;用于构建 Web 应用程序、API 和各种后端服务。 一、安装 Node.js 1、访问 Node.js 官方网站。 在主页上…

算法训练day34|贪心算法 part03(LeetCode 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果(处理一边再处理一边))

文章目录 1005.K次取反后最大化的数组和思路分析代码实现 134. 加油站暴力方法贪心方法 135. 分发糖果(处理一边再处理一边)思路分析代码实现思考总结 1005.K次取反后最大化的数组和 题目链接&#x1f525; 给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#…

使用redis实现队列功能

使用redis实现队列功能 操作方法描述LPUSHLong lPush(String key, String… values)将一个或多个值 value 插入到列表 key 的表头&#xff0c;返回插入后列表中value的数量&#xff0c;若key不存在&#xff0c;会创建一个新的列表并执行 LPUSH 操作RPOPLPUSHString rPopLPush(S…

hive安装步骤

centos7安装hive&#xff0c;hive版本3.1.2 一、环境准备 JDK版本&#xff1a;jdk-8u381 Hadoop版本&#xff1a;hadoop-3.1.3 MySQL版本&#xff1a;8.0.34 二、hive安装步骤 1.解压 将压缩包复制到/opt/software目录下&#xff0c;并解压至/opt/module/目录 tar -zxf…