表的增删查改:CURD
Create(创建) Retrieve(读取) Update(更新) Delete(删除)
目录
一、插入(Create)
语法:
1)单行插入
下面以这个表为例进行插入:
如果不指定列,就默认全列插入:
2)多行-全列插入
逗号分隔多行:
3)多行-指定列插入
4)插入否则更新
如果主键或唯一键对应的值已经存在,更新该主键对应的值。
5)插入否则替换
二、查询(Retrieve)
下面的讲解都根据这个表来讲述:
1)全列查询
* 其实通配符,一般不建议用 * 进行全列查询,一方面因为查询的列越多,意味着需要传输的数据量越大,另一方面可能会影响到索引的使用。
2)指定列查询
3)select 表达式 (重命名)
select 后面跟的其实是表达式,它会将表达式对应的结果展示出来:
可以给表达式进行重命名(as可加可不加):
注意:重命名的操作是在筛选之后的,在筛选时,它不认识total
4)去重
distinct
5)where子句
注意:
(1)NULL和0是不一样的
(2)判断两个值是否相等要用一个等号‘=’,不能两个等号
(3)用NULL来判断和其他值(包括NULL)比较时,这个表达式的值是NULL,没有真假概念。
只能用 NULL<=>NULL,或IS NULL / IS NOT NULL
6)AND OR NOT 及 between and、in
(1)AND
语文成绩在【80,90】的同学的名字和分数:
也可以用between 80 and 90(between ……and……仅限双闭区间使用)
(2)OR
筛选数学成绩为58 59 98 99分的:
也可以用in(option1,option2……)
(3)NOT
7)模糊匹配(like)
%表示任意多个字符,_表示任意一个字符
8)结果排序
order by
ASC(ascending order):升序
DSC (descending order):降序
NULL值比任何值都要小,order默认升序排序,但不要依赖mysql的默认行为
按数学成绩降序排序,如果数学成绩相同,则相同的行按英语成绩降序排序:
9)筛选分页
limit n 从0行开始,筛选n条结果:
limit k,m:从k开始(k从0开始),筛选m条结果
limit m offset k:从k开始(k从0开始),筛选m条结果
可以很好地实现分页功能:
三、更新(Update)
Update table_name set column = expr [ , column = expr ...] [WHERE ...] [ORDER BY ... ] [LIMIT ...]
eg:将孙悟空的成绩更新为80分:
eg:将语文成绩更新成原来的两倍。
实际开发时用update很危险,一定要小心!
四、删除(Delete)
DELETE FROM table_name [WHERE ...] [ORDER BY...] [ LIMIT ...]
eg:删掉总分倒数第一名
如果delete from后面直接跟表名,没有筛选,那么就会将表里的内容全删,表结构还存在。
但是,用这种方式清空表内容后,自增计数器并没有清0!!!
截断表:会重置AUTO_INCREAMENT项。
但它不走事务,不会把操作痕迹记录到日志里,会更快,但慎用!!
eg:删除表中重复记录
操作:创建一个空表,select将不重复的数据插入到新表。再将新表重命名。
1)like创建一个跟原表一样的空表
2)insert 插入select去重的结果
3)重命名rename ……to……