• Mysql的常用用法


    一、mysql中limit的用法详解[数据分页常用]

    在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。

    SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset


    LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。 

    mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15

    //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: 
    mysql> SELECT * FROM table LIMIT 95,-1// 检索记录行 96-last.

    //如果只给定一个参数,它表示返回最大的记录行数目: 
    mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

    //换句话说,LIMIT n 等价于 LIMIT 0,n。
     
    二、mysql中sql文件的编辑和如何导入导出sql文件

    1、MYSQL中SQL文件的编辑:

      随便使用一种编辑器都可以编辑,保存的sql文件后缀为:.sql。

      sql中的内容参考下面例子,创建数据库 : job5db

    DROP DATABASE IF EXISTS job5db;
    CREATE DATABASE job5db DEFAULT CHARACTER SET utf8;
    USE job5db;
    
    ##创建用户表
    CREATE TABLE t_user (
       user_id   INT AUTO_INCREMENT PRIMARY KEY,
       user_name VARCHAR(30),
       password  VARCHAR(32)
    )ENGINE=InnoDB; 
    
    ##创建投票记录表
    CREATE TABLE t_vote (
       vote_id  INT AUTO_INCREMENT PRIMARY KEY,
       vote_topic   VARCHAR(30),
       vote_state   VARCHAR(10),
       vote_max_can_select  INT,
       vote_total_count  INT,
       vote_total_option_count  INT,
       create_time timestamp default now(),
       start_time datetime,
       end_time datetime
    )ENGINE=InnoDB; 
    
    ##创建投票项表
    CREATE TABLE t_option (
       option_id  INT AUTO_INCREMENT PRIMARY KEY,
       option_name   INT,
       option_count  VARCHAR(23),
       vote_id INT,
       foreign key(vote_id) references t_vote(vote_id)
    )ENGINE=InnoDB; 
    
    
    ##插入初始化数据
    INSERT INTO t_user (user_name,password) 
                 VALUES('admin','123456');
    COMMIT;
    View Code

    2.从SQL文件中导入数据到MYSQL中:

    1>首先,我们应该在cmd中进入mysql指令界面中,格式很简单 ,就是  mysql -u[用户名] -h[主机所在地址,默认不写是localhost] -p   然后输入密码即可

    2>直接使用  source [所在的路径//*.sql]  将SQL文件进行导入,接下来就会输出一大串的Query OK之类的信息了。

    3、MYSQL中将数据库导出成SQL文件:

      其实很简单的,就是一条语句就可以了,首先我们打开cmd,不用进mysql指令界面,直接按照下列格式将导出语句敲进去,然后再输入密码即可了:

      mysqldump -h[主机所在IP] -u[用户名] -p [要导出的数据库]>[导出的路径//[文件名].sql]

    好吧,直接这样看可能有点抽象,我们来举个例子,目前我的MYSQL中有一个数据库bookinfodb,现在我要将它导出并且保存到D盘中。

    这个时候我们再到D盘目录下,我们就可以看到多了一个test.sql文件了

    三、Mysql获取表中最后一行记录的语句?

     排序后取得第一条记录
    SELECT * FROM tb ORDER BY id DESC LIMIT 1
     【注】在JDBC中有可以在执行时,取得插入时产生的主键:
     1 //方法一:
     2 long key =-1L;
     3 Statement statement = connection.createStatement();
     4 statement.executeUpdate(YOUR_SQL_HERE,Statement.RETURN_GENERATED_KEYS);
     5 ResultSet rs = statement.getGeneratedKeys();
     6 if(rs !=null&& rs.next()){
     7 key = rs.getLong(1);
     8 }
     9 
    10 //方法二:
    11 PreparedStatement ps = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
    12 statement.executeUpdate();
    13 ResultSet rs = statement.getGeneratedKeys();
    14 //方法三:下面这种可精确取得某个字段
    15 PreparedStatement ps = con.prepareStatement(sql, new String[]{"USER_ID"})
     

    四、MySQL级联删除和更新

     首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。 

    下面,我们先创建以下测试用数据库表: 
    CREATE TABLE `roottb` (
    
      `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
    
      `data` VARCHAR(100) NOT NULL DEFAULT '',
    
      PRIMARY KEY (`id`)
    
    ) TYPE=InnoDB;
    
    
    
    CREATE TABLE `subtb` (
    
      `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
    
      `rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
    
      `data` VARCHAR(100) NOT NULL DEFAULT '',
    
      PRIMARY KEY (`id`),
    
      INDEX (`rootid`),
    
      FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE
    
    ) TYPE=InnoDB;
    View Code

    注意: 
    1、必须使用InnoDB引擎; 
    2、外键必须建立索引(INDEX); 
    3、外键绑定关系这里使用了“ ON DELETE CASCADE”,意思是如果外键对应数据被删除,将关联数据完全删除,更多信息请参考MySQL手册中关于InnoDB的文档; 

    五、mysql update语句问题:You can't specify target table 'user' for update in FROM clause

    原因是mysql不支持从选择的表再去修改,所以构造个临时表来解决问题

    Error Code: 1093. You can't specify target table 'ws_product' for update in FROM clause

    这个是我们在使用update或者delete语句时,在where条件里面加入的子查询导致的。例如如下的update语句:

    update product set type = 'static' where id in (
    select id from product where first_name ='superman'
    );

    修改上述语句为下面这样,该问题可以解决:

    update ws_product set type = 'static' where id in (
    select id form (
     select id from ws_product where first_name ='superman'
    ) xx
    );

    注意,这样一定要给最里面的子查询定义一个别名,不然会报另外一个错误:

    Error Code: 1248. Every derived table must have its own alias

  • 相关阅读:
    nginx 处理跨域以及 OPTIONS预检请求
    EasyCVR智能边缘网关硬件全新升级,强劲性能从“芯”出发
    如何使用开源小工具goofys实现自动挂载对象存储桶到Linux?
    【操作步骤】如何自查判断视频平台是否私走流量?
    基于边缘AI计算的人员入侵检测CNN算法在实际场景中的应用
    MySQL 17 order by rand()
    MySQL45讲order by
    Http 状态码 及Rest 设计指南相
    微服务笔记
    Go相对路径问题
  • 原文地址:https://www.cnblogs.com/mo-wang/p/3712686.html
Copyright © 2020-2023  润新知