MySQL基础
MySQL服务和MySQL数据库不同,MySQL服务是一系列后台进程,而MySQL数据库则是一系列的数据目录和数据文件;MySQL数据库必须在MySQL服务启动之后才可以访问。
DDL:数据定义语言。其定义了不同的数据段、数据库、表、列、索引等数据库对象。常用关键字有:create、drop、alter等。
DML:数据库操纵语言,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用关键字主要包括insert、delete、update和select等。
DCL:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要关键字包括grant、revoke等。
DDL
DDL:是对数据库内部的对象进行创建、删除、修改的操作语言。它和DML语句最大的区别是DML只是对表内部数据的操作,而不涉及标的定义、结构的修改,更不涉及其他对象。DDL语句更多的被数据库管理员使用。
create database test1;
eg: create table emp(ename varchar(a10), hirdate date,depton int(2)); //列名、类型
drop database test1;
ALTER TABLE 【表名字】 DROP 【列名称】
ALTER TABLE 【表名字】 ADD 【列名称】 INT NOT NULL COMMENT '注释说明'
DML
DML:是指对数据库中表记录的操作,主要包括插入、更新、删除、和查询。
Insert into temp(ename, hiredate, deptno) values(‘zzx1’, ‘2000-01-01’, 1); //顺序一致
也可以不用指定字段名称,但顺序要和字段顺序一致。
Insert into temp values(‘zzx1’, ‘2000-01-01’, 1);
可空字段、非空但有默认值、自增字段,可以不用再insert后的字段列表里出现,values后面致谢对应名称的value,没写的会自动补上nul、默认值、自增的下一个值。
update emp set sal=4000 where ename=’lisa’;
update emp a, dept b set a.sal= a.sal* b.deptno, b.deptname= a.name where a.deptno=b.deptno;(同时更新两个表)
delete from emp where ename=’dony’;
delete t, t2… tn from t, t2… tn where ename=’dony’;(一次删除多个表)
(不管单表还是多表,不加where条件都将会把表的所有记录删除)
select * from emp;
(1)、查询不重复的记录
将表中的记录去掉重复后显示出来,可以用distinct关键字来实现。
select distinct deptno from emp;
(2)、条件查询
用where来控制条件
select * from emp where deptno=1;
(=、<、>、<=、>=、!=, or、and)
(3)、排序和限制
排序用order by +(desc|asc);
desc 和asc是排序顺序的关键词,desc:降序,asc:升序。不写默认升序
eg: select * from emp order by sal;
select * from emp order by depton, sal desc;
对于排序记录,如果希望只显示一部分而不是全部,可以使用LIMIT关键字来实现。
语法为select … [limit offset_start,row_count]
(offset_start:起始偏移量,默认为0,,row_count:显示的行数)
eg: select * from emp order by sal limit=3;
limit经常和order by 一起配合使用来进行记录的分页显示。
(4)、聚合
group by 关键字表示要进行分类聚合的字段。
聚合函数:sum、count、max、min
with rollup是可选语法,表名是否对分类聚合后的结果进行再汇总。
having关键字表示对分类后的结果再进行条件的过滤。
eg:select deptno,count(1) from emp group by deptno with rollup;
select deptno,count(1) from emp group by deptno having count(1)>1;
(5)、表连接
当需要同时显示多个表的中的字段时,可以用表连接来实现。
内连接:仅选出两张表中互相匹配的记录。
外连接:会选出其他不匹配的记录。
内连接eg:
select ename, deptname from emp, dept where emp.deptno=dept.deptno;
外连接分为左连接和又连接,具体定义如下:
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
== select ename,deptname from dept right join emp on dept.deptno=emp.deptno;
(这种内连接和外连接的区别在于外连接多出了不配的情况进入记录中)
(6)、需要的条件是另一个select语句的结果,此时用到子查询,关键字有in、not in、=、!=、exists、not exists等。
select * from emp where deptno in(select deptno from dept);
== select emp.* from emp, dept where emp.deptno=dept.deptno;
(7)、记录联合。
结果合并显示,需要用到union和union all关键字来实现
union all:是把结果集直接合并在一起
union:将union all后的结果进行一次distinct,去除重复记录后的结果。
DML
DCL:主要是DBA用来管理系统中的对象权限时使用。