MySQL读书笔记(3)
因为这几天有其他事情,一直没继续学习,真是罪过.
今天主要复习了下DML语句。
DML操作是针对数据库中表记录的操作,主要包括记录的插入(insert)、更新(update)、删除(delete)和查询(select)。
1.插入记录(insert)
- insert into tablename (filed1,…,fieldn) values (value1,…,valuen)
e.g: insert into emp (ename,hiredate,sal,deptno) values (‘hialex’,'2000-01-01′,’2000′,1); - 也可以不指定字段,但是values后面的顺序应该和字段的排列顺序一致。
e.g: insert into emp values (‘lisa’,'2003-02-01′,’3000′,2); - 在列表中没有写的字段,是可空字段的设置为NULL,非空有默认值的设置为默认值,自增字段设置为自增的下一个数字
- 在MySQL中可以一次插入多条记录:
e.g: insert into dept values(5,’dept5′),(6,’dept6′);
2.更新字段(update)
- update tablename set field1=value1,…,fieldn=valuen [where condition];
e.g: update emp set sal=4000 where ename=’lisa’; - 在MySQL中,update命令可同时更新多个表中数据
e.g: update t1,t2,…,tn set t1.field1=exper1,…,tn.fieldn=expern [where condition]; - 注:多表更新的语法更多的用在根据一个表的字段来动态更新另一个表的字段
3.删除字段(delete)
- delete from tablename [where condition]
e.g: delete from emp where ename=’dony’; - 在MySQL中可以一次删除多个表的数据
delete t1,t2,…,tn from t1,t2,…,tn; - 如果from后面的表名用别名,则delete后面也要用相应的别名
- 注:不论是单表还是多表,不加where条件就会把表的所有记录删除
4.查询记录(select)
- 查询全部记录
select * from tablename; - 查询不重复记录
e.g: select distinct deptno from emp; - 条件查询
e.g: select * from emp where deptno=1; - 排序和限制
- select * from tablename [where condition] [order by field1 | [DESC|ASC],…,fieldn| [DESC|ASC]];
- 不写[DESC|ASC]则默认是升序排列。
- 对于排序后的结果,若只希望显示一部分,则可以使用limit关键字实现:
- select … [limit offset_start,row_count]
- 其中offset_start表示记录起始偏移地址(默认为0),row_count表示显示的行数
- e.g: 显示emp表中按照sal排序后的前三条记录
select * from emp order by sal limit 3
- 注:limit属于MySQL扩展SQL92后的语法,在其他数据库不能通用
5.聚合
- select [field1,...,fieldn] funname
from tablename
[where where_condititon]
[group by field1,...,fieldn
[with rollup]]
[having where_condition] - 注:
- funname表示要做的聚合操作,也就是聚合函数,常见的有sum、count、max、min等
- with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总
- having是对聚合后的结果再进行条件的过滤
- where是在聚合前就对记录进行过滤
6.表连接
- 表连接分类内连接和外连接,他们之间的主要分别是内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录,常用内连接。
- 外连接分为左连接和右连接
- 左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
select ename,deptname from emp left join dept on emp.deptno=dept.deptno; - 右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
select ename,deptname from dept right join emp on emp.deptno=dept.deptno;
- 左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
7.子查询
- 用于子查询的关键字主要包括in、not in、=、!=、exists、not exists等
- 在某些情况下,子查询可以转化为表连接
- 注:MySQL4.1之前的版本不支持子查询,需要用表连接来实现子查询功能。表连接在很多情况下用于优化子查询。
8.记录联合
- select * from t1
union | union all
select * from t2
……
union | union all
select * from tn; - union和union all的主要区别:
- union all是把结果集直接合并在一起
- union是将union all后的结果进行一直distinct,去除重复记录后的结果。
因为DCL的关键字不多,所有就简略的看了下:
- 创建一个用户z1,密码为123具有对test数据库中左右的表有SELECT/INSERT权限:
e.g: grant select,insert on test.* to ‘z1′@’localhost’ identified by ‘123′; - 将z1权限变更,收回INSERT权限
e.g: :revoke insert on test.* from ‘z1′@’localhost’;


最新评论