事务:
事务的四大特征:
1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败;
2.持久性:如果事务一旦提交或者回滚后,数据库会持久化的保存数据;
3,隔离性:多个事务之间,相互独立;
4.一致性:事务操作前后,数据总量不变;
事务的隔离级别:
概念:
多个事务之间是隔离的,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题;
存在问题:
1.脏读;
2.不可重复读(虚读);
3.幻读;
脏读:
一个事务读取到另一个事务中没有提交的数据;
不可重复读(虚读):
在同一个事务中两次读取到的数据不一样;
幻读:
一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改;
隔离级别:
1.read uncommitedL读未提交;
产生的问题:脏读,不可重复读,幻读;
2.read commited:
产生的问题:不可重复读,幻读;
3.repetable read:可重复读(MySQL默认):
产生的问题:幻读;
4.serializable:串行化;
可以解决所有的问题;
注意:隔离级别从小到大,安全性越来越高,效率越来越低;
数据库查询隔离级别:
select @@tx_isolation;
数据库设置隔离级别:
set global transaction isolation level 隔离级别字符串;
DCL:
管理用户,授权;
管理用户:
添加用户:
create user '用户名'@'主机名' identified by密码;
删除用户:
drop user '用户名'@‘主机名’;
修改用户密码:
update user set password = password('新密码') where user='用户名';
set password for'用户名'@'主机名'=password('新密码')[MySQL];
查询用户:
1.切换到mysql数据库;
2.查询user表;
3.%表示可以在任意主机使用用户登录数据库;
忘记了root用户的密码:
1.cmd-->net stop mysql 停止mysql服务;
需要管理员运行cmd;
2.使用无验证方式启动mysql服务:mysqld--skip-grant-tables;
3.打开新的cmd窗口,直接输入mysql命令,敲回车登录;
4.use mysql;
.5.update user set password =password('新密码') where user='root';
6.关闭两个窗口;
7.打开任务管理器,手动结束mysqld.exe进程;
8.启动mysql服务;
9.使用新密码登录;
DCL权限管理:
查询权限:
show grants for '用户名'@‘主机名’;
授予权限:
grant 权限列表 on 数据库.表 to' 用户名'@'主机名';
所有权限:
grant all on *.* to '用户名'@'主机名';
撤销权限:
revoke 权限列表 on数据库.表 from '用户名'@'主机名';
JDBC:
概念:
Java DataBase Connectivity java数据库连接;
本质:
其实是官方(sun 公司)定义的一套操作所有关系型数据库的规则,即接口.各个数据库厂商实现这套接口,提供数据库与区动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类‘
操作步骤:
1.导入jar包;
2.注册驱动;
3.获取数据库连接对象 Connection;
4.定义sql语句;
5.获取执行sql语句的对象 statement;
6.执行sql,接收返回结果;
7.处理结果;
8,释放资源;
各个对象:
DriverManager:
驱动管理对象;
功能:注册驱动;
static void registerDriver(Driver driver);
写代码使用:
Class.forName("com.mysql.jdbc.Driver");
通过查看源码,发现:在com.mysql.jdbc.Driver类中存在静态代码块,通过DriverManager注册驱动;
注意:MySQL5后的驱动jar包可以省略注册驱动;
获取数据库连接;
static Connection getConnection(String url,String user,String password);
参数:
url:指定连接的路径;
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称;
user:用户名;
password:密码'
细节:如果连接的是本地服务器,IP地址和端口号可以不写;
Connection:
获取执行sql语句的对象;
Statement createStatement();
PreparedStatement preparedStatement(String sql);
管理事务:
开启事务:
setAutoCommit(boolean autocommit):设置参数为false,则开启事务;
提交事务:
commit();
回滚事务:
rollback();
Statement:
执行sql:
boolean execute(String sql):可以执行任意sql语句;
int executeUpdate(String sql):执行DML语句,DDL语句;
返回值int:影响的行数,如果>0,则操作成功,反之失败;
Resultset executeQuery(String sql):执行DQL语句;