目录一、Create1.1 单行数据 全列插入1.2多行数据 指定列插入1.3插入否则更新1.4 替换二、Retrieve2.1 SELECT 列2.1.1全列查询2.1.2 指定列查询。2.1.3 查询字段为表达式2.1.4 为查询结果指定别名​编辑2.1.5 结果去重​编辑2.2 WHERE 条件2.3 结果排序一、CreateCRUD : Create(创建), Retrieve(读取)Update(更新)Delete删除INSERT[INTO]table_name[(column[,column] ...)]VALUES(value_list) [, (value_list)] ...value_list:value, [,value] ...1.1单行数据全列插入单行插入。指定插入。全列插入。多行插入加上就行。1.2多行数据指定列插入--插入两条记录value_list数量必须和指定列数量及顺序一致1.3插入否则更新由于主键或者唯一键对应的值已经存在而导致插入失败--主键冲突INSERT INTOstudents (id , sn , name)VALUES(100,10010,唐大师);ERROR1062(23000): Duplicate entry100 for keyPRIMARY --唯一键冲突INSERT INTOstudents (sn , name)VALUES(20001,曹阿瞒);ERROR1062(23000): Duplicate entry20001 for keysn 我没招了一个update拼错了一直没看到)。可以选择性的进行同步更新操作 语法INSERT ONDUPLICATEKEY UPDATEcolumnvalue[,columnvalue];INSERT INTO students (id , sn , name) VALUES (100 , 10010 , 唐大师 ) ON DUPLICATE KEY UPDATE sn 10010 , name 唐大师 ; Query OK , 2 rows affected (0 .47 sec) -- 0 row affected: 表中有冲突数据但冲突数据的值和 update 的值相等 -- 1 row affected: 表中没有冲突数据数据被插入 -- 2 row affected: 表中有冲突数据并且数据已经被更新 -- 通过 MySQL 函数获取受到影响的数据行数 SELECT ROW_COUNT(); ------------- | ROW_COUNT() | ------------- | 2 | ------------- 1 row in set (0 .00 sec) -- ON DUPLICATE KEY 当发生重复key的时候1.4 替换--主键 或者 唯一键 没有冲突则直接插入--主键 或者 唯一键 如果冲突则删除后再插入REPLACEINTOstudents (sn, name)VALUES(20001,曹阿瞒);Query OK,2rows affected (0.00sec)-- 1 row affected:表中没有冲突数据数据被插入-- 2 row affected:表中有冲突数据删除后重新插入更新了二、RetrieveSELECT[DISTINCT] {* | {column [, column] ...}[FROM table_name][WHERE ...][ORDER BY column [ASC | DESC], ...]LIMIT ...2.1SELECT列2.1.1全列查询2.1.2 指定列查询。2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重2.2 WHERE条件比较运算符运算符说明, , , 大于大于等于小于小于等于等于NULL不安全例如NULL NULL的结果是NULL等于NULL安全例如NULL NULL的结果是TRUE(1)!, 不等于BETWEEN a0 AND a1范围匹配[a0, a1]如果a0 value a1返回TRUE(1)IN (option, ...)如果是option中的任意一个返回TRUE(1)IS NULL是NULLIS NOT NULL不是NULLLIKE模糊匹配。%表示任意多个包括0个任意字符_表示任意一个字符找出所有小于6分的人。找出指定范围的人。这样也行。指定查找。使用in来查找。like用法%与下划线区别。条件筛选。无法直接使用total来判断。执行这条语句的顺序是这样的。只能这样。不姓孙且语文大于5。或者这样复杂查找。null和‘’空串的区别。逻辑运算符运算符说明AND多个条件必须都为TRUE(1)结果才是TRUE(1)OR任意一个条件为TRUE(1),结果为TRUE(1)NOT条件为TRUE(1)结果为FALSE(0)2.3 结果排序-- ASC为升序从小到大-- DESC为降序从大到小--默认为ASCSELECT FROM table_name [WHERE ]ORDER BY column [ASC|DESC], [ ];注意没有ORDER BY子句的查询返回的顺序是未定义的永远不要依赖这个顺序默认升序。默认升序。有个问题为什么这里又可以使用别名了此乃执行顺序。从这里也可以感觉到order by要比where晚。limit用法。--起始下标为0--从s开始筛选n条结果SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n--从0开始筛选n条结果SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;;--从s开始筛选n条结果比第二种用法更明确建议使用SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;建议对未知表进行查询时最好加一条LIMIT 1避免因为表中数据过大查询全表数据导致数据库卡死。按id进行分页每页3条记录分别显示 第1、2、3页offset用法。分页。