操作数据表中的记录

insert:插入记录

INSERT [INTO] table_name [(column_name,...)] {VALUES/VALUE} ({expr/DEFAULT},...),(...),...;
/**

insert+表名+set +(字段=‘’,字段=‘’)

root@127.0.0.1 t2>CREATE TABLE user(
    -> id SMALLINT UNSIGNED PRIMARY KEY NOT NULL);
Query OK, 0 rows affected (0.21 sec)

root@127.0.0.1 t2>INSERT user VALUES(1);
Query OK, 1 row affected (0.26 sec)

root@127.0.0.1 t2>SELECT * FROM user;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

我们在插入数据的时候我们也可以插入表达式和函数值:

root@127.0.0.1 t2>INSERT user VALUES(3+5);
Query OK, 1 row affected (0.16 sec)

root@127.0.0.1 t2>SELECT * FROM user;
+----+
| id |
+----+
|  1 |
|  8 |
+----+
2 rows in set (0.00 sec)

我们在插入数据的时候如果我们遇到了auto_increment我们可以输入null来使它自动的输入增加一个值,我们也可以输入一个default来出现相同的功能,default除了这些功能之外,还有可以还原我们自爱create的时候输入的default值

root@127.0.0.1 t2>CREATE TABLE user3(
    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    -> age TINYINT UNSIGNED DEFAULT 10);
Query OK, 0 rows affected (0.19 sec)

root@127.0.0.1 t2>INSERT user3 VALUES(DEFAULT,1);
Query OK, 1 row affected (0.16 sec)

root@127.0.0.1 t2>SELECT * FROM user3;
+----+------+
| id | age  |
+----+------+
|  1 |    1 |
+----+------+
1 row in set (0.00 sec)

root@127.0.0.1 t2>INSERT user3 VALUES(NULL,DEFAULT);
Query OK, 1 row affected (0.13 sec)

root@127.0.0.1 t2>SELECT * FROM user3;
+----+------+
| id | age  |
+----+------+
|  1 |    1 |
|  2 |   10 |
+----+------+
2 rows in set (0.00 sec)

我们在给数据进行赋值的时候我们可以进行多重的赋值来展现我们提高我们的赋值效率。

root@127.0.0.1 t2>INSERT user3 VALUES(NULL,DEFAULT),(NULL,5);
Query OK, 2 rows affected (0.14 sec)
Records: 2  Duplicates: 0  Warnings: 0

root@127.0.0.1 t2>SELECT * FROM user3;
+----+------+
| id | age  |
+----+------+
|  1 |    1 |
|  2 |   10 |
|  3 |   10 |
|  4 |    5 |
+----+------+
4 rows in set (0.00 sec)

————————————————————————————————————————————————

插入记录INSSERT SET—SELECT:

插入记录insert insert-set insert-select
第一种:
insert tb_name [column_name]values(...)[,(...),(....)];--比较常用,可以一次性插入多条记录,并且可以输入表达式甚至是函数,但是无法进行子查询。
第二种:
insert tb_name set column_name={exprdefault};--可以进行子查询,但是只能插入一条记录。
第三种:
insert table_name [(colname...)] select语句.....--这种方法就是把查询到的一个表结果插入到另一个指定数据表中。

root@127.0.0.1 t2>INSERT user3 SET id = 5,age = 5;
Query OK, 1 row affected (0.40 sec)

root@127.0.0.1 t2>SELECT * FROM user3;
+----+------+
| id | age  |
+----+------+
|  1 |    1 |
|  2 |   10 |
|  3 |   10 |
|  4 |    5 |
|  5 |    5 |
+----+------+
5 rows in set (0.00 sec)

——————————————————————————————————————————————————————

单表更新UPDATE:

更新记录:
update+表名+set 字段变化;(更新全部)
update+表名+set 字段变化 where ....;(更新某个条件下的)

root@127.0.0.1 t2>SELECT * FROM user3;
+----+------+
| id | age  |
+----+------+
|  1 |    6 |
|  2 |   15 |
|  3 |   15 |
|  4 |   10 |
|  5 |   10 |
+----+------+
5 rows in set (0.00 sec)
root@127.0.0.1 t2>UPDATE user3 SET age = age + 5 WHERE id % 2 = 0;
Query OK, 2 rows affected (0.41 sec)
Rows matched: 2  Changed: 2  Warnings: 0

root@127.0.0.1 t2>SELECT * FROM user3;
+----+------+
| id | age  |
+----+------+
|  1 |    6 |
|  2 |   20 |
|  3 |   15 |
|  4 |   15 |
|  5 |   10 |
+----+------+
5 rows in set (0.00 sec)

——————————————————————————————————————————————————

单表删除记录DELETE

删除记录:
delete from +表名 where +条件

注意事项:当我们删除原来的id之后,再次添加新的id,那么新的id号码一定是现有的最大id号加1,而不管原来的id序列是否连续不连续!

root@127.0.0.1 t2>DELETE FROM user3 WHERE id = 5;
Query OK, 1 row affected (0.15 sec)

root@127.0.0.1 t2>SELECT * FROM user3;
+----+------+
| id | age  |
+----+------+
|  1 |    6 |
|  2 |   20 |
|  3 |   15 |
|  4 |   15 |
+----+------+
4 rows in set (0.00 sec)

————————————————————————————————————

查询表达方式解析:

查询表达式解析select
语法:
SELECT select_expr [,select expr2...] 只查找某一个函数或表达式
[
FROM table_references 查询表名
[WHERE where_conditon] 查询条件
[GROUP BY {col_nameposition} [ASCDESC],...] 按某个字段进行分组,相同的只显示第一个
[HAVING conditon] 分组时,给出显示条件
[ORDER BY {col_nameexprposition} [ASCDESC],...] 排序
[LIMIT {[offset,]row_countrow_count OFFSET offset}] 限制返回数量
}
ps:select * from user group by username having age>18 order by id asc limit 3; 限制返回数量的limit一定要放在最后
查询表达式:
               
                每个表达式表示想要的一列,必须至少有一个
                 多个列之间以英文逗号相隔.
                星号(*)表示所有的列。tbl_name.*可以表示命名表多的所有的列。
                查询表达式可以使用【AS】alias_name为其赋予别名。
                别名可用于GROUP BY, ORDRE BY或者HAVING子句。

我们可以进行单列的查找

root@127.0.0.1 t2>SELECT id FROM user3;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

我们在查找的时候我们的表达式的顺序会影响我们查找时显示的表达式的顺序。

root@127.0.0.1 t2>SELECT age,id FROM user3;
+------+----+
| age  | id |
+------+----+
|    6 |  1 |
|   20 |  2 |
|   15 |  3 |
|   15 |  4 |
+------+----+
4 rows in set (0.00 sec)

在我们将来使用多表链接的时候哦我们需要使用更严谨的写法:

root@127.0.0.1 t2>SELECT user3.age,user3.id FROM user3;
+------+----+
| age  | id |
+------+----+
|    6 |  1 |
|   20 |  2 |
|   15 |  3 |
|   15 |  4 |
+------+----+
4 rows in set (0.00 sec)

我们在使用数据表的时候我们可以给数据表的数据行进行别名的命名:

root@127.0.0.1 t2>SELECT id AS ID;
ERROR 1054 (42S22): Unknown column 'id' in 'field list'
root@127.0.0.1 t2>SELECT id AS ID from user3;
+----+
| ID |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)

我们在使用命名的时候我们可以不适用as但是这样会出现错误:

root@127.0.0.1 t2>SELECT ID age FROM user3;
+-----+
| age |
+-----+
|   1 |
|   2 |
|   3 |
|   4 |
+-----+
4 rows in set (0.00 sec)

在这里面我们就将这个age当成了id的别名了。

——————————————————————————————————————

where语句进条件的查询:

WHERE
条件表达式
对记录进行过滤,如果没指定WHERE字句,则显示所有记录
在WHERE表达式中,可以使用mysql支持的函数货运算符

——————————————————————————————————————————————

group by语句对查询的结果进行分组:

GROUP BY语句对查询结果分组
查询结果分组,(多个分组用“,”隔开);
[group by{col_name/posittion}[ASC/DESC]....]
ASC是默认的表示升序
EDSC是默认的表示降序。
root@127.0.0.1 t2>SELECT age FROM user3 GROUP BY age;
+------+
| age  |
+------+
|    6 |
|   15 |
|   20 |
+------+
3 rows in set (0.11 sec)
//我们在这里我们对age进行分组

——————————————————————————————————

having语句设置分组条件:

分组条件:利用GROUP BY分组,添加分组条件 [HAVING where_condition] (要么为一个聚合函数【SUM();MAX();etc...】,要么出现在 SELECT 条件中,聚合函数永远只有一个返回结果)
[HAVING when where_condition]
root@127.0.0.1 t2>SELECT age,id FROM user3 GROUP BY 1 HAVING age > 6;
+------+----+
| age  | id |
+------+----+
|   15 |  3 |
|   20 |  2 |
+------+----+
2 rows in set (0.00 sec)
————————————————————————————
root@127.0.0.1 t2>SELECT age,id FROM user3 GROUP BY 1 HAVING count(id)>= 2;
+------+----+
| age  | id |
+------+----+
|   15 |  3 |
+------+----+
1 row in set (0.11 sec)

————————————————————————————————————

order by对分组结果进行排序:

order by语句对查询结果排序

1、对查询结果进行排序:[ORDER BY {col_name expr position } [ASCDESC],...]
root@127.0.0.1 t2>SELECT * FROM user3 ORDER BY id DESC;
+----+------+
| id | age  |
+----+------+
|  4 |   15 |
|  3 |   15 |
|  2 |   20 |
|  1 |    6 |
+----+------+
4 rows in set (0.00 sec)
2、可以同时按多条字段进行排序,规则是先按前面的字段排,在基础上再按后面字段排。
3、如:SELECT * FROM users ORDER BY age,id DESC; 先按照age排序,如果age有重复的,重复的字段里按id排序。

——————————————————————————————————————————————————————

limit语句限制查询的数量:

限制查询结果返回的数量
select *from +表名 + limit N;返回查询结果前 N 条记录;
select *from +表名 + limit N,M;返回查询结果:从n开始的m条记录(注意n 从0开始数数)

root@127.0.0.1 t2>SELECT * FROM user3 LIMIT 2;
+----+------+
| id | age  |
+----+------+
|  1 |    6 |
|  2 |   20 |
+----+------+
2 rows in set (0.00 sec)
root@127.0.0.1 t2>SELECT * FROM user3 LIMIT 1,2;
+----+------+
| id | age  |
+----+------+
|  2 |   20 |
|  3 |   15 |
+----+------+
2 rows in set (0.00 sec)
//mysql中的排序是从0开始的
root@127.0.0.1 t2>SELECT * FROM user3 LIMIT 1,2;
+----+------+
| id | age  |
+----+------+
|  2 |   20 |
|  3 |   15 |
+----+------+
2 rows in set (0.00 sec)

insert和select的结合

root@127.0.0.1 t2>CREATE TABLE test(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> age TINYINT UNSIGNED);
Query OK, 0 rows affected (0.09 sec)
root@127.0.0.1 t2>INSERT test(age) SELECT age FROM user3;
Query OK, 4 rows affected (0.13 sec)
Records: 4  Duplicates: 0  Warnings: 0
root@127.0.0.1 t2>SELECT * FROM test;
+----+------+
| id | age  |
+----+------+
|  1 |    6 |
|  2 |   20 |
|  3 |   15 |
|  4 |   15 |
+----+------+
4 rows in set (0.00 sec)
原文地址:https://www.cnblogs.com/chang1203/p/5892602.html