1、win连接测试命令:
转到mysql的bin下,打cmd命令mysql -h localhost -u root -p iplat(root是用户名,iplat是数据库名)
2、修改Linux系统下的Mysql的密码
//进入mysql数据库
mysql -u root -p
//输入密码进入数据库
update mysql.user set password=password(‘uacsapp’) where user=‘root’;
//刷新mysql相关系统权限表
FLUSH privileges;
//重新启动mysql
systemctl restart mysqld
3、win下安装MySQL
- 首先在官网下载MySQL8.0版本压缩包文件,之后解压到自己的路径下,参考链接
- 配置环境变量
在Path中加入mysql的bin目录地址C:\Mine\Envirment\mysql-8.0.28\bin - 配置ini文件
在mysql解压目录下创建名为my.ini文件
[mysqld]
basedir=D:\software\mysql-8.0.31
port=3306
max_connections=20
character-set-server=utf8
其中basedir换成自己所解压的MySQL路径(注意:MySQL8.0之前版本需要创建data文件夹) - 使用管理员身份运行cmd
进入到MySQL的bin目录,即输入cd D:\software\mysql-8.0.31\bin,cd后的路径换成自己的MySQL bin路径
完成切换路径之后,依次输入执行以下命令:(没有任何报错即为正常)
mysqld -install
mysqld --initialize-insecure --user=mysql
net start mysql
mysql -u root -p
回车,密码不输入
alter user ‘root’@‘localhost’ identified by ‘123456’;
flush privileges;
exit退出mysql - 重启,密码测试:
net stop mysql
net start mysql
mysql -u root -p - 安装有误时,清空服务,重新安装:
sc delete mysql - 跳过密码
- 定位到MySQL安装目录下的bin目录,输入mysqld --console --skip-grant-tables --shared-memory
- 重新打开一个命令行窗口,定位到MySQL安装目录下的bin目录,输入mysql回车进入数据库。
4、把user表的root账户对应的host改为’%'就可以在Navicat上远程登录了
show databases;
show tables;
select host,user from user;
update user set host = '%' where host = 'localhost' and user = 'root';
flush privileges;
5、MySQL数据库客户端SQLyog的使用
- 下载、安装教程:参考链接
- mysql 8.0 默认使用 caching_sha2_password 身份验证机制 —— 从原来的 mysql_native_password 更改为 caching_sha2_password。
- 处理办法:使用管理员身份运行cmd
进入到MySQL的bin目录,即输入cd D:\software\mysql-8.0.31\bin,cd后的路径换成自己的MySQL bin路径,输入命令
mysql -u root -p
select user,plugin from user where user=‘root’;#查询加密规则
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’; #更新一下用户的密码
update user set plugin=‘mysql_native_password’ where user=‘root’; #修改加密规则 2
FLUSH PRIVILEGES; #刷新权限
6、数据库四大特性ACID:
-
A原子性:要么都成功,要么都失败
-
C一致性:事务前后完整性保证一致(转账时,收发双方总金额不变)
-
I隔离性:多个事务相互之间不影响
-
D持久性:事务已提交就持久化到数据库,未提交就恢复原状
7、隔离导致的问题:
- 脏读:一个事务读取到了另一个事务未提交的数据
- 不可重复度:一个事务读取表中某一行数据,多次读取结果不同
- 幻读:一个事务读取到了别的事务新插入的数据,导致前后读取不一致(多了一行)
8、模拟转账事务
- set autocommit =0;–关闭自动提交
- start transaction;–开启一个事务
- update bank set money=money-200 where name=‘小江’;
- update bank set money=money+200 where name=‘小李’;
- commit;–提交
- rollback;–回滚
- set autocommit =1; -打开自动提交
9、索引原则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表不需要索引
- 索引一般加在常用来查询的字段上
10、关系型数据库设计时的三大范式:
- 1NF:原子性:保证列不可再分
- 2NF:满足1NF的前提下,每张表只描述一件事情
- 3NF:满足2NF的前提下,保证数据库表中的每一列都与主键直接相关,而不能间接相关
11、使用JDBC连接MySQL数据库
- 数据查询
//获取连接对象
Connection con = con.createStatement();
//定义sql语句
String sql = "select * from Student";
//获取执行sql语句的对象
Connection stat = con.createStatement();
//执行sql并接收返回结果
ResultSet rs = stat.executeQuery(sql);
//3、处理结果
while (rs.next()){ //循环一次,游标移动一行
System.out.println("id:" + rs.getString(1)); // 获取第一列的数据
System.out.println("name:" + rs.getString("name")); //获取字段为name的数据
System.out.println("age:" + rs.getInt(3)); // 获取第三列的数据
System.out.println("score:" + rs.getInt(4)); // 获取第四列的数据
System.out.println("-------------------");
}
//4、释放资源
rs.close();
stat.close();
con.close();
- 数据修改
//获取连接对象
Connection con = con.createStatement();
//定义sql语句
String sql = "update Student set id = '66666' where name = '李白'";
//获取执行sql的对象
Statement statement = con.createStatement();
//执行sql
int pwd = statement.executeUpdate(sql);
//处理结果
System.out.println(pwd);
//释放资源
statement.close();
con.close();
12、Statement存在Sql注入的问题,建议使用PrepareStatement
//Statement执行 ,其实是拼接sql语句的。 先拼接sql语句,然后在一起执行。
String sql = "select * from t_user where username='"+ username +"' and password='"+ password +"'";
UserDao dao = new UserDaoImpl();
dao.login("admin", "100234khsdf88' or '1=1");
SELECT * FROM t_user WHERE username='admin' AND PASSWORD='100234khsdf88' or '1=1'
前面先拼接sql语句, 如果变量里面带有了 数据库的关键字,那么一并认为是关键字。 不认为是普通的字符串。
rs = st.executeQuery(sql);
//PrepareStatement预先处理给定的sql语句,对其执行语法检查。 在sql语句里面使用 ? 占位符来替代后续要传递进来的变量。
//后面进来的变量值,将会被看成是字符串,不会产生任何的关键字。
String sql = "insert into t_user values(null , ? , ?)";
ps = conn.prepareStatement(sql);
//给占位符赋值 从左到右数过来,1 代表第一个问号, 永远你是1开始。
ps.setString(1, userName);
ps.setString(2, password);
13、连接池
- dbcp连接池:老牌的连接池,tomcat内置的连接池,使用参考链接,方法二:配置文件方式
- c3p0连接池:先对dbcp连接池稳定,但速度慢。使用参考链接
- hirake连接池:springboot框架默认使用这个连接池,速度比druid快
- druid德鲁伊连接池:阿里巴巴开发的连接池,对SQL语句进行监控、拦截的功能。
14、给表新增创建时间、修改时间字段,并让其自动写入值
--user是表名
ALTER TABLE user
ADD create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
ADD update_time datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'