MYSQL数据操作(CRUD:插⼊,删除和更新
插⼊数据
①插⼊⼀⾏记录
INSERT INTO TABLE_NAME(列名1,列名2,.......)
VALUES(值1,值2,.......);
②插⼊多⾏记录
INSERT INTO TABLE_NAME(列名1,列名2,.......)
VALUES(值1,值2,.......),
...........
VALUES(值1,值2,.......);
③插⼊查询结果(可能是结果集)
INSERT INTO TABLE_NAME(列名1,列名2,.......)
SELECT(列名1,列名2,.......)
FROM TABLE_NAME2
WHERE .........
注意:
1.  如果⽤TABLE_NAME(列名1,列名2,.......) ,那么对于语句⾥⾯的字段参数:
顺序可以⾃定义,不⽤和表的字段顺序⼀致;
要插⼊哪些字段也可以⾃定义,不⽤把表的所有字段都写上。
2.  VALUES(值1,值2,.......)语句⾥的赋值参数,会和上⾯的字段参数⼀⼀对应。
⽽且我们写要插⼊的值的时候,必须保证所插⼊的值和对应字段的数据类型⼀致,⽐如字段name数据类型是VARCHAR,那么我们插⼊的值就必须是字符串,即单引号  'xxx' ;再⽐如,字段参数是student(name,age),我们插⼊的值不能是        VALUES(,12),如果想插⼊空值必须⽤NULL。
总结⼀下,⼀旦我们选择了要插⼊的字段,我们就必须保证要插⼊的数值和选择的字段的个数,顺序,类型⼀致。
举个例⼦,假设现在有表student(id,name,age,sex),我们选择的要INSERT INTO 的字段是student(name,age),那么VALUES的时候绝对不能出现以下四种情况:
VALUES(  ,12)插⼊了MYSQL不识别的值,想插⼊空值必须⽤NULL。
VALUES( '王⼀')插⼊的数值和选择的字段的个数不同
VALUES(12, '王⼀')字段参数的顺序和插⼊数值的顺序不同,不能⼀⼀对应
VALUES('王⼀', '⼗⼆')插⼊数值和字段类型不同
3.  上⾯提到我们可以只选择部分字段进⾏插⼊,那么那些未选择的字段会怎么样呢?
①在具体开发中,有⾃动增加约束和默认值约束的字段我们⼀般会把他们忽略,不需要我们⼿动赋值,MYSQL会⾃动给其赋值。
②有时,有些字段暂时是多余的,假设这些字段既没有默认值约束,也没有⾃动增加约束,同时我们⼜不想删掉这些字段,那么我们会不选择这些字段,让,MYSQL给他们⾃动插⼊NULL值。
4.  如果我们想选择所有字段,把所有字段都写⼀遍就太⿇烦了,我们可以忽略字段参数,直接⽤
INSERT INTO TABLE_NAME
...........
...........
假设有表student(id,name,age,sex),上⾯的语句INSERT INTO student,就相当于INSERT INTO student(id,name,age,sex)。
但是这种⽤法虽然⽅便,但不灵活,这种⽤法就只能表⽰表的所有字段,且字段顺序和表的字段顺序⼀样。
5.插⼊查询结果其实和插⼊记录其实差不多,只不过⼀个是SELECT(列名1,列名2,.......),⼀个是VALUES(值1,值2,.......),SELECT⾥⾯的参数和VALUES的参数⼀样,都适⽤且必须遵守上⾯4条规则。
假设有表student(id,name,age,sex)和表children(id,sex,age,name)
INSERT INTO student(name,age,sex)
SELECT  sex,age,name  #字段参数的顺序和插⼊数值的顺序不同,不能⼀⼀对应
FROM children
WHERE  age>7;
这样是不⾏的,MYSQL还没有智能到帮你⾃动匹配字段。
删除数据
Delete from 表名
[where条件];
注意:⼀般都会加where条件,没有条件的话,整个表的数据都会被删除。删除操作需谨慎,此操作不可逆
修改数据
Update 表名 set 字段 = 值
[where条件];
1、mysql添加记录
--添加记录的语法(可添加单条记录或者多条记录),INTO是可以省略的,字段名也可以省略的,但是如果省略的话,后⾯对应的value的值就要全部填写
INSERT [INTO] tab_name [(col_name,...)] {VALUE|VALUES} ();
--添加记录的语法(只可添加⼀条记录)
INSERT tab_name SET 字段名称=字段值,...;
--从表中查询记录进⾏添加
INSERT tab_name SELECT 字段名称 FROM tab1_name [WHERE 条件]
注意:通常情况下,以上语句在使⽤values插⼊单⾏数据的时候效率要⽐value来得⾼,但是插⼊多⾏数据的时候效率value要⽐values来得⾼,set与value|values相⽐效率要来得⾼,但是set是mysql的扩展,对于其他数据库是不存在的,所以可移值性⽐较低,并且set⼀次只能添加⼀条数据。
举例:
-
-测试⽤表
CREATE TABLE IF NOT EXISTS test(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '⽤户ID',
name VARCHAR(20) NOT NULL COMMENT '⽤户名',
sex ENUM('0','1','2') NOT NULL DEFAULT '0' COMMENT '性别0保密,1男,2⼥'
)ENGINE=INNODB CHARSET=UTF8;
--指定值
INSERT INTO test (name,sex) VALUES ('AA','0');
--不指定值,那么所对应的所有的值要全部写出来
INSERT test VALUES (NULL,'BB','1');
--插⼊多条记录,中间⽤逗号隔开,注意中英⽂状下的逗号
INSERT test (name,sex) VALUE ('CC','2'),('DD','1'),('EE','0'),('FF','2');
--应⽤set来添加数据
INSERT test SET name="GG",sex="2";
--进⾏批量插⼊
INSERT user (name,sex) SELECT name,sex FROM test WHERE sex="1"
2、修改记录
--更改记录的语法(有点类似INSERT..SET)
UPDATE tab_name SET 字段名=字段值,...[WHERE 条件];
注意:如果没有指定where那么整张表的数据都会被更改。
--在id<3的名字后⾯加上ok,并且把性别改成默认值(默认值可以⽤DEFAULT来代替)
UPDATE test SET name=CONCAT(name,'ok'),sex=DEFAULT WHERE id<=3;
-
-SELECT * FROM test 输出
-- +----+------+-----+
-- | id | name | sex |
-- +----+------+-----+
-- |  1 | AAok | 0  |
-- |  2 | BBok | 0  |
-- |  3 | CCok | 0  |
-- |  4 | DD  | 2  |
-- |  5 | EE  | 1  |
-- |  6 | FF  | 0  |
-- |  7 | GG  | 2  |
-
- +----+------+-----+
批量更新数据表
使⽤MYSQL⾃带语句进⾏批量更新
-- 使⽤update set 进⾏批量更新,注意:如果是多个条件的时候,每个条件的长度应该要相等
UPDATE tab_name SET 需修改的字段=CASE 参照字段 WHEN 参数字段值 THEN 修改字段值 ... END,...END [WHERE 条件];
-- 举例,根据id修改名字和年龄
UPDATE user SET name = CASE id WHEN 1 THEN "AA" WHEN 2 THEN "BB" END,age=CASE id WHEN 1 THEN 18 WHEN 2 THEN 22 END WHERE id IN (1,2);
-- 查询修改记录,当查询到⽬标记录的时候进⾏修改,如果没有查询到则进⾏插⼊
INSERT INTO tab_name (字段名,...) VALUE (值,...) ON DUPLICATE KEY UPDATE 字段名=VALUES(字段名);
-
- 举例,注意:需要更改的字段放在ON DUPLICATE KEY UPDATE 后⾯
INSERT INTO `user` (id,name,age) VALUES (1,"⼩A",8),(2,"⼩B",18),(3,"⼩C",28),(4,"⼩D",38) ON DUPLICATE KEY UPDATE `name`=VALUES(name),age=VALUES(age);
--谨慎使⽤使⽤replace into 进⾏批量更新,注意该操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值
REPLACE INTO tab_name (字段名,...) VALUE (值,...);
-- 举例,如果在表中的唯⼀值⾥能匹配到相关的数据,那么会进⾏修改操作,否则会进⾏添加操作
REPLACE INTO user (id,name,age) VALUE (1,"CC",12),(2,"DD",27);
3、删除记录
--删除记录的语法,如果不添加条件,那么会删除全部记录
DELETE FROM tab_name [WHERE 条件];
--删除记录,同时也可以重置AUTO_INCREMENT的值
TRUNCATE [TABLE] tab_name
注意:如果不添加条件,那么会删除全部记录,但是通过delete删除的全部记录,不会重置AUTO_INCREMENT的值,但是可以通过ALTER TABLE tab_name
AUTO_INCREMENT=1 进⾏设置
--删除所有ID⼤于3的记录
DELETE FROM test WHERE id>3;
--SELECT * FROM test 输出
-- +----+------+-----+
-- | id | name | sex |
-- +----+------+-----+
-- |  1 | AAok | 0  |
-- |  2 | BBok | 0  |
-- |  3 | CCok | 0  |
-- +----+------+-----+
4、查询记录
--查询记录的基本语法
SELECT select_expr,...FROM tab_name
[WHERE 条件]
[GROUP BY {col_name | position} HAVING ⼆次筛选]
[ORDER BY {col_name |position|expr} [ASC | DESC]]
[LIMIT 限制结果集的显⽰条数]
[OFFSET 偏移量]
--可以使⽤库名.表名的形式查询数据(即可以不指定当前数据库的情况下进⾏表查询)
SELECT select_expr,...FROM db_name.tab_name
--可以给字段或者表名起别名(可以通过AS或者空隔对表名或者字段名进⾏起别名)
SELECT col_name AS col_rename,... FROM tab_name AS tab_rename
--建议要⽤AS来分隔,这个⽐较容易区分
SELECT col_name col_rename,... FROM tab_name tab_rename
注意:建议在起别名的时候,要加上AS以免引起混乱,并且在起别名的时候,要在字段上加上别名.字段,以免在以后在多表联查时避免错误。
select distinct * from `表名`;
--以上⾯建的表为例
SELECT * st;
-- 输出
-- +----+------+-----+
-- | id | name | sex |
-- +----+------+-----+
-- |  1 | AAok | 0  |
-- |  2 | BBok | 0  |
-- |  3 | CCok | 0  |
-- +----+------+-----+
--给字段起别名
SELECT t.name AS text,t.sex AS ss st AS t;
-
- 输出
-- +------+----+
-- | text | ss |
-- +------+----+
-- | AAok | 0  |
-- | BBok | 0  |
-- | CCok | 0  |
-- +------+----+
distinct与sum,count⼀起使⽤
-- 原数组
-- +----+------+-------+-----+-------+
-
- | id | name | score | sex | class |
-- +----+------+-------+-----+-------+
-- |  1 | aaa  |    80 | ⼥  | ⼆班  |
-- |  2 | bbb  |    30 | 男  | ⼆班  |
-- |  3 | ccc  |    40 | ⼥  | ⼆班  |
-- |  4 | ddd  |    50 | 男  | ⼀班  |
-- |  5 | eee  |    80 | 男  | ⼀班  |
-- |  6 | fff  |    70 | ⼥  | ⼀班  |
-- |  1 | aaa  |    80 | ⼥  | ⼆班  |
-- +----+------+-------+-----+-------+
SELECT SUM(DISTINCT `score`), COUNT(DISTINCT `score`) FROM `worker`;
-
- 输出
-- +-----------------------+-------------------------+
-- | SUM(DISTINCT `score`) | COUNT(DISTINCT `score`) |
-- +-----------------------+-------------------------+
-- | 270                  |                      5 |
-- +-----------------------+-------------------------+
5、WHERE 的条件筛选(WHERE 条件会查询筛选出符合条件的记录,如果没有符合条件的记录,那么就会返回空记录)
a、where条件的⽐较运算符:=  >  >=  <  <=  !=  <>  <=>
--为原表添加⼀个字段
ALTER TABLE test ADD tDesc VARCHAR(30) COMMENT "描述";
--查询id=2的记录,其他⽤法也是⼀样的
SELECT id,name,sex FROM test WHERE id=2;
--查询是否为空值
SELECT id,name FROM test WHERE tDesc IS NULL;
SELECT id,name FROM test WHERE tDesc <=> NULL;
--查询不为空值
SELECT id,name FROM test WHERE tDesc IS NOT NULL;
注意:<=>与=的⽤法基本⼀样,但是<=>是可以检测是否为NULL值,但是=不可以检测,同时<=>是MYSQL独有的语法,在其他语⾔不可以使⽤,⽽=可以通⽤ b、逻辑运算符:AND(逻辑与)  OR(逻辑或)  NOT(逻辑⾮)  (介于两者之间)
-- 举例
SELECT id,name FROM test WHERE id<=2 AND sex='0';
-- 注意这个是包含1和2的
SELECT id,name FROM test WHERE id BETWEEN 1 AND 2;
-- NOT 举例
SELECT id,name FROM test WHERE NOT (id = 1);
c、模糊查询like和 not like的使⽤
通配符%表⽰匹配0个1个或者多个字符,通配符_表⽰匹配⼀个字符
-- 匹配A前后有任意个字符的情况
SELECT id,name FROM test WHERE name LIKE "%A%";
-- 匹配A前有⼀个字付,后⾯任意个字符的情况
SELECT id,name FROM test WHERE name LIKE "_A%";
-- 匹配A前有⼀个字付,后⾯⾄少⼀个字符的情况
SELECT id,name FROM test WHERE name LIKE "_A_%";
6、GROUP BY 分组
group by 把值相同的放到⼀个组中,最终查询出的结果只会显⽰组中的⼀条记录
--举例
--的按照性别分组,group by 的值段可以没有在SELECT ⾥⾯
SELECT id,name,sex FROM test GROUP BY sex;
--展⽰效果
-- +----+------+-----+
-- | id | name | sex |
-- +----+------+-----+
-- | 10 | CC  | 0  |
-- |  8 | AA  | 1  |
-
- |  9 | BB  | 2  |
-- +----+------+-----+
注意,如果需要看组中的成员,那么可以⽤到函数GROUP_CONCAT
--查看组中的成员
SELECT id,GROUP_CONCAT(name),GROUP_CONCAT(sex) FROM test Group BY sex;
--输出
-- +----+--------------------+-------------------+
-- | id | GROUP_CONCAT(name) | GROUP_CONCAT(sex) |
-- +----+--------------------+-------------------+
-- | 10 | CC,EE              | 0,0              |
-- |  8 | AA,DD,GG          | 1,1,1            |
-
- |  9 | BB,FF              | 2,2              |
-- +----+--------------------+-------------------+
GROUP BY 配合聚合函数使⽤
COUNT() 计数  SUM()求和  MAX() 最⼤值  MIN()最⼩值    AVG() 平均值
COUNT(col_name)与COUNT(*)的最⼤区别是,前者如果遇到值为null的时候,则不会计⼊范围,⽽后者会。所以后者可以作为统计总数⽤。
GROUP BY 与COUNT(*)结合的例⼦
--查看组中的成员,同时统计数量
SELECT sex,GROUP_CONCAT(name),COUNT(*) FROM test GROUP BY(sex);
--输出
-- +-----+--------------------+----------+
-- | sex | GROUP_CONCAT(name) | COUNT(*) |
-- +-----+--------------------+----------+
-- | 0  | CC,EE              |        2 |
-- | 1  | AA,DD,GG          |        3 |
-- | 2  | BB,FF              |        2 |
-- +-----+--------------------+----------+
GROUP BY 与SUM() ,  MAX() , MIN() , AVG() ,COUNT() 配合使⽤
--按性别分组,查看组中成员,个数,年龄总和,平均年龄,最⼩年龄,最⼤年龄
SELECT GROUP_CONCAT(name),COUNT(*),SUM(age),AVG(age),MAX(age),MIN(age) FROM test GROUP BY sex;
--输出
-- +--------------------+----------+----------+----------+----------+----------+
-- | GROUP_CONCAT(name) | COUNT(*) | SUM(age) | AVG(age) | MAX(age) | MIN(age) |
-- +--------------------+----------+----------+----------+----------+----------+
-- | CC,EE              |        2 | 85      | 42.5000  |      47 |      38 |
-- | AA,DD,GG          |        3 | 103      | 34.3333  |      78 |        7 |
-- | BB,FF              |        2 | 48      | 24.0000  |      26 |      22 |
-- +--------------------+----------+----------+----------+----------+----------+
SELECT COUNT(IF(`score`>50,1,NULL)) FROM `worker`;
-- 输出
-- +------------------------------+
-- | COUNT(IF(`score`>50,1,NULL)) |
-- +------------------------------+
-- |                            2 |
-
- +------------------------------+
sum 函数在对单列进⾏求和时如果有Null值,是不影响值,当对多列进⾏sum统计时,就会有错误。
注意:如果GROUP BY 在和WHERE 使⽤的时候,WHERE 应该要放在GROUP BY 前⾯,不然会报错的。
--先查询年龄⼤⼩20岁的并按性别分组,查看组中成员,个数,年龄总和,平均年龄,最⼩年龄,最⼤年龄
SELECT GROUP_CONCAT(name),COUNT(*),SUM(age),AVG(age),MAX(age),MIN(age) FROM test WHERE age>20 GROUP BY sex;
--输出
-- +--------------------+----------+----------+----------+----------+----------+
-- | GROUP_CONCAT(name) | COUNT(*) | SUM(age) | AVG(age) | MAX(age) | MIN(age) |
-- +--------------------+----------+----------+----------+----------+----------+
-
- | CC,EE              |        2 | 85      | 42.5000  |      47 |      38 |
-- | GG                |        1 | 78      | 78.0000  |      78 |      78 |
-- | BB,FF              |        2 | 48      | 24.0000  |      26 |      22 |
-- +--------------------+----------+----------+----------+----------+----------+
注意:如果对分组后的数据进⾏⼆次筛选,那么可以使⽤HAVING,并且HAVING要放在GROUP BY 后⾯,不然会报错的,HAVING与WHERE的不同之处在于后者不能对AS 后的字段不能选择,⽽前者不能对未SELECT的字段进⾏选择。
--按性别分组,查看组中成员,个数,年龄总和,平均年龄,最⼩年龄,最⼤年龄,并且筛选年龄总和⼤于50的组
SELECT GROUP_CONCAT(name),COUNT(*),SUM(age) AS total,AVG(age),MAX(age),MIN(age) FROM test GROUP BY sex HAVING total>50;
--输出
-- +--------------------+----------+-------+----------+----------+----------+
-- | GROUP_CONCAT(name) | COUNT(*) | total | AVG(age) | MAX(age) | MIN(age) |
-- +--------------------+----------+-------+----------+----------+----------+
-- | CC,EE              |        2 | 85    | 42.5000  |      47 |      38 |
-- | AA,DD,GG          |        3 | 103  | 34.3333  |      78 |        7 |
-- +--------------------+----------+-------+----------+----------+----------+
在GROUP BY 后⾯ WITH ROLLUP 进⾏数据汇总,相当于把上⾯的值按⼀组情况进⾏统计
--按性别分组,查看组中成员,个数,年龄总和,平均年龄,最⼩年龄,最⼤年龄,并且进⾏全部数据的汇总
SELECT GROUP_CONCAT(name),COUNT(*),SUM(age),AVG(age),MAX(age),MIN(age) FROM test GROUP BY sex WITH ROLLUP;
--输出
-- +----------------------+----------+----------+----------+----------+----------+
-- | GROUP_CONCAT(name)  | COUNT(*) | SUM(age) | AVG(age) | MAX(age) | MIN(age) |
-- +----------------------+----------+----------+----------+----------+----------+
-- | CC,EE                |        2 | 85      | 42.5000  |      47 |      38 |
-- | AA,DD,GG            |        3 | 103      | 34.3333  |      78 |      id 7 |
-- | BB,FF                |        2 | 48      | 24.0000  |      26 |      22 |
-- | CC,EE,AA,DD,GG,BB,FF |        7 | 236      | 33.7143  |      78 |        7 |
-- +----------------------+----------+----------+----------+----------+----------+
GROUP BY 也是可以进⾏多个分组统计的(中间⽤逗号隔开)
-- 数据源
+----+------+-------+-----+-------+
| id | name | score | sex | class |
+----+------+-------+-----+-------+
|  1 | aaa  |    80 | ⼥  | ⼆班  |
|  2 | bbb  |    30 | 男  | ⼆班  |
|  3 | ccc  |    40 | ⼥  | ⼆班  |
|  4 | ddd  |    50 | 男  | ⼀班  |
|  5 | eee  |    80 | 男  | ⼀班  |
+----+------+-------+-----+-------+
SELECT `sex`, `class`, AVG(`score`) FROM `worker` GROUP BY `sex`, `class`;
-- 输出
-- +-----+-------+------------+
-- | sex | class | avg(score) |
-
- +-----+-------+------------+
-- | 男  | ⼀班  | 65.0000    |
-- | 男  | ⼆班  | 30.0000    |
-- | ⼥  | ⼆班  | 60.0000    |
-- +-----+-------+------------+
SELECT GROUP_CONCAT(`name`) AS "name",GROUP_CONCAT(`score`) AS "score",GROUP_CONCAT(`sex`) AS "sex",GROUP_CONCAT(`class`) AS "class",MAX(`score`),AVG(`score`) FROM `worker` GROUP BY `sex`,`class`; -- 输出
-- +---------+-------+-------+-----------+--------------+--------------+
-- | name    | score | sex  | class    | MAX(`score`) | AVG(`score`) |
-- +---------+-------+-------+-----------+--------------+--------------+
-- | ddd,eee | 50,80 | 男,男 | ⼀班,⼀班 |          80 | 65.0000      |
-- | bbb    | 30    | 男    | ⼆班      |          30 | 30.0000      |
-- | aaa,ccc | 80,40 | ⼥,⼥ | ⼆班,⼆班 |          80 | 60.0000      |
-- +---------+-------+-------+-----------+--------------+--------------+
7、ORDER BY 进⾏排序
ORDER BY 对数据进⾏排序语法:ORDER BY 字段名 ASC|DESC 默认是ASC 升序,DESC 降序,同时也可以按照多个字段排序(如果两个字段相等的情况下)两个排序有逗号
隔开,如果按照随机排序,那么⽤ORDER BY RAND() 即可
--按照年龄降序排序,如果有相同的情况下按照ID升序排序
SELECT * FROM test ORDER BY age DESC,id ASC;
-- 输出
-- +----+------+-----+-----+
-- | id | name | sex | age |
-- +----+------+-----+-----+
-- | 14 | GG  | 1  |  78 |
-- | 12 | EE  | 0  |  47 |
-- | 10 | CC  | 0  |  38 |
-- | 13 | FF  | 2  |  26 |
-- |  9 | BB  | 2  |  22 |
-- |  8 | AA  | 1  |  18 |
-- | 11 | DD  | 1  |  7 |
-- +----+------+-----+-----+
-- 按照年龄随机排序
SELECT * FROM test ORDER BY RAND();
-
- 输出
-- +----+------+-----+-----+
-- | id | name | sex | age |
-- +----+------+-----+-----+
-- |  8 | AA  | 1  |  18 |
-- | 14 | GG  | 1  |  78 |
-- | 10 | CC  | 0  |  38 |
-- | 11 | DD  | 1  |  7 |
truncate多张表加逗号吗
-- |  9 | BB  | 2  |  22 |
-- | 12 | EE  | 0  |  47 |
-- | 13 | FF  | 2  |  26 |
-
- +----+------+-----+-----+
8、LIMIT , OFFSET 限制结果集显⽰条数
LIMIT+⼀个值 => 显⽰结果集的前⼏条数据;
LIMIT+offset+row_count=> 从offset开始,显⽰row_count条数据
LIMIT +row_count OFFSET +offset => 意思同上(注意:offset要放在limit的后⾯,否则会报错)
--数据正常显⽰
-- +----+------+-----+-----+
-- | id | name | sex | age |
-- +----+------+-----+-----+
-- |  8 | AA  | 1  |  18 |
-- |  9 | BB  | 2  |  22 |
-
- | 10 | CC  | 0  |  38 |
-- | 11 | DD  | 1  |  7 |
-- | 12 | EE  | 0  |  47 |
-- | 13 | FF  | 2  |  26 |
-- | 14 | GG  | 1  |  78 |
-- +----+------+-----+-----+
--⽤LIMIT+数值
SELECT * FROM test ORDER BY id DESC LIMIT 3;
-- 输出
-- +----+------+-----+-----+
-- | id | name | sex | age |
-
- +----+------+-----+-----+
-- | 14 | GG  | 1  |  78 |
-- | 13 | FF  | 2  |  26 |
-- | 12 | EE  | 0  |  47 |
-- +----+------+-----+-----+
--⽤LIMIT+offset+row_count
SELECT * FROM test ORDER BY id LIMIT 3,2;
-- 输出
-- +----+------+-----+-----+
-- | id | name | sex | age |
-- +----+------+-----+-----+
-
- | 11 | DD  | 1  |  7 |
-- | 12 | EE  | 0  |  47 |
-- +----+------+-----+-----+
--利⽤LIMIT+row_count OFFSET+offset
SELECT * FROM test ORDER BY id ASC LIMIT 2 OFFSET 3;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。