IDEA爪哇操作数据库

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

⒈.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

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

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

ewpassword';

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

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

exit;

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

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

场景:

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

代码:

java 复制代码
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语法

相关推荐
魔道不误砍柴功1 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2341 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨1 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟3 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity4 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天4 小时前
java的threadlocal为何内存泄漏
java
caridle4 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^4 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋34 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花4 小时前
【JAVA基础】Java集合基础
java·开发语言·windows