MySql,笔记(记录操作)

Posted janesyf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql,笔记(记录操作)相关的知识,希望对你有一定的参考价值。

记录操作:INSERT/UPDATE/DELETE/SELECT
1.插入记录(共有三种)
第一种: 表达式

1.INSERT [INTO] tbl_name [(col_name,...)] {VALUES|VALUE}({expr|DEFAULT},...),(...),...
mysql> CREATE TABLE users(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(20) NOT NULL,
-> password VARCHAR(32) NOT NULL,
-> age TINYINT UNSIGNED NOT NULL DEFAULT 10,
-> sex BOOLEAN
-> );
Query OK, 0 rows affected (0.16 sec)

mysql> INSERT INTO users VALUES(NULL,‘Tom‘,‘123‘,25,1);
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 25 | 1 |
+----+----------+----------+-----+------+
1 row in set (0.00 sec)

mysql> INSERT INTO users VALUES(NULL,‘JULY‘,‘123‘,25,1);
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 25 | 1 |
| 2 | JULY | 123 | 25 | 1 |
+----+----------+----------+-----+------+
2 rows in set (0.00 sec)

mysql> INSERT INTO users VALUES(DEFAULT,‘Tom‘,‘123‘,25,1);
Query OK, 1 row affected (0.05 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 25 | 1 |
| 2 | JULY | 123 | 25 | 1 |
| 3 | Tom | 123 | 25 | 1 |
+----+----------+----------+-----+------+
3 rows in set (0.00 sec)

mysql> INSERT INTO users VALUES(NULL,‘JULY‘,‘123‘,2*9*6-9,1);
Query OK, 1 row affected (0.08 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 25 | 1 |
| 2 | JULY | 123 | 25 | 1 |
| 3 | Tom | 123 | 25 | 1 |
| 4 | JULY | 123 | 99 | 1 |
+----+----------+----------+-----+------+
4 rows in set (0.00 sec)

mysql> INSERT INTO users VALUES(DEFAULT,‘Tom‘,‘123‘,DEFAULT,1);
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 25 | 1 |
| 2 | JULY | 123 | 25 | 1 |
| 3 | Tom | 123 | 25 | 1 |
| 4 | JULY | 123 | 99 | 1 |
| 5 | Tom | 123 | 10 | 1 |
+----+----------+----------+-----+------+
5 rows in set (0.00 sec)

mysql> INSERT INTO users VALUES(NULL,‘JULY‘,‘123‘,2*9*6-9,1),(DEFAULT,‘King‘,‘123‘,DEFAULT,0);
Query OK, 2 rows affected (0.05 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 25 | 1 |
| 2 | JULY | 123 | 25 | 1 |
| 3 | Tom | 123 | 25 | 1 |
| 4 | JULY | 123 | 99 | 1 |
| 5 | Tom | 123 | 10 | 1 |
| 6 | JULY | 123 | 99 | 1 |
| 7 | King | 123 | 10 | 0 |
+----+----------+----------+-----+------+
7 rows in set (0.00 sec)
md5是php的一个函数,用来计算字符串的hash值
mysql> INSERT INTO users VALUES(DEFAULT,‘Tom‘,md5(‘123‘),DEFAULT,1);
Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password | age | sex |
+----+----------+----------------------------------+-----+------+
| 1 | Tom | 123 | 25 | 1 |
| 2 | JULY | 123 | 25 | 1 |
| 3 | Tom | 123 | 25 | 1 |
| 4 | JULY | 123 | 99 | 1 |
| 5 | Tom | 123 | 10 | 1 |
| 6 | JULY | 123 | 99 | 1 |
| 7 | King | 123 | 10 | 0 |
| 8 | Tom | 202cb962ac59075b964b07152d234b70 | 10 | 1 |
+----+----------+----------------------------------+-----+------+
8 rows in set (0.00 sec)

第二种:(如果看不懂这,先往下看,看完再回来看就懂了)

说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery)。并且一次只能插入一条数据。
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...

mysql> CREATE TABLE test(
-> id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(20)
-> );
Query OK, 0 rows affected (0.18 sec)

mysql> SELECT * FROM test;
Empty set (0.00 sec)

mysql> INSERT test SELECT username FROM users WHERE age>=30;
ERROR 1136 (21S01): Column count doesn‘t match value count at row 1
mysql> INSERT test(username) SELECT username FROM users WHERE age>=30;
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM test;
+----+----------+
| id | username |
+----+----------+
| 1 | JULY |
| 2 | JULY |
+----+----------+
2 rows in set (0.00 sec)

第三种:
说明:此方法可以将查询结果插入到指定数据表。
INSERT [INTO] tbl_name [(col_name,...)] SELECT ...

2.更新记录(有两种方式)
第一种:单表更新

UPDATE [LOW_PRIORITY][IGNORE] table_reference 
SET col_name={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...
[WHERE where_condition]
mysql> UPDATE users SET age=age+5;
Query OK, 9 rows affected (0.09 sec)
Rows matched: 9 Changed: 9 Warnings: 0

mysql> UPDATE users SET age=age+10,sex=0 WHERE id%2=0;
Query OK, 4 rows affected (0.06 sec)
Rows matched: 4 Changed: 4 Warnings: 0

第二种:多表更新

3.删除记录(有两种方式)
第一种:单表删除

DELETE FROM tbl_name [WHERE where_condition]

DELETE FROM users WHERE id =6;

第二种:多表删除

4.查找记录

SELECT select_expr[,select_expr...]
[
FROM table_reference
[WHERE where_condition]
[GROUP BY {col_name|position}{ASC|DESC}]
[HAVING where_condition]
[ORDER BY {col_name|expr|position}[ASC|DESC}]]
[LIMIT {[offset,]row_count|row_count OFFSET offset}]
]
SELECT 3+5;
+-----+
| 3+5 |
+-----+
| 8 |
+-----+

 

查询表达式
每一个表达式表示想要的一列,必须有至少一个。
多个列之间以英文逗号分隔。
星号(*)表示所有列。tbl_name.* 可以表示命名表的所有列。
查询表达式可以使用[AS] alias_name 为其赋予别名。
别名可用于GROUP BY ,ORDER BY 或 HAVING 子句。
查询所有

mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password | age | sex |
+----+----------+----------------------------------+-----+------+
| 1 | Tom | 123 | 29 | 0 |
| 2 | JULY | 123 | 38 | 0 |
| 3 | Tom | 123 | 27 | 0 |
| 4 | JULY | 123 | 110 | 0 |
| 5 | Tom | 123 | 10 | 0 |
| 7 | King | 123 | 8 | 0 |
| 8 | Tom | 202cb962ac59075b964b07152d234b70 | 17 | 0 |
| 9 | Lucy | 123 | 6 | 0 |
| 10 | qqqqq | 123 | 10 | NULL |
+----+----------+----------------------------------+-----+------+

按查询次序排序

mysql> SELECT username,id from users;
+----------+----+
| username | id |
+----------+----+
| Tom | 1 |
| JULY | 2 |
| Tom | 3 |
| JULY | 4 |
| Tom | 5 |
| King | 7 |
| Tom | 8 |
| Lucy | 9 |
| qqqqq | 10 |
+----------+----+

查询指定表的字段

mysql> SELECT users.id,users.username FROM users;
+----+----------+
| id | username |
+----+----------+
| 1 | Tom |
| 2 | JULY |
| 3 | Tom |
| 4 | JULY |
| 5 | Tom |
| 7 | King |
| 8 | Tom |
| 9 | Lucy |
| 10 | qqqqq |
+----+----------+

‘AS‘的使用

mysql> SELECT id username FROM users;不标准
+----------+
| username |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+
9 rows in set (0.00 sec)
mysql> SELECT id AS username FROM users;标准
+----------+
| username |
+----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 7 |
| 8 |
| 9 |
| 10 |
+----------+

4.1.条件表达式

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

4.2.查询结果分组
[GROUP BY {col_name|position} [ASC|DESC],...]
根据sex字段分组

mysql> SELECT sex FROM users GROUP BY sex;
+------+
| sex |
+------+
| NULL |
| 0 |
+------+
2 rows in set (0.00 sec)

根据查询的第一个字段分组

mysql> SELECT sex FROM users GROUP BY 1;
+------+
| sex |
+------+
| NULL |
| 0 |
+------+
2 rows in set (0.00 sec)

根据查询的第二个字段分组

mysql> SELECT sex,username FROM users GROUP BY 2;
+------+----------+
| sex | username |
+------+----------+
| 0 | JULY |
| 0 | King |
| 0 | Lucy |
| NULL | qqqqq |
| 0 | Tom |
+------+----------+
5 rows in set (0.00 sec)

4.3分组条件

[HAVING where_condition]
hava后用到的字段要么是聚合函数,要么是出现在前面的字段否则报错。
mysql> SELECT sex FROM users GROUP BY 1 HAVING age >5;
ERROR 1054 (42S22): Unknown column ‘age‘ in ‘having clause‘
mysql> SELECT sex,age FROM users GROUP BY 1,2 HAVING age >5;
+------+-----+
| sex | age |
+------+-----+
| NULL | 10 |
| 0 | 6 |
| 0 | 8 |
| 0 | 10 |
| 0 | 17 |
| 0 | 27 |
| 0 | 29 |
| 0 | 38 |
| 0 | 110 |
+------+-----+
9 rows in set (0.00 sec)

mysql> SELECT sex,age FROM users GROUP BY 1 HAVING age >5;
+------+-----+
| sex | age |
+------+-----+
| NULL | 10 |
| 0 | 29 |
+------+-----+
2 rows in set (0.00 sec)

mysql> SELECT sex,age FROM users GROUP BY 1 HAVING count(id) >2;
+------+-----+
| sex | age |
+------+-----+
| 0 | 29 |#四舍五入后的平均值
+------+-----+

4.4对查询结果进行排序
[ORDER BY {col_name|expr|position}[ASC|DESC],...]
默认按插入顺序

mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password | age | sex |
+----+----------+----------------------------------+-----+------+
| 1 | Tom | 123 | 29 | 0 |
| 2 | JULY | 123 | 38 | 0 |
| 3 | Tom | 123 | 27 | 0 |
| 4 | JULY | 123 | 110 | 0 |
| 5 | Tom | 123 | 10 | 0 |
| 7 | King | 123 | 8 | 0 |
| 8 | Tom | 202cb962ac59075b964b07152d234b70 | 17 | 0 |
| 9 | Lucy | 123 | 6 | 0 |
| 10 | qqqqq | 123 | 10 | NULL |
+----+----------+----------------------------------+-----+------+
9 rows in set (0.00 sec)

ORDER BY 默认是升序

mysql> SELECT * FROM users ORDER BY age;
+----+----------+----------------------------------+-----+------+
| id | username | password | age | sex |
+----+----------+----------------------------------+-----+------+
| 9 | Lucy | 123 | 6 | 0 |
| 7 | King | 123 | 8 | 0 |
| 5 | Tom | 123 | 10 | 0 |
| 10 | qqqqq | 123 | 10 | NULL |
| 8 | Tom | 202cb962ac59075b964b07152d234b70 | 17 | 0 |
| 3 | Tom | 123 | 27 | 0 |
| 1 | Tom | 123 | 29 | 0 |
| 2 | JULY | 123 | 38 | 0 |
| 4 | JULY | 123 | 110 | 0 |
+----+----------+----------------------------------+-----+------+
9 rows in set (0.00 sec)

降序

mysql> SELECT * FROM users ORDER BY age DESC;
+----+----------+----------------------------------+-----+------+
| id | username | password | age | sex |
+----+----------+----------------------------------+-----+------+
| 4 | JULY | 123 | 110 | 0 |
| 2 | JULY | 123 | 38 | 0 |
| 1 | Tom | 123 | 29 | 0 |
| 3 | Tom | 123 | 27 | 0 |
| 8 | Tom | 202cb962ac59075b964b07152d234b70 | 17 | 0 |
| 5 | Tom | 123 | 10 | 0 |
| 10 | qqqqq | 123 | 10 | NULL |
| 7 | King | 123 | 8 | 0 |
| 9 | Lucy | 123 | 6 | 0 |
+----+----------+----------------------------------+-----+------+
9 rows in set (0.00 sec)

4.5限制查询结果返回的数量

[LIMIT {[offset,] row_count | row_count OFFSET offset}]
mysql> SELECT * FROM users;
+----+----------+----------------------------------+-----+------+
| id | username | password | age | sex |
+----+----------+----------------------------------+-----+------+
| 1 | Tom | 123 | 29 | 0 |
| 2 | JULY | 123 | 38 | 0 |
| 3 | Tom | 123 | 27 | 0 |
| 4 | JULY | 123 | 110 | 0 |
| 5 | Tom | 123 | 10 | 0 |
| 7 | King | 123 | 8 | 0 |
| 8 | Tom | 202cb962ac59075b964b07152d234b70 | 17 | 0 |
| 9 | Lucy | 123 | 6 | 0 |
| 10 | qqqqq | 123 | 10 | NULL |
+----+----------+----------------------------------+-----+------+
9 rows in set (0.00 sec)

查询两条

mysql> SELECT * FROM users LIMIT 2;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 29 | 0 |
| 2 | JULY | 123 | 38 | 0 |
+----+----------+----------+-----+------+
2 rows in set (0.00 sec)

查询从下标3开始,查两条。(MYSQL下标从0开始)

mysql> SELECT * FROM users LIMIT 3,2;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 4 | JULY | 123 | 110 | 0 |
| 5 | Tom | 123 | 10 | 0 |
+----+----------+----------+-----+------+
2 rows in set (0.00 sec)

查询从下标2开始,查两条。(MYSQL下标从0开始)

mysql> SELECT * FROM users LIMIT 2,2;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 3 | Tom | 123 | 27 | 0 |
| 4 | JULY | 123 | 110 | 0 |
+----+----------+----------+-----+------+
2 rows in set (0.00 sec)

查询降序后从下标2开始,查两条。

mysql> SELECT * FROM users ORDER BY age DESC;
+----+----------+----------------------------------+-----+------+
| id | username | password | age | sex |
+----+----------+----------------------------------+-----+------+
| 4 | JULY | 123 | 110 | 0 |
| 2 | JULY | 123 | 38 | 0 |
| 1 | Tom | 123 | 29 | 0 |
| 3 | Tom | 123 | 27 | 0 |
| 8 | Tom | 202cb962ac59075b964b07152d234b70 | 17 | 0 |
| 5 | Tom | 123 | 10 | 0 |
| 10 | qqqqq | 123 | 10 | NULL |
| 7 | King | 123 | 8 | 0 |
| 9 | Lucy | 123 | 6 | 0 |
+----+----------+----------------------------------+-----+------+
mysql> SELECT * FROM users ORDER BY age DESC LIMIT 2,2;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 29 | 0 |
| 3 | Tom | 123 | 27 | 0 |
+----+----------+----------+-----+------+

  

 


















以上是关于MySql,笔记(记录操作)的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

MySQL学习笔记-数据类型与操作数据表

提效小技巧——记录那些不常用的代码片段

遇见狂神说--记录MySql部分笔记

MySQL触发器

MySQL笔记心得(持续更新)