JDBC批处理和事务

回顾

1 jdbc介绍 :Java Database Connectity java数据库连接技术定义一套连接数据的规范和标准。2 jdbc包含两个部分JDBC APIJDBC 驱动程序3 JDBC的使用步骤1 导入jar包2 注册驱动3 获取连接   33064 创建命令5 执行命令,处理结果6 释放资源4 JDBC的api  Driver  驱动DriverManager 驱动管理类Connection 负责连接数据库Statement  负责执行命令ResultSet   封装结果集PreparedStatment 预编译命令 5  数据库工具类DbUtils.java1 注册驱动2 获取连接3 释放资源4 执行命令 (增删改  DDL)

今日内容

1、JDBC的批处理
2、JDBC操作二进制
3、数据库事务
4、JDBC实现事务

教学目标

1、掌握JDBC的批处理
2、熟悉JDBC操作二进制
3、掌握数据库事务和ACID和隔离级别
4、掌握数据库事务的使用
5、掌握JDBC的事务操作

第一节 JDBC批处理

批量处理允许您将相关的SQL语句分组到批处理中,并通过对数据库的一次调用提交它们。

当需要一次向数据库发送多个SQL语句时,可以减少连接数据库的开销,从而提高性能。

1.1 Statement批处理

以下是使用语句对象的批处理的典型步骤序列

  • 使用*createStatement()*方法创建Statement对象。
  • 使用*setAutoCommit()*将auto-commit设置为false 。(可选)
  • 使用*addBatch()*方法在创建的语句对象上添加您喜欢的SQL语句到批处理中。
  • 在创建的语句对象上使用*executeBatch()*方法执行所有SQL语句。
  • 最后,使用*commit()*方法提交所有更改。(可选)
// Create statement object
Statement stmt = conn.createStatement();// Set auto-commit to false
conn.setAutoCommit(false);// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +"VALUES(200,'Zia', 'Ali', 30)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);// Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +"VALUES(201,'Raj', 'Kumar', 35)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);// Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +"WHERE id = 100";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);// Create an int[] to hold returned values
int[] count = stmt.executeBatch();//Explicitly commit statements to apply changes
conn.commit();
1.2 PrepareStatement批处理
  1. 使用占位符创建SQL语句。
  2. 使用prepareStatement() 方法创建PrepareStatement对象。
  3. 使用*setAutoCommit()*将auto-commit设置为false 。
  4. 使用*addBatch()*方法在创建的语句对象上添加您喜欢的SQL语句到批处理中。
  5. 在创建的语句对象上使用*executeBatch()*方法执行所有SQL语句。
  6. 最后,使用*commit()*方法提交所有更改。
// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +"VALUES(?, ?, ?, ?)";// Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);//Set auto-commit to false
conn.setAutoCommit(false);// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();//add more batches//Create an int[] to hold returned values
int[] count = stmt.executeBatch();//Explicitly commit statements to apply changes
conn.commit();

第二节 JDBC操作二进制

PreparedStatement对象可以使用输入和输出流来提供参数数据。这使您可以将整个文件放入可以保存大值的数据库列,例如Text和BLOB数据类型。

有以下方法可用于流式传输数据 -

  • **setAsciiStream():**此方法用于提供大的ASCII值。
  • **setCharacterStream():**此方法用于提供大型UNICODE值。
  • **setBinaryStream():**此方法用于提供较大的二进制值。

setXXXStream()方法除了参数占位符之外还需要额外的参数,文件大小。

考虑我们要将XML文件XML_Data.xml上传到数据库表中。这是XML文件的内容 -

<?xml version="1.0" encoding="UTF-8"?>
<Employee><id>100</id><first>Zara</first><last>Ali</last><Salary>10000</Salary><Dob>18-08-1978</Dob>
</Employee>
// Import required packages
import java.sql.*;
import java.io.*;
import java.util.*;public class JDBCExample {// JDBC driver name and database URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  static final String DB_URL = "jdbc:mysql://localhost:3306/EMP";//  Database credentialsstatic final String USER = "username";static final String PASS = "password";public static void main(String[] args) {Connection conn = null;PreparedStatement pstmt = null;Statement stmt = null;ResultSet rs = null;try{// Register JDBC driverClass.forName("com.mysql.jdbc.Driver");// Open a connectionSystem.out.println("Connecting to database...");conn = DriverManager.getConnection(DB_URL,USER,PASS);//Create a Statement object and build tablestmt = conn.createStatement();createXMLTable(stmt);//Open a FileInputStreamFile f = new File("XML_Data.xml");long fileLength = f.length();FileInputStream fis = new FileInputStream(f);//Create PreparedStatement and stream dataString SQL = "INSERT INTO XML_Data VALUES (?,?)";pstmt = conn.prepareStatement(SQL);pstmt.setInt(1,100);pstmt.setAsciiStream(2,fis,(int)fileLength);pstmt.execute();//Close input streamfis.close();// Do a query to get the rowSQL = "SELECT Data FROM XML_Data WHERE id=100";rs = stmt.executeQuery (SQL);// Get the first rowif (rs.next ()){//Retrieve data from input streamInputStream xmlInputStream = rs.getAsciiStream (1);int c;ByteArrayOutputStream bos = new ByteArrayOutputStream();while (( c = xmlInputStream.read ()) != -1)bos.write(c);//Print resultsSystem.out.println(bos.toString());}// Clean-up environmentrs.close();stmt.close();pstmt.close();conn.close();}catch(SQLException se){//Handle errors for JDBCse.printStackTrace();}catch(Exception e){//Handle errors for Class.forNamee.printStackTrace();}finally{//finally block used to close resourcestry{if(stmt!=null)stmt.close();}catch(SQLException se2){}// nothing we can dotry{if(pstmt!=null)pstmt.close();}catch(SQLException se2){}// nothing we can dotry{if(conn!=null)conn.close();}catch(SQLException se){se.printStackTrace();}//end finally try}//end trySystem.out.println("Goodbye!");
}//end mainpublic static void createXMLTable(Statement stmt) throws SQLException{System.out.println("Creating XML_Data table..." );//Create SQL StatementString streamingDataSql = "CREATE TABLE XML_Data " +"(id INTEGER, Data TEXT)";//Drop table first if it exists.try{stmt.executeUpdate("DROP TABLE IF EXISTS XML_Data");//Build table.stmt.executeUpdate(streamingDataSql);}catch(SQLException se){}// do nothing}//end createXMLTable
}//end JDBCExample

案例:把图片放入数据库

package com.qf.day04;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.lang.ProcessBuilder.Redirect;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;/*** 把图片放入数据库* @author wgy**/
public class Demo4 {public static void main(String[] args) throws Exception{//write();read();}public static void write() throws Exception{Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://localhost:3306/school";Connection conn=DriverManager.getConnection(url, "root", "root");PreparedStatement pstat=conn.prepareStatement("insert into bigdata2(id,img) values(?,?)");FileInputStream fis=new FileInputStream("d:\\图片\\003.jpg");pstat.setInt(1, 1);pstat.setBinaryStream(2, fis);int count=pstat.executeUpdate();System.out.println(count);pstat.close();conn.close();}public static void read() throws Exception{Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://localhost:3306/school";Connection conn=DriverManager.getConnection(url, "root", "root");PreparedStatement pstat=conn.prepareStatement("select * from bigdata2 where id=1");ResultSet rs=pstat.executeQuery();if(rs.next()) {int id=rs.getInt("id");System.out.println(id);//处理图片InputStream is=rs.getBinaryStream("img");FileOutputStream fos=new FileOutputStream("d:\\haha.jpg");byte[] buf=new byte[1024];int len=0;while((len=is.read(buf))!=-1) {fos.write(buf,0,len);}fos.close();is.close();}rs.close();pstat.close();conn.close();System.out.println("读取完成");}
}

第三节 数据库事务

一组要么同时执行成功,要么同时失败的SQL语句。是数据库操作的一个执行单元。

3.1 事务概述

​ 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。

事务开始于

  • 连接到数据库上,并执行一条DML语句insert、update或delete
  • 前一个事务结束后,又输入了另一条DML语句

事务结束于

  • 执行commit或rollback语句。
  • 执行一条DDL语句,例如create table语句,在这种情况下,会自动执行commit语句。
  • 执行一条DDL语句,例如grant语句,在这种情况下,会自动执行commit。
  • 断开与数据库的连接
  • 执行了一条DML语句,该语句却失败了,在这种情况中,会为这个无效的DML语句执行rollback语句。
3.2 事务的四大特点

(ACID)

  • Actomicity(原子性)

表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

  • Consistency(一致性)

表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态

  • Isolation(隔离性)

事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

  • Durability(持久性)

持久性事务完成之后,它对于系统的影响是永久性的。

案例演示


CREATE TABLE account(id INT PRIMARY KEY,NAME VARCHAR(20) NOT NULL,money DOUBLE(10,2)
)public static void main(String[] args) {Connection connection=null;PreparedStatement pstat1=null;PreparedStatement pstat2=null;//1注册驱动try {Class.forName("com.mysql.jdbc.Driver");//2获取连接connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/school", "root", "root");//3创建命令//3.1开启事务 ,设置事务自动提交为falseconnection.setAutoCommit(false);pstat1=connection.prepareStatement("update account set money=money-1000 where name='张莎强'");pstat1.executeUpdate();//int c=10/0;pstat2=connection.prepareStatement("update account set money=money+1000 where name='小苍'");pstat2.executeUpdate();System.out.println("转账成功...");//3.2提交事务connection.commit();} catch (Exception e) {System.out.println("出现异常");try {connection.rollback();//出现问题,要回滚(撤销事务做过的修改)connection.commit();//可加也不不加} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}finally {if(pstat1!=null){try {pstat1.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(pstat2!=null){try {pstat2.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

Mysql支持的事务语句

#开启事务
START TRANSACTION;     # connection.setAutoCommit(false);
UPDATE account SET money=money-1000 WHERE id=1;
UPDATE account SET money=money+1000 WHERE id=2;
#提交事务
COMMIT;#connection.commit();
#回滚
ROLLBACK; #connection.rollback();
3.3 事务隔离级别

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

Read Uncommitted(读取未提交内容)

​ 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

​ 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别
也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read可重读

只要这个事务还没结束,没有提交,就算是其他事务提交了,当前事务也不会读到

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQAEk7IY-1576317161188)(file:///C:\Users\Administrator.C1CWIYTPJWAKWQO\AppData\Roaming\Tencent\Users\1158068596\TIM\WinTemp\RichOle`77(`8~7C{4XZX60@3U}K@1.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hdDIcxGM-1576317161189)(file:///C:\Users\Administrator.C1CWIYTPJWAKWQO\AppData\Roaming\Tencent\Users\1158068596\TIM\WinTemp\RichOle\GB0{LC7Y_6YO%ZSQ[BUDYYJ.png)]

​ 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻读” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable 可串行化
​ 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。效率最低的。

​ 这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。

例如:

​   脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。

​ 演示案例:

#修改事务的隔离级别:
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
#查看事务隔离级别
SELECT @@tx_isolation;

​   不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

​ 演示案例:

# A方 买 本伟
SELECT @@tx_isolation;
START TRANSACTION;
UPDATE account SET money=money-2000 WHERE id=1;
UPDATE account SET money=money+2000 WHERE id=2;
COMMIT;
ROLLBACK;START TRANSACTION;
UPDATE account SET money=money+1000 WHERE id=2;
COMMIT;# B方  卖  郑帅
#(修改隔离级别)
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
#查看隔离级别
SELECT @@tx_isolation;
SELECT *FROM account;
#发货
#修改隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT *FROM account;#不可重复读START TRANSACTION;SELECT SUM(money) FROM account;SELECT SUM(money) FROM account;SELECT SUM(money) FROM account;
COMMIT; #再次修改隔离级别SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;START TRANSACTION;SELECT SUM(money) FROM account;SELECT SUM(money) FROM account;SELECT SUM(money) FROM account;
COMMIT; 

​   幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。但是InnoDB存储引擎通过多版本并发控制机制解决了该问题。

3.4 JDBC中事务应用

如果JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库。

事务使您能够控制是否和何时更改应用于数据库。它将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,则整个事务将失败。

要启用手动事务支持,而不是JDBC驱动程序默认使用的自动提交模式,请使用Connection对象的**setAutoCommit()**方法。如果将boolean false传递给setAutoCommit(),则关闭自动提交。我们可以传递一个布尔值true来重新打开它。

3.4.1 事务的提交和回滚

完成更改后,我们要提交更改,然后在连接对象上调用**commit()**方法,如下所示:

conn.commit( );

否则,要使用连接名为conn的数据库回滚更新,请使用以下代码 -

conn.rollback( );
try{//Assume a valid connection object connconn.setAutoCommit(false);Statement stmt = conn.createStatement();String SQL = "INSERT INTO Employees  " +"VALUES (106, 20, 'Rita', 'Tez')";stmt.executeUpdate(SQL);  //Submit a malformed SQL statement that breaksString SQL = "INSERTED IN Employees  " +"VALUES (107, 22, 'Sita', 'Singh')";stmt.executeUpdate(SQL);// If there is no error.conn.commit();
}catch(SQLException se){// If there is any error.conn.rollback();
}
3.4.2 Savepoint

新的JDBC 3.0 Savepoint接口为您提供了额外的事务控制。

设置保存点时,可以在事务中定义逻辑回滚点。如果通过保存点发生错误,则可以使用回滚方法来撤消所有更改或仅保存在保存点之后所做的更改。

Connection对象有两种新的方法来帮助您管理保存点 -

  • **setSavepoint(String savepointName):**定义新的保存点。它还返回一个Savepoint对象。
  • **releaseSavepoint(Savepoint savepointName):**删除保存点。请注意,它需要一个Savepoint对象作为参数。此对象通常是由setSavepoint()方法生成的保存点。
public static void main(String[] args) {Connection conn = null;Statement stmt = null;Savepoint savepoint1 = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school", "root", "root");// Assume a valid connection object connconn.setAutoCommit(false);stmt = conn.createStatement();// set a SavepointString SQL = "INSERT INTO Employees " + "VALUES (106, 20, 'Rita', 'Tez');";stmt.executeUpdate(SQL);savepoint1 = conn.setSavepoint("Savepoint1");// Submit a malformed SQL statement that breaksSQL = "INSERT IN Employees " + "VALUES (107, 22, 'Sita', 'Tez')";stmt.executeUpdate(SQL);// If there is no error, commit the changes.conn.commit();System.out.println("执行成功");} catch (Exception se) {// If there is any error.try {se.printStackTrace();conn.rollback(savepoint1);conn.commit();System.out.println("回滚");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

1、要取消掉JDBC的自动提交:void setAutoCommit(boolean autoCommit)

2、执行各个SQL语句,加入到批处理之中

3、如果所有语句执行成功,则提交事务 commit();如果出现了错误,则回滚:rollback()

try {connection.setAutoCommit(false);add(connection);
//          int i = 1/0;sub(connection);System.out.println("===============");connection.commit();} catch (Exception e) {// TODO Auto-generated catch blockSystem.out.println("---------------");try {connection.rollback();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}

以上就是java代码利用jdbc操作数据库的最简单版本,数据库事务通常要借助补捉异常语句

总结

1 批处理

​ Statement实现批处理

​ stat.addBatch(sql);// insert update delete

​ stat.executeBatch();

​ PreparetedStatement

​ pstat.addBatch();

​ pstat.executeBatch();

​ pstat.clearBatch();

2 jdbc操作大数据

​ 大文本 text mediumtext longtext

​ setAsciiStream();

​ setCharacterStream();

​ setBinaryStream();

​ 二进制 blob

​ setBinaryStream();

3 事务

​ 原子性 A:不能分割

​ 一致性 C:事务执行前后保持一致

​ 隔离型 I: 事务与事务之间对数据的读取控制

​ 持久性 D:事务提交或回滚之后,永久保存数据库。

4 修改隔离级别

#修改事务的隔离级别:
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
#查看事务隔离级别
SELECT @@tx_isolation;

java代码更改隔离级别

conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

5 保存点

SavePoint

作业题

1、实现一个学生管理系统,要求实现正删改查,基于控制台实现即可
要求可以对学生信息进行添加、修改、删除、查询的功能

面试题

1、什么是JDBC,在什么时候会用到它?
2、execute,executeQuery,executeUpdate的区别是什么?
3、JDBC的PreparedStatement是什么?
4、相对于Statement,PreparedStatement的优点是什么?

MySQL使用JDBC高级操作和事务相关推荐

  1. 【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念

    MySQL 数据库的命令行操作 登陆操作mysql -hlocalhost –uroot –p123456 退出操作exit 数据库操作建库:create database 库名; 卸载库:drop ...

  2. 使用JDBC进行数据库的事务操作(2)

    本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...

  3. MySQL学习笔记_10_MySQL高级操作(下)

    MySQL高级操作(下) 五.MySQL预处理语句 1.设置预处理stmt,传递一个数据作为where的判断条件 prepare stmt from "select * from table ...

  4. Day 41 Mysql高级操作

    Mysql高级操作 一.视图 视图(view)是一种虚拟存在的表,是一个逻辑表,本身不包含数据.本质是一个保存的子查询语句,通过视图,可以展现基表的部分数据 基表:用来创建视图的表叫做基表 base ...

  5. mysql 四大基础操作_事务的四大特性和隔离级别

    MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...

  6. MySQL数据库配置及高级操作

    MySQL数据库配置及高级操作 1 环境配置 1.1 MySQL安装与卸载 1.2 SQLyog安装 1.3 SQL简介 2 基本操作 2.1 DDL*(Data Definition Languag ...

  7. MySQL学习笔记_9_MySQL高级操作(上)

    MySQL高级操作(上) 一.MySQL表复制 create table t2 like t1;               #复制表结构,t2可以学习到t1所有的表结构 insert into t2 ...

  8. mysql密码高级_MySQL数据库高级操作(图文详解)

    数据表高级操作 准备工作:安装MySQL数据库 create database CLASS; use CLASS; create table TEST (id int not null,name ch ...

  9. MySQL基本操作命令和数据表高级操作

    数据库之MySQL基本操作命令 一.常用的数据类型 二.查看数据库.表和表结构 1.查看数据库 2.查看数据库包含的表 3.查看表结构 三.SQL语句 创建新的数据库 创建新的表 删除指定数据表 删除 ...

  10. Mysql数据库(三)——mysql数据库高级操作

    Mysql数据库(三)--mysql数据库高级操作 一.指定主键的另一种方式 二.克隆/复制一个表 1.方法一 2.方法二 三.清空表,删除表内数据 1.方法一 2.方法二 3.方法三 4.三个删除方 ...

最新文章

  1. AjaxFileUpload文件上传组件(php+jQuery+ajax)
  2. Synchronize使用
  3. [技术基础]计算机网络技术基础名词解释
  4. LiveVideoStack上海2019八折截止最后一周
  5. win10关机后自动重启_安卓手机重启和关机后再开机,区别原来这么大!别不当回事...
  6. elaselasticsearch节点类型
  7. 使用fstream在C++工程中读取文件到二维数组
  8. android activity四种加载模式
  9. pythoninformation leakage_GitHub - MrFk/GSIL: Github Sensitive Information Leakage(Github敏感信息泄露)...
  10. centos安装openldap过程
  11. java教学视频_孔浩老师_孔浩老师JAVA WebService教程
  12. 动软代码生成器连接oracle数据库
  13. 2×3卡方检验prism_何时应该使用非参数检验?
  14. 普通话考试是从题库里抽吗_普通话考试试题有哪些
  15. 实验报告怎么写之书写规范
  16. 【洛谷】P4147 玉蟾宫 解题报告
  17. 可视化IDE低代码开发平台
  18. 体积渲染(3)——3D值噪声+光线步进实现体积云
  19. matlab 显示高光谱,高光谱图像显示问题
  20. 反恐精英在线服务器名称,反恐精英1.6 国内服务器IP大全

热门文章

  1. 如何制作六一儿童节答题测试H5页面?
  2. linux centos7下源码 tar安装mysql5.7.22或mysql5.7.20 图文详解
  3. 简单实用的vue常用后台管理模板框架
  4. solidworks绘制齿轮、机械爪(齿轮设计基础知识)
  5. 使用百度siteapp开发网站的App-(IOS和Android版本)
  6. 有效id和密码_ID和密码恢复
  7. 帆软(FineReport)主子报表(报表联动)
  8. iOS:error: unable to read input file
  9. Matlab代码实现绘制趋势图
  10. html转cshtml 基础篇