day030-2
数据库
-
事务
- set autocommit = 0 关闭自动提交
- start transaction 开启一个食物
- sql 语句执行
- commit 提交 rollback 回滚
- set autocommit = 1 恢复默认值
- create savepoint 创建保存点
- rollback to savepoint 回滚到保存点
-
事务的DSIC四大特性 原子性,一致性,隔离性,持久性
-
原子性 多条sql执行中要同时成功,或者失败
-
一致性 数据库数据在执行前后总数据特定保持不变如:A有100 B有100 总数200 A给B50 A剩下50B有150总数还是200,
-
隔离性
- 脏读 一个事务读到另一个事务未提交的数据
- 不可重复读 多次读取的数据不同,别的事务未执行完成和执行完成的不同
- 幻读 读到新插入的数据
-
持久性 sql执行提交成功,数据持久化到文件,提交失败数据恢复
-
-
索引
- key/index 普通索引 create index sum_index on tableName(colmun)
- primary key 唯一主键
- unique key 避免列重复的索引
-
数据库操作
-
创建用户 create user username identified by '123456' 密码
-
修改密码 set passworld = '111111' 修改当前用户密码
修改指定用户密码 set passworld for username =passworld('9999999')
-
重命名用户 runame user username to newusername
-
分配权限 grant all privileges on * .* to username 所有权限 除了grant 给别的用户授权
-
查询用户权限 show grants for username
-
撤销用户指定库的权限
revoke all privileges on * .*from username username的所有库所有权限都取消
-
-
数据库命令导出数据
- mysqldump -hlocalhost -uroot -ppassworld databasename tablename1 tablename2>d:/sql.sql
- 主机ip -u用户名 -p密码 库名 表名 > 导出地址/文件名
- 导入数据 source 地址/文件名 导入前需要创建好数据库 create database databasename
-
数据库的三大范式
- 第一范式 原子性 保证每一列不可再分 每个字段值描述一项信息
- 第二范式 前提需满足第一范式 每张表只做一件事情 每一列需和主键完全相关
- 第三范式 前提满足前两范式 每张表数据和主键直接相关
jdbcx代码练习
package com.self.jdbc;
import java.sql.*;
/**
* @ Author :wwwzhqwww
* @ Date :Created in 18:40 2021/2/17
* @ Description:
* @ Modified By:
* @Version: $version$
*/
public class JdbcDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加载驱动
// Class.forName("com.mysql.jdbc.Driver");//已经弃用Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'
Class.forName("com.mysql.cj.jdbc.Driver");
//用户信息和url
//useUnicode=trueunicode编码支持中文&characterEncoding=utf8编码格式&useSSL=true使用安全连接&serverTimezone=UTC时区设置mysql8.0以上增加新特性
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC";
String username = "root";
String pwd = "zhq521444";
//连接成功
Connection connection = DriverManager.getConnection(url,username,pwd);
//执行sql对象
Statement statement = connection.createStatement();
// statement.execute();//执行任何sql
// statement.executeQuery();//返回数据列表
// statement.executeUpdate();//返回更新成功行数
//对象执行sql
String sql = "select * from student";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("id:"+resultSet.getObject("id"));
System.out.println("name:"+resultSet.getObject("name"));
}
//释放连接
resultSet.close();
statement.close();
connection.close();
}
}