一 环境:XP3 Oracle10g MyEclipse6 (Tomcat) JDK1.5
二 工程相关图片:
三 基本上参照之前示例修改得来,重点关注SimpleJdbcTemplate与JdbcTemplate用法
以下只列出比较重要的类
UserController.java
Java代码
- 套餐 com.liuzd.sj.web;
- 导入 java.util.List;
- 导入 javax.annotation.Resource;
- 导入 javax.servlet.http.HttpServletRequest;
- 导入 org.springframework.stereotype.Controller;
- 导入 org.springframework.web.bind.annotation.PathVariable;
- 导入 org.springframework.web.bind.annotation.RequestMapping;
- 导入 org.springframework.web.bind.annotation.SessionAttributes;
- 导入 org.springframework.web.servlet.ModelAndView;
- 导入 com.liuzd.page.Page;
- 导入 com.liuzd.sj.entity.User;
- 导入 com.liuzd.sj.service.UserService;
- @Controller
- @RequestMapping("/user")
- @SessionAttributes("userList")
- 公共 类 UserController 扩展 BaseController{
- 私有 UserService userService;
- 公共 UserService getUserService() {
- 返回 userService;
- }
- @Resource
- public void setUserService(UserService userService) {
- 这个.userService = userService;
- }
- @RequestMapping("/userList")
- 公共 ModelAndView userList(HttpServletRequest 请求){
- StringBuilder querySql = new StringBuilder();
- querySql.append("从用户中选择 * ,其中 1=1 ");
- String oracleQuerySql = querySql.toString();
- //获取总条数
- Long totalCount = new Long(这个.getUserService().pageCounts(oracleQuerySql));
- //设置分页对象
- Page page = executePage(request,oracleQuerySql,totalCount," id desc ");
- ModelAndView mv = 新 ModelAndView();
- //查询集合
- 列表 用户 = 这个.getUserService().pageList(page.getQuerySql());
- mv.addObject("userList",users);
- mv.setViewName("userList");
- 返回 mv;
- }
- @RequestMapping("/addUser")
- public ModelAndView addUser(HttpServletRequest 请求,User 用户){
- System.out.println("添加用户:" 用户);
- 这个.userService.addUser(user);
- 返回 userList(请求);
- }
- @RequestMapping("/toAddUser")
- public String toAddUser(){
- 返回 "addUser";
- }
- @RequestMapping("/delUser/{id}")
- public ModelAndView delUser(@PathVariable("id") 字符串 id,HttpServletRequest 请求){
- 这个.userService.delUser(new User().setId(id));
- 返回 userList(请求);
- }
- @RequestMapping("/getUser/{id}")
- public ModelAndView getUser(@PathVariable("id") 字符串 id){
- 用户 user = 这个.userService.getUserById(new User().setId(id));
- ModelAndView mv = 新 ModelAndView("updateUser");
- mv.addObject("用户",user);
- 返回 mv;
- }
- @RequestMapping("/updateUser")
- public ModelAndView editUser(User user,HttpServletRequest request){
- System.out.println("编辑: " user);
- 这个.userService.editUser(user);
- 返回 userList(请求);
- }
- }
package com.liuzd.sj.web; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.ModelAndView; import com.liuzd.page.Page; import com.liuzd.sj.entity.User; import com.liuzd.sj.service.UserService; @Controller @RequestMapping("/user") @SessionAttributes("userList") public class UserController extends BaseController{ private UserService userService; public UserService getUserService() { return userService; } @Resource public void setUserService(UserService userService) { this.userService = userService; } @RequestMapping("/userList") public ModelAndView userList(HttpServletRequest request){ StringBuilder querySql = new StringBuilder(); querySql.append("select * from users where 1=1 "); String oracleQuerySql = querySql.toString(); //获取总条数 Long totalCount = new Long(this.getUserService().pageCounts(oracleQuerySql)); //设置分页对象 Page page = executePage(request,oracleQuerySql,totalCount," id desc "); ModelAndView mv = new ModelAndView(); //查询集合 List<user> users = this.getUserService().pageList(page.getQuerySql()); mv.addObject("userList",users); mv.setViewName("userList"); return mv; } @RequestMapping("/addUser") public ModelAndView addUser(HttpServletRequest request,User user){ System.out.println("ADD USER: "+ user); this.userService.addUser(user); return userList(request); } @RequestMapping("/toAddUser") public String toAddUser(){ return "addUser"; } @RequestMapping("/delUser/{id}") public ModelAndView delUser(@PathVariable("id") String id,HttpServletRequest request){ this.userService.delUser(new User().setId(id)); return userList(request); } @RequestMapping("/getUser/{id}") public ModelAndView getUser(@PathVariable("id") String id){ User user = this.userService.getUserById(new User().setId(id)); ModelAndView mv = new ModelAndView("updateUser"); mv.addObject("user",user); return mv; } @RequestMapping("/updateUser") public ModelAndView editUser(User user,HttpServletRequest request){ System.out.println("编辑: "+user); this.userService.editUser(user); return userList(request); } } </user>
BaseController.java
Java 代码
- 套餐 com.liuzd.sj.web;
- 导入 javax.servlet.http.HttpServletRequest;
- 导入 com.liuzd.page.Page;
- 导入 com.liuzd.page.PageState;
- 导入 com.liuzd.page.PageUtil;
- /**
- *标题:
- *描述:
- *版权: 版权所有 (c) 2011
- *公司:http://liuzidong.iteye.com/
- *制作日期:2011-5-23 下午03:31:03
- * @author liuzidong
- * @version 1.0
- * @since 1.0
- *
- */
- 公共 类 BaseController {
- /**
- * oracel的三层分页语句
- * 子类在展现数据前,进行分页计算!
- * @param querySql 查询的SQL语句,未进行分页
- * @param totalCount 根据查询SQL获取的总条数
- * @param columnNameDescOrAsc 列名 排序方式 : ID DESC or ASC
- */
- 受保护 页面executePage(HttpServletRequest 请求,String querySql,Long totalCount,String columnNameDescOrAsc){
- String oracleSql = PageUtil.createQuerySql(querySql,columnNameDescOrAsc);
- if(null == totalCount){
- 总计数 = 0L;
- }
- /**页面状态,这个状态是分页自带的,与业务无关*/
- String pageAction = request.getParameter("pageAction");
- 字符串值 = request.getParameter("pageKey");
- /**获取下标判断分页状态*/
- int index = PageState.getOrdinal(pageAction);
- 页页 = null;
- /**
- * index
- * 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1
- * 2 当页面设置每页显示多少条: index=0,当每页显示多少条时,分页类要重新计算
- * */
- 页面 sessionPage = getPage(request);
- if(索引1){
- page = PageUtil.inintPage(oracleSql,totalCount,index,value,sessionPage);
- }其他{
- page = PageUtil.execPage(index,value,sessionPage);
- }
- setSession(请求,页面);
- 返回 页面;
- }
- 私有 页面 getPage(HttpServletRequest 请求) {
- Page page = (Page)request.getSession().getAttribute(PageUtil.SESSION_PAGE_KEY);
- if(页== null){
- 页面= 新 页面();
- }
- return page;
- }
- private void setSession(HttpServletRequest request,Page page) {
- request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY,page);
- }
- }
package com.liuzd.sj.web; import javax.servlet.http.HttpServletRequest; import com.liuzd.page.Page; import com.liuzd.page.PageState; import com.liuzd.page.PageUtil; /** *Title: *Description: *Copyright: Copyright (c) 2011 *Company:http://liuzidong.iteye.com/ *Makedate:2011-5-23 下午03:31:03 * @author liuzidong * @version 1.0 * @since 1.0 * */ public class BaseController { /** * oracel的三层分页语句 * 子类在展现数据前,进行分页计算! * @param querySql 查询的SQL语句,未进行分页 * @param totalCount 根据查询SQL获取的总条数 * @param columnNameDescOrAsc 列名+排序方式 : ID DESC or ASC */ protected Page executePage(HttpServletRequest request,String querySql,Long totalCount,String columnNameDescOrAsc){ String oracleSql = PageUtil.createQuerySql(querySql,columnNameDescOrAsc); if(null == totalCount){ totalCount = 0L; } /**页面状态,这个状态是分页自带的,与业务无关*/ String pageAction = request.getParameter("pageAction"); String value = request.getParameter("pageKey"); /**获取下标判断分页状态*/ int index = PageState.getOrdinal(pageAction); Page page = null; /** * index <br>UserRowMapper.java <br> <p class="dp-highlighter"> </p><p class="bar"> </p><p class="tools">Java代码 </p> <ol class="dp-j"> <li> <span><span class="keyword">package</span><span> com.liuzd.sj.dao; </span></span> </li> <li> <span> </span> </li> <li> <span><span class="keyword">import</span><span> java.sql.ResultSet; </span></span> </li> <li> <span><span class="keyword">import</span><span> java.sql.SQLException; </span></span> </li> <li> <span> </span> </li> <li> <span><span class="keyword">import</span><span> org.springframework.jdbc.core.RowMapper; </span></span> </li> <li> <span> </span> </li> <li> <span><span class="keyword">import</span><span> com.liuzd.sj.entity.User; </span></span> </li> <li> <span> </span> </li> <li> <span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> UserRowMapper </span><span class="keyword">implements</span><span> RowMapper<user> { </user></span></span> </li> <li> <span> </span> </li> <li> <span> </span> </li> <li> <span> <span class="keyword">public</span><span> UserRowMapper(){} </span></span> </li> <li> <span> </span> </li> <li> <span> <span class="keyword">public</span><span> User mapRow(ResultSet rs, </span><span class="keyword">int</span><span> index) </span><span class="keyword">throws</span><span> SQLException { </span></span> </li> <li> <span> User user = <span class="keyword">new</span><span> User( </span></span> </li> <li> <span> rs.getString(<span class="string">"id"</span><span>), </span></span> </li> <li> <span> rs.getString(<span class="string">"name"</span><span>), </span></span> </li> <li> <span> rs.getString(<span class="string">"password"</span><span>), </span></span> </li> <li> <span> rs.getString(<span class="string">"address"</span><span>), </span></span> </li> <li> <span> rs.getString(<span class="string">"sex"</span><span>), </span></span> </li> <li> <span> rs.getInt(<span class="string">"age"</span><span>) </span></span> </li> <li> <span> ); </span> </li> <li> <span> <span class="keyword">return</span><span> user; </span></span> </li> <li> <span> } </span> </li> <li> <span>} </span> </li> </ol> <pre title="SpringMVC+JDBC:分页示例" class="java" style="DISPLAY: none" pre_index="2" source_url="http://liuzidong.iteye.com/blog/1067492" codeable_type="Blog" codeable_id="1067492" name="code">package com.liuzd.sj.dao; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; import com.liuzd.sj.entity.User; public class UserRowMapper implements RowMapper<user> { public UserRowMapper(){} public User mapRow(ResultSet rs, int index) throws SQLException { User user = new User( rs.getString("id"), rs.getString("name"), rs.getString("password"), rs.getString("address"), rs.getString("sex"), rs.getInt("age") ); return user; } } </user>
UserDAOImpl.java
Java代码
- 包 com.liuzd.sj.dao.impl;
- 导入 java.sql.PreparedStatement;
- 导入 java.sql.SQLException;
- 导入 java.util.List;
- 导入 javax.annotation.Resource;
- 导入 org.springframework.jdbc.core.BeanPropertyRowMapper;
- 导入 org.springframework.jdbc.core.PreparedStatementSetter;
- 导入 org.springframework.stereotype.Repository;
- 导入 com.liuzd.sj.dao.UserDAO;
- 导入 com.liuzd.sj.dao.UserRowMapper;
- 导入 com.liuzd.sj.entity.User;
- @Repository("userDao")
- 公共 类 UserDAOImpl 实现 UserDAO
- {
- 私有 静态 最终 字符串 INSERT = “插入用户(ID、姓名、年龄、性别、地址、密码)VALUES(?,?,?,?,?,?)”;
- 私人 静态 最终 字符串 UPDATE = “更新用户设置名称=?,年龄=?,性别=?,地址=?,密码=?其中id=?”;
- 私有 静态 最终 String GET = “从 id=? 的用户中选择 *”;
- 私有 静态 最终 String CHECK = “从名称=?且密码=?的用户中选择count(1)个”;
- 私有 静态 最终 String SELECT = “从用户中选择*”;
- 私有 静态 最终 String DEL = “删除 id= 的用户?”;
- 私有 org.springframework.jdbc.core.JdbcTemplate jdbcTemplate;
- public org.springframework.jdbc.core.JdbcTemplate getJdbcTemplate() {
- 返回 jdbcTemplate;
- }
- @Resource
- 公共 void setJdbcTemplate(
- org.springframework.jdbc.core.JdbcTemplate jdbcTemplate) {
- 这个.jdbcTemplate = jdbcTemplate;
- }
- 公共 void addUser(最终 用户 user) {
- getJdbcTemplate().update(INSERT, 新 PreparedStatementSetter(){
- public void setValues(PreparedStatement ps)
- 抛出 SQLException {
- int i = 0;
- ps.setString( i, user.getId());
- ps.setString( i, user.getName());
- ps.setInt( i, user.getAge());
- ps.setString( i,user.getSex());
- ps.setString( i,user.getAddress());
- ps.setString( i,user.getPassword());
- }
- });
- }
- public int checkUserExits(User user) {
- 返回 getJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword());
- }
- 公共 void delUser(用户 用户) {
- getJdbcTemplate().update(DEL, user.getId());
- }
- 公开 void editUser(最终 用户 user) {
- getJdbcTemplate().update(UPDATE, 新 PreparedStatementSetter(){
- public void setValues(PreparedStatement ps)
- 抛出 SQLException {
- int i = 0;
- ps.setString( i, user.getName());
- ps.setInt( i, user.getAge());
- ps.setString( i,user.getSex());
- ps.setString( i,user.getAddress());
- ps.setString( i,user.getPassword());
- ps.setString( i, user.getId());
- }
- });
- }
- 公开 列表 getAllUser() {
- 返回 getJdbcTemplate().query(SELECT, new BeanPropertyRowMapper
(User. 类)); - }
- 公共 用户 getUserById(User user) {
- 返回 getJdbcTemplate().queryForObject(GET, new UserRowMapper(),user.getId());
- }
- public int pageCounts(String querySql) {
- return getJdbcTemplate().queryForInt("select count(1) from("+querySql+")");
- }
-
public List
pageList(String querySql) { - return getJdbcTemplate().query(querySql, new UserRowMapper());
- }
- }
package com.liuzd.sj.dao.impl; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; import javax.annotation.Resource; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.PreparedStatementSetter; import org.springframework.stereotype.Repository; import com.liuzd.sj.dao.UserDAO; import com.liuzd.sj.dao.UserRowMapper; import com.liuzd.sj.entity.User; @Repository("userDao") public class UserDAOImpl implements UserDAO { private static final String INSERT = "insert into users(id,name,age,sex,address,password)VALUES(?,?,?,?,?,?)"; private static final String UPDATE = "update users set name=?,age=?,sex=?,address=?,password=? where id=?"; private static final String GET = "select * from users where id=?"; private static final String CHECK = "select count(1) from users where name=? and password=?"; private static final String SELECT = "select * from users"; private static final String DEL = "delete users where id=?"; private org.springframework.jdbc.core.JdbcTemplate jdbcTemplate; public org.springframework.jdbc.core.JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } @Resource public void setJdbcTemplate( org.springframework.jdbc.core.JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void addUser(final User user) { getJdbcTemplate().update(INSERT, new PreparedStatementSetter(){ public void setValues(PreparedStatement ps) throws SQLException { int i = 0; ps.setString(++i, user.getId()); ps.setString(++i, user.getName()); ps.setInt(++i, user.getAge()); ps.setString(++i,user.getSex()); ps.setString(++i,user.getAddress()); ps.setString(++i,user.getPassword()); } }); } public int checkUserExits(User user) { return getJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword()); } public void delUser(User user) { getJdbcTemplate().update(DEL, user.getId()); } public void editUser(final User user) { getJdbcTemplate().update(UPDATE, new PreparedStatementSetter(){ public void setValues(PreparedStatement ps) throws SQLException { int i = 0; ps.setString(++i, user.getName()); ps.setInt(++i, user.getAge()); ps.setString(++i,user.getSex()); ps.setString(++i,user.getAddress()); ps.setString(++i,user.getPassword()); ps.setString(++i, user.getId()); } }); } public List<user> getAllUser() { return getJdbcTemplate().query(SELECT, new BeanPropertyRowMapper<user>(User.class)); } public User getUserById(User user) { return getJdbcTemplate().queryForObject(GET, new UserRowMapper(),user.getId()); } public int pageCounts(String querySql) { return getJdbcTemplate().queryForInt("select count(1) from("+querySql+")"); } public List<user> pageList(String querySql) { return getJdbcTemplate().query(querySql, new UserRowMapper()); } } </user></user></user>
UserDAOImpl2.java
Java代码
- 包 com.liuzd.sj.dao.impl;
- 导入 java.util.List;
- 导入 java.util.Map;
- 导入 javax.annotation.Resource;
- 导入 org.springframework.jdbc.core.BeanPropertyRowMapper;
- 导入 org.springframework.stereotype.Repository;
- 导入 com.liuzd.sj.dao.UserDAO;
- 导入 com.liuzd.sj.entity.User;
- 导入 com.liuzd.util.BeanToMapUtil;
- @Repository("userDao2")
- 公共 类 UserDAOImpl2 实现 UserDAO
- {
- 私有 静态 最终 字符串 INSERT = “插入用户(id,姓名,年龄,性别,地址,密码)VALUES(:id,:姓名,:年龄,:性别,:地址,:密码)”;
- 私人 静态 最终 字符串 UPDATE = “更新用户设置名称=:姓名,年龄=:年龄,性别=:性别,地址=:地址,密码=:密码,其中id=:id”;
- 私有 静态 最终 String GET = “从 id=? 的用户中选择 *”;
- 私有 静态 最终 String CHECK = “从名称=?且密码=?的用户中选择count(1)个”;
- 私有 静态 最终 String SELECT = “从用户中选择*”;
- 私有 静态 最终 String DEL = “删除 id= 的用户?”;
- 私有 org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate;
- public org.springframework.jdbc.core.simple.SimpleJdbcTemplate getSimpleJdbcTemplate() {
- 返回 simpleJdbcTemplate;
- }
- @Resource
- 公共 void setSimpleJdbcTemplate(
- org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate) {
- 这个.simpleJdbcTemplate = simpleJdbcTemplate;
- }
- 公共 void addUser(最终 用户 user) {
-
地图
userMap = BeanToMapUtil.beanToMap(user); - getSimpleJdbcTemplate().update(INSERT, userMap);
- }
- public int checkUserExits(User user) {
- 返回 getSimpleJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword());
- }
- 公共 void delUser(用户 用户) {
- getSimpleJdbcTemplate().update(DEL, user.getId());
- }
- 公开 void editUser(最终 用户 user) {
- 地图 userMap = BeanToMapUtil.beanToMap(user);
- getSimpleJdbcTemplate().update(UPDATE, userMap);
- }
- 公开 列表 getAllUser() {
- 返回 getSimpleJdbcTemplate().query(SELECT, new BeanPropertyRowMapper
(User. 类)); - }
- 公共 用户 getUserById(User user) {
- 返回 getSimpleJdbcTemplate().queryForObject(GET, new BeanPropertyRowMapper
(User. 类),user.getId()); - }
- public int pageCounts(String querySql) {
- 返回 getSimpleJdbcTemplate().queryForInt("select count(1) from(" querySql ")");
- }
- 公开 列表 pageList(String querySql) {
- 返回 getSimpleJdbcTemplate().query(querySql, new BeanPropertyRowMapper
(User. 类)); - }
- }
包 com.liuzd.sj.dao.impl; 导入java.util.List; 导入java.util.Map; 导入javax.annotation.Resource; 导入 org.springframework.jdbc.core.BeanPropertyRowMapper; 导入 org.springframework.stereotype.Repository; 导入 com.liuzd.sj.dao.UserDAO; 导入 com.liuzd.sj.entity.User; 导入 com.liuzd.util.BeanToMapUtil; @Repository(“userDao2”) 公共类 UserDAOImpl2 实现 UserDAO { private static Final String INSERT = "插入用户(id,姓名,年龄,性别,地址,密码)VALUES(:id,:姓名,:年龄,:性别,:地址,:密码)"; private static Final String UPDATE = "更新用户集 name=:name,age=:age,sex=:sex,address=:address,password=:password where id=:id"; private static Final String GET = "从 id=? 的用户中选择 *"; private static Final String CHECK = "从名称=?且密码=?的用户中选择count(1)个"; private static Final String SELECT = "从用户中选择 *"; private static Final String DEL = "删除 id=? 的用户"; 私有 org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate; 公共 org.springframework.jdbc.core.simple.SimpleJdbcTemplate getSimpleJdbcTemplate() { 返回简单JdbcTemplate; } @资源 公共无效setSimpleJdbcTemplate( org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate) { this.simpleJdbcTemplate = simpleJdbcTemplate; } 公共无效addUser(最终用户用户){ 地图 userMap = BeanToMapUtil.beanToMap(用户); getSimpleJdbcTemplate().update(INSERT, userMap); } 公共 int checkUserExits(用户用户){ return getSimpleJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword()); } 公共无效delUser(用户用户){ getSimpleJdbcTemplate().update(DEL, user.getId()); } 公共无效editUser(最终用户用户){ 地图 userMap = BeanToMapUtil.beanToMap(用户); getSimpleJdbcTemplate().update(UPDATE, userMap); } 公共列表获取所有用户() { 返回 getSimpleJdbcTemplate().query(SELECT, new BeanPropertyRowMapper<user>(User.class)); } 公共用户 getUserById(用户用户){ return getSimpleJdbcTemplate().queryForObject(GET, new BeanPropertyRowMapper<user>(User.class),user.getId()); } 公开</user></user>

ACID属性包括原子性、一致性、隔离性和持久性,是数据库设计的基石。1.原子性确保事务要么完全成功,要么完全失败。2.一致性保证数据库在事务前后保持一致状态。3.隔离性确保事务之间互不干扰。4.持久性确保事务提交后数据永久保存。

MySQL既是数据库管理系统(DBMS),也与编程语言紧密相关。1)作为DBMS,MySQL用于存储、组织和检索数据,优化索引可提高查询性能。2)通过SQL与编程语言结合,嵌入在如Python中,使用ORM工具如SQLAlchemy可简化操作。3)性能优化包括索引、查询、缓存、分库分表和事务管理。

MySQL使用SQL命令管理数据。1.基本命令包括SELECT、INSERT、UPDATE和DELETE。2.高级用法涉及JOIN、子查询和聚合函数。3.常见错误有语法、逻辑和性能问题。4.优化技巧包括使用索引、避免SELECT*和使用LIMIT。

MySQL是一种高效的关系型数据库管理系统,适用于存储和管理数据。其优势包括高性能查询、灵活的事务处理和丰富的数据类型。实际应用中,MySQL常用于电商平台、社交网络和内容管理系统,但需注意性能优化、数据安全和扩展性。

SQL和MySQL的关系是标准语言与具体实现的关系。1.SQL是用于管理和操作关系数据库的标准语言,允许进行数据的增、删、改、查。2.MySQL是一个具体的数据库管理系统,使用SQL作为其操作语言,并提供高效的数据存储和管理。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

EXPLAIN命令的关键指标包括type、key、rows和Extra。1)type反映查询的访问类型,值越高效率越高,如const优于ALL。2)key显示使用的索引,NULL表示无索引。3)rows预估扫描行数,影响查询性能。4)Extra提供额外信息,如Usingfilesort提示需要优化。

Usingtemporary在MySQL查询中表示需要创建临时表,常见于使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通过优化索引和重写查询避免其出现,提升查询性能。具体来说,Usingtemporary出现在EXPLAIN输出中时,意味着MySQL需要创建临时表来处理查询。这通常发生在以下情况:1)使用DISTINCT或GROUPBY时进行去重或分组;2)ORDERBY包含非索引列时进行排序;3)使用复杂的子查询或联接操作。优化方法包括:1)为ORDERBY和GROUPB


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

记事本++7.3.1
好用且免费的代码编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。