第一题:使用PreparedStament对MySql的CRUD操作。

CREATE TABLE `edu_user` (
  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',
  `user_age` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '用户年龄',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

public class DataDemo {
    public static void main(String[] args) throws Exception {
        DB db = new DB();
        db.InsertData();
        db.DeleteData();
        db.UpdateData();
        db.SelectData();
    }
}

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DB {
    private Connection conn;
    public DB(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/edu_index";
            String username = "root";
            String password = "jiangmin";
            this.conn = DriverManager.getConnection(url, username, password);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public void InsertData() throws Exception{
        String sql = "insert into edu_user(user_id,user_name,user_age) values(?,?,?)" ;
        PreparedStatement ppst = conn.prepareStatement(sql);
        ppst.setInt(1, 1);
        ppst.setString(2, "tomas");
        ppst.setInt(3, 10);
        ppst.execute();
    }
    
    public void DeleteData() throws Exception{
        String sql= "delete from edu_user where user_id = ?" ;
        PreparedStatement ppst = conn.prepareStatement(sql);
        ppst.setInt(1, 1);
        ppst.execute();
    }
    
    public void UpdateData() throws Exception{
        String sql= "update edu_user set user_age = ?,user_name = ? where user_id = ?" ;
        PreparedStatement ppst = conn.prepareStatement(sql);
        ppst.setInt(1, 100);
        ppst.setString(2, "aron");
        ppst.setInt(3, 1);
        ppst.execute();
    }
    
    public void SelectData() throws Exception{
        String sql= "select user_id,user_name,user_age from edu_user where user_id = ?" ;
        PreparedStatement ppst = conn.prepareStatement(sql);
        ppst.setInt(1, 1);
        ppst.execute();
        ResultSet rs = ppst.getResultSet();
        while(rs.next()){
            String user_id = rs.getString("user_id");
            String user_name = rs.getString("user_name");
            String user_age = rs.getString("user_age");
            System.out.println("user_id = " + user_id + ",user_name = " + user_name + ",user_age = " + user_age);
        }
    }
}

第三题:事务特点,ACID特点
1、原子性(atomicity):事务在执行时,要做到"要么不做,要么全做!",不允许事务部分执行。
2、一致性(consistency):在事务执行前后,数据库要一致,要么都变,要么都不变。
3、隔离性(isolation):事务并发执行,各个事务独立执行,一个事务的处理对另外一个事务的处理没有影响。
4、持久性(durability):一个成功执行的事务对数据库的作用是持久的,即使数据库出现故障,也应该能够恢复。

第四题:
set autocommit = 0; 设置当前session会话不自动提交事务,只有执行commit或rollback才提交事务。如果set autocommit = 1;那么每一个update、insert、delete语句都是一个事务的操作。
start transaction;
update edu_user set user_name = "daye" where user_id = 1;
commit;
rollback;

查询隔离级别
select @@session.tx_isolation;
select @@global.tx_isolation;

设置隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;
1、脏读:读未提交内容;READ-UNCOMMITTED
2、不可重复读,读提交内容;READ-COMMITTED
     A设置read committed,start transaction;
     B start transaction; update edu_user set user_name = 'jiangmin' where user_id = 1;
     A 查询记录,是旧数据
     B 提交事务,commit
     A 查询记录,是新数据,user_name 是jiangmin的值。
     两次查询的结果不一致,不可重复读的结果。
4、可重复读;  REPEATABLE-READ
8、串行化; SERIALIZABLE