第一章 SQL简介及安装
1.1 简介
数据库(Data Base,简称DB):长期保存在计算机的存储设备上,数据按照一定的规则组织起来,可以被各种用户、应用共享的数据集合。
数据库管理系统(Database Management System, 简称DBMS):指的是一种用来管理和操作数据的大型软件,用于建立、使用、维护数据,对数据库进行统一的管理和控制,以保证数据的完整性和安全性。用户可以通过数据库管理系统访问数据库中的数据。
数据库:存储、维护和管理数据的集合。
数据库管理系统:数据库软件,数据库是通过这些软件进行创建和操作的。
1.2 常见的数据库管理系统
-
Oracle:被认为是目前业界比较成功的关系型数据库的管理系统。Oracle可以运行在Windows、UNIX等主流的操作系统平台,完全支持所有的工业标准,并获得了最高级别的ISO标准安全性认证。
-
MySQL:是一种关系型数据库管理系统。由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL是目前最流行的关系型数据库管理系统(RDBMS:Relational DBMS)之一。
-
SQLServer:是由微软推出的关系型数据库管理系统。
-
DB2:是IBM的
1.3 关系型数据库、非关系型数据库
-
非关系型数据库:
-
采用了没有特定关系模型来组织数据。
-
NOSQL基于键值对
-
-
关系型数据库:
-
依据所有存储数据的模型之间的关系建立的数据库。
-
所谓关系模型,指的是“一对一、一对多、多对多”
-
1.4 SQL简介
SQL: Structure Query Language(结构化查询语言),SQL最早是被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准。后来被国际化标准组织(ISO)采纳为关系型数据库语言的国际标准。
各种数据库厂商都支持ISO标准的SQL,类似于普通话。
各个数据库厂商在标准的基础上,定义了若干自己的扩展,类似于方言。
SQL是一种标准化的语言,允许你在数据库上进行操作,如:创建项目、查询内容、更新内容和删除内容等操作。
这些操作:Create、Read、Update、Delete,通常被称为 CRUD操作
1.5 SQL分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象(数据库、表、列) - DML(Data Manipulation Language):数据操作语言,用于定义数据库记录(数据) - DCL(Data Control Language):数据控制语言,用于定义访问权限和安全级别 - DQL(Data Query Language):数据查询语言,用于查询记录(数据) SQL语句大小写是不区分的。 CREATE / create / Create / CrEaTe 但是,一般情况下,我们会大写。
1.6 DDL使用(数据库)
1.创建数据库
# 创建数据库 CREATE DATABASE mydb1; # 创建数据库,并采用指定的字符集 CREATE DATABASE mydb2 CHARACTER SET UTF8;
2.查看数据库
# 查看当前数据库服务器中的所有的数据库 SHOW DATABASES; # 查看创建数据库mydb1定义的信息 SHOW CREATE DATABASE mydb1;
3.修改数据库
# 将数据库mydb1的字符集修改为GBK ALTER DATABASE mydb1 CHARACTER SET GBK;
4.删除数据库
DROP DATABASE mydb1;
5.其他操作
# 切换当前使用的数据库 USE mydb1; # 查询当前使用的数据库 SELECT DATABASE();
1.7 表的概念
表:数据在数据库中的存储是以表的形式存在的。一个表中有若干个字段,将数据按照这些字段进行存储。
1、数据表(table),是关系型数据库的基本存储结构。一个关系型数据库是由多个表组成的。 2、数据表是二维的,它由纵向的列和横向的行组成。 3、数据表的行(Row)是横排数据,也被称之为记录(Recond)。 4、数据表的列(Column)是竖排数据,也被称之为字段(Field)。 5、表与表之间也可能存在着关系。
表与表之间的关系
1. 一对一 在实际开发中应用不多。因为一对一的关系,完全可以放到一个表中 2. 一对多 一对多建表原则:在多的一方,创建一个字段,作为外键作为指向另外一的那一方的主键。 3. 多对多 多对多的建表原则:需要创建第三张表,在中间表中至少需要有两个字段。这两个字段分别作为外键指向各自一方的主键。
1.8数据类型
每一个字段在设计表的时候都要去指定类型:
int:整型 double:浮点型,例如double(5,2):表示最多有5位,其中必须有两位是小数,即最大值是 999.99 char:固定长度的字符串,例如char(5) : 'aa' 占5位 varchar:可变长度的字符串,例如varchar(5):'aa' 占2位 text:字符串类型 blob:字节类型 date:日期类型,格式是:yyyy-MM-dd time:时间类型,格式为:hh:mm:ss timestamp:时间戳类型,yyyy-MM-dd hh:mm:ss,会自动赋值 datetime:时间类型,yyyy-MM-dd hh:mm:ss
1.9 DDL使用(表)
# DDL操作(表) # 创建表格 CREATE TABLE t_users(name varchar(50), age INT, gender VARCHAR(10), height INT, weight INT); # 删除表格 DROP TABLE t_users; # 查看当前数据库中所有的表 SHOW TABLES; # 查看创建一个表的信息 SHOW CREATE TABLE t_users; # 查看一张表的字段信息 DESC t_users; # 给一张表添加一个字段 ALTER TABLE t_users ADD score DOUBLE(5,2); # 修改一张表的字段类型 ALTER TABLE t_users MODIFY score INT; # 修改一张表的字段名 ALTER TABLE t_users CHANGE name uname VARCHAR(50); # 修改一张表的字符集 ALTER TABLE t_users CHARACTER SET GBK; # 删除一张表中的字段 ALTER TABLE t_users DROP score;
第二章:数据库基本操作
2.1 远程工具的使用
(1) Connection Name(连接名):这个文本框,就是让你给此次连接起个昵称而已,因此随便写。 (2) hostname(主机名): 添加数据库服务端所在的主机IP (3) port(端口号):MySQL的端口号,一般情况下都是默认的3306 (4) username(用户名):即你要使用哪个用户进行登陆数据库服务端。如,超级管理员root, 或者是其他普通用户。 (5) password(密码):你所使用的用户对应的密码 (6) default schema:表示你要连接MySQL里的哪个数据库(数据存储空间)。
2.2 DML操作
DML指的是对数据库中的数据进行增、删、改的操作。不要和DDL搞混了。
在SQL中,字符串类型和日期类型需要用单引号括起来
空值:null / NULL
# 增:INSERT INTO # 向表t_users插入一条数据,并且给每一个字段进行赋值,小括号中的是字段对应的值。要保证顺序。 INSERT INTO t_users VALUES('lily', 21, 'female', 172, 60); INSERT INTO t_users VALUES('lucy', 21, 'female', 171, 60); # 向表t_users插入一条数据,并且对部分字段进行赋值 INSERT INTO t_users (uname, age, gender) VALUES('JimGreen', 22, 'male'); # 向表t_users插入一条数据,并且对部分字段进行赋值,字段的顺序可以随意,但是要保证values后面的值要和前面的字段匹配 INSERT INTO t_users (age, gender, uname) VALUES(10, 'male', 'polly');
2.2.1 插入数据
INSERT INTO `t_name` VALUES(值1, 值2, ...) INSERT INTO `t_name` (字段1, 字段2, ...) VALUES (值1, 值2, ...)
2.2.2 where
在进行数据的删除、修改、查询的时候,可以使用where对数据进行一个过滤。
= :相等比较(类似于java中的==)
!= <> : 表示不相等
> < >= <= : 大小比较
BETWEEN...AND... : 在xxx和xxx之间
IN(set) :在括号中所有值之间取
IS NULL
AND、OR、NOT
2.2.3 删除数据
# 删除数据 DELETE FROM t_student; # 按照条件进行删除 WHERE DELETE FROM t_student WHERE sname = '韦一笑'; # 删除掉表中所有的数据 TRUNCATE TABLE t_student;
DELETE 和 TRUNCATE
delete删除表中的数据,表结构还在;删除的数据可以恢复。
truncate是直接将表DROP掉,然后再按照原来的结构重新创建一张表。数据不可恢复。
truncate删除效率比delete高。
2.2.4 修改数据
# 将所有的数据中的年龄都修改为60 UPDATE t_student SET sage = 60; # 将姓名为'张三丰'的数据年龄改成60 UPDATE t_student SET sage = 60 WHERE sname='张三丰'; # 将姓名为'谢逊'的数据年龄改成50, java成绩修改成60 UPDATE t_student SET sage = 50, score_java = 60 WHERE sname = '谢逊'; # 将姓名为'灭绝师太'的数据mysql成绩在现有基础上加10 UPDATE t_student SET score_mysql = score_mysql / 10 where sname = '灭绝师太';
第三章 基本查询语言
3.1 基本查询语言的结构:
最简单的查询语句: select...from.... 一个完整的普通查询语句结构如下: select [distinct].....from....[where....][group by .....][having.....][order by.....][limit.....]
3.2 查询语句的执行顺序
1. 先执行from子句:基于表进行查询操作 2. 再执行where子句:进行条件筛选或者条件过滤 3. 再执行group by子句:对剩下的数据进行分组查询。 4. 再执行having子句:分组后,再次条件筛选或过滤 5. 然后执行select子句:目的是选择业务需求的字段进行显示 6. 再执行order by子句:对选择后的字段进行排序 7. 最后执行limit子句:进行分页查询,或者是查询前n条记录
3.3 别名的用法
在select语句中,可以对表或者是列起别名操作。在使用汉字作为列别名时,可以加单双引号,也可不加。表别名不能加单双引号。 reg: select name 姓名, (year(now())-year(birth)) 年龄 from test1 t; reg: select e.empno 员工编号,e.ename,e.job,mgr '领导编号',hiredate,sal,comm,deptno from emp e;
3.4 where子句的使用
作用:用于条件筛选或过滤 1)关系表达式: >,>=,<,<=,=,!=,<> 2)多条件连接符: and,or, [not] between ..and.. 3)集合操作: [not] in (set), >all(set), <all(set), >any(set), <any(set) 注意:mysql不支持简单的集合查询操作,但是支持子查询,是针对于all和any集合操作来说的。 4)模糊查询: like _:占位符,表示匹配任意一个字符 %:表示匹配任意N个字符,大于等于0. reg:查询工资大于1600的所有员工的编号,姓名,职位,工资 select empno,ename,job,sal from emp where sal>1600 reg:查询工资大于1600并且小于2500的所有员工的编号,姓名,职位,工资 select empno,ename,job,sal from emp where sal>1600 and sal<2500; select empno,ename,job,sal from emp where sal between 1600 and 2500; reg:查询10,20号部门的所有员工的信息。 select * from emp where deptno not in (10,20); reg:查询不是10号部门中姓名第二个字符是m的员工信息。 select * from emp where deptno<>10 and ename like '_m%';
3.5 order by子句
用于查询排序的,通常放置在一个查询语句的最后部分。 语法: order by colName [asc|desc] [,colName [asc|desc]] asc:升序, 默认情况就是升序 desc:降序 reg:查询员工表中的所有员工信息,按照工资降序排序 select * from emp order by sal desc; reg:查询员工表中的所有员工信息,按照工资降序排序,如果相同,再按照奖金升序排序 select * from emp order by sal desc,comm asc;
3.6 group by子句
1.需求: 有的时候,需要分组统计一些,最大值,最小值,平均值,和,总数之类的这样的信息,此时需要分组查询。 2.聚合函数:也叫分组函数 - count(): 统计每组满足的记录总数 - max():统计每组满足条件的最大值 - min():统计每组满足条件的最小值 - avg():统计每组满足条件的平均值 - sum():统计每组满足条件的总和。 注意: - 所有的聚合函数,都会忽略字段为null的那条记录。 - count(*),不会忽略null值所在的行记录,即通常用于统计总行数。 3. 在分组查询时,只有分组字段可以写在select子句中,其他不是分组的字段,不应该写在select子句中,无意义 多字段进行分组: A B 字段组合情况下:组的数组最多为 m*n 1 a 1001 1 b 1002 2 b 2 c 3 a 3 b 1 a 1003 1 b 1004 4. 聚合函数处理null值,可以使用ifnull(colName, value). - ifnull(colName,value): 如果colName对应的值不为空,就使用本身的值,如果为null,使用value. # 案例:查询每个部门中的每种职位的最高工资,最低工资,工资之和 select deptno,job ,max(sal),min(sal),sum(sal) from emp group by job,deptno; # 案例: 查询所有员工的平均工资,平均奖金 使用ifnull函数 select avg(ifnull(sal,0)),avg(ifnull(comm,0)) from emp;
3.7 having子句
只能使用在分组查询子句后面。起到再过滤的作用。 # 查询部门平均工资大于1000部门号,平均工资。 select deptno,avg(ifnull(sal,0)),max(sal) avg_sal from emp group by deptno having avg(ifnull(sal,0)) >1000; # 查询每种职位的最高工资大于1500的职位、最高工资,平均工资,平均奖金。 select job,max(sal),avg(ifnull(sal,0)),avg(ifnull(comm,0)) from emp group by job having max(sal)>1500;
3.8 去重查询
有的时候,我们需要查询表中有那些不同的数据。不需要重复出现,此时可以使用distinct关键字进行去重处理 注意:distinct关键字只能放在select关键字之后。 比如: 查询有那些部门号
3.9 分页查询
- 需求:当一页的数据量过大时,我们可以进行分页显示操作。注意:分页查询时,一般都要进行先排序,再分页。 - 关键字limit. - 语法:limit m[,n]; m 表示从第几条记录开始查询, n表示要查询的记录数目。 注意:mysql的记录index从0开始。 一个参数的含义:limit n 表示从0开始查询n条记录 案例1:每页5条记录,查询第二页的数据。 select empno,ename from emp limit 5,5; 案例2:查询第page页的数据, 每页大小为pageSize。limit的写法如下: limit (page-1)*pageSize , pageSize
第四章 约束constraint(重点掌握)
4.1 概念
- 完整性约束条件,简称约束,用于保证表中数据的完整性和安全性。 - 约束是对表进行的一种强制性的校验规则。 - 在进行DML操作时,必须符合约束条件,否则不能执行。
4.2 非空约束
- 非空约束:not null,简称NN - 如果对字段设置了not null,在DML操作,不能为空。 - 建表写法: create table tableName( tid int, tname varchar(20) not null, tage int ); - 建表后写法: alter table tableName modify colName type not null;
4.3 唯一性约束
- 唯一性约束:unique,简称 UK - 如果字段设置了唯一性约束,那么在表中此字段的值不能重复,但是可以为null(无穷大不等于无穷大) - 建表写法 create table tableName( tid int, tname varchar(20) not null, username varchar(20) unique );
4.4 主键约束
- 主键约束:primary key,简称PK - 主键约束是非空约束和唯一性约束的组合形式,表示字段的值不能为null且唯一。通常用于作为记录的唯一标识来 使用。 - 选择主键约束的字段要求: 1.对业务需求没有意义的字段,比如序号 2.如果设置了主键约束,那么此字段最好不好人为的修改。而是自动生成。使用auto_increment(自增序列) 3.不建议对动态赋值的字段进行设置,比如时间戳。 - 建表时写法: create table tableName( tid int primary key auto_increment, tname varchar(20) not null ); - 建表后设置: alter table tableName add primary key(colName);
4.5 外键约束
- 外键约束:foreign key,简称FK - 外键约束是指 字段A的值,依赖于字段B的值。这两个字段可以在同一张表中,也可以在不同的表中。字段A所在的 表称之为从表(副表),字段B所在的表称之为主表(父表)。字段A的值也可以为null. 字段B必须为主键约束。 - 建表时写法 create table tableName( tid int primary key auto_increment, tname varchar(20), tmgr int, constraint constraintName Foreign key(tmgr) references tableName(tid) ); 建表后写法: alter table tableName1 add constraint constraintName foreign key(colName1) references tableName2(colName2)
4.6 检查约束
- 检查约束:check,简称ck。 - mysql不支持,可以使用枚举代替。 - 建表语句: create table tableName( tid int, tname varchar(20), tgender char(1) check(tgender in('f','m')) ); 案例: create table temp_5( tid int, tname varchar(20), tgender char(1) check(tgender in('f','m')) #语法通过,但是不生效 ); insert into temp_5 values (1001,'zs','a'); select * from temp_5; 案例: create table temp_6( tid int, tname varchar(20), tgender enum('f','m') #枚举写法 ); insert into temp_6 values (1001,'zs','m');
第五章 关联查询(多表查询)《重点掌握》
5.1 概念:
有的时候,我们的业务需求的数据不只是在一张表中,而是在两张或两张以上的表中,而这些表中通常都会存在着“有关系"的字段。那么此时的查询操作涉及到多表查询,我们称之为关联查询。 案例:最简单的关联查询 select * from emp,dept; select * from emp join dept;
5.2 写法分类
在进行多表关联查询时,通常有两种写法: - 第一种是在from子句中,直接写多个表名,表名之间使用逗号分隔开,如: select A.*,B.*,C.* from A,B,C where 关联条件 - 第二种是在from子句中,多个表名之间使用join关键字连接,并在on关键字后面添加关联条件。 select A.*,B.*,C.* from A join B on 关联条件 select A.*,B.*,C.* from A join B on AB关联条件 join C on AC或BC关联条件 select A.*,B.*,C.* from A join B join C on AB的关联条件 and BC或AC关联条件
5.3 笛卡尔积
- 当做关联查询时,如果两张表中不存在关联字段,或者忘记写关联条件。那么会出现如下图所示的结果。 - 即表A中的每一条记录都回与表B中的所有记录进行匹配组合。例如表A中有m条记录。表B中有N条件。那么匹配组合的记录数目为M*N,此值被称之为笛卡儿积。 - 通常没有意义。
5.4 等值查询
在做关联查询时,使用有关系的字段进行等值条件的限制操作。我们称之为等值查询。 select A.*,B.* from A,B where A.colName=B.colName;
5.5 join连接分类
join关联查询操作分为两大类:内连接和外连接,而外连接有细分为三种类型。参考下图
1. 内连接: [inner] join 2. 外连接 (outer join):(引出一个驱动表的概念:驱动表里的数据全部显示) - 左外连接:left [outer] join, 左表是驱动表 - 右外连接:right [outer] join, 右表是驱动表 - 全外连接:full [outer] join, mysql不支持.两张表里的数据全部显示出来 3. 注意: join连接只支持等值连接
5.6.内链接
语法: from tableName1 [inner] join tableName2 on 条件 注意:与等值查询的效果是一样的。
5.7.外连接
语法: - 左外连接 from tableName1 left join tableName2 on 条件 - 右外连接 from tableName1 right join tableName2 on 条件 - 外连接的两张表分为驱动表和从动表。 驱动表的数据都显示,从动表的数据只显示满足条件的数据。 - 左外连接左边的表 就是主表。 - 右外连接右边的表是主表。
5.8.集合查询
union(去重)/union all(不去重): 两个查询语句使用上述的关键字连接即可。 注意:两个查询语句的字段名,字段个数,必须对应上。
第六章 高级关联查询(子查询)
6.1 简介
有的时候,当一个查询语句A所需要的数据,不是直观在表中体现,而是由另外一个查询语句B查询出来的结果,那么查询语句A就是主查询语句,查询语句B就是子查询语句。这种查询我们称之为高级关联查询,也叫做子查询。
子查询语句的返回数据形式:
- 返回单行单列 - 返回多行单列 - 返回单行多列 - 返回多行多列
子查询语句的位置可以在以下几个子句中:
- 在where子句中: 子查询的结果可用作条件筛选时使用的值。 - 在from子句中: 子查询的结果可充当一张表或视图,需要使用表别名。 - 在having子句中: 子查询的结果可用作分组查询再次条件过滤时使用的值 - 在select子句中: 子查询的结果可充当一个字段。仅限子查询返回单行单列的情况。
6.2 在where子句中
# 需求:查询工资大于员工编号为7369这个员工的所有员工信息。 解析: 第一步:目的是查询工资大于某一个数num的所有员工信息 select * from emp where sal>num 第二步:num的值7369员工的工资 select sal from emp where empno = 7369; 第三步:将主查询中的代词使用子查询语句替换 select * from emp where sal>(select sal from emp where empno = 7369); # 需求:查询工资大于10号部门的平均工资的所有员工信息 select * from emp where sal>(select avg(ifnull(sal,0)) from emp where deptno=10); # 需求:查询工资大于10号部门的平均工资的非10号部门的员工信息。 select * from emp where sal>(select avg(ifnull(sal,0)) from emp where deptno=10) and deptno<>10; # 需求:查询与7369同部门的同事信息。 select * from emp where deptno=(select deptno from emp where empno=7369) and empno<>7369;
6.3 在from子句中
# 需求:查询员工的姓名,工资,及其部门的平均工资。 解析: 第一步:先查询每个部门的平均工资 select deptno,avg(ifnull(sal,0)) from emp group by deptno; 第二步:将上一个查询语句的返回结果当成一张表,与员工表进行关联查询 select A.ename,A.sal,B.avg_sal from emp A join (select deptno,avg(ifnull(sal,0)) avg_sal from emp group by deptno) B on A.deptno = B.deptno
6.4 在having子句中
# 需求:查询平均工资大于30号部门的平均工资的部门号,和平均工资 select deptno,avg(ifnull(sal,0)) from emp group by deptno having avg(ifnull(sal,0))> (select avg(ifnull(sal,0)) from emp where deptno=30);
6.5 在select子句中
相当于外连接的另外一种写法 # 查询每个员工的信息及其部门的平均工资,工资之和,部门人数 select A.empno,A.ename,A.sal, (select avg(ifnull(sal,0)) from emp B where B.deptno=A.deptno) avg_sal, (select sum(sal) from emp C where C.deptno=A.deptno) sum_sal, (select count(*) from emp D where D.deptno=A.deptno) count_ from emp A;
6.6 sql完整执行顺序
select distinct..from t1 [inner|left|right] join t2 on 条件 where...group by...having...order by...limit 1. from t1 2. on 条件 3. [inner|left|right] join t2 4. where... 5. group by... 6. having... 7. select... 8. distinct... 9. order by... 10. limit....
第七章 常用函数
7.1 日期函数
函数 | 函数说明 |
---|---|
curdate()\curtime()\now()\sysdate()\current_timestamp() | 获取系统时间 |
dayofweek(date) \weekday(date) \dayname(date) | 获取星期几 |
dayofmonth(date) \dayofyear(date) \monthname(date) | 获取第几天 |
year(date)\month(date)\day(date) \ hour(date) \minute(date) \second(date) | 获取时间分量 |
date_format(date,format) (%Y年 %m月 %d日 %h时 %i分 %s秒 %p上下午 %W星期) | 日期格式化,根据format字符串格式化date的值 |
date_add(date,interval expr type) \date_sub(date,interval expr type) | 日期运算 |
adddate(date,interval expr type) \subdate(date,interval expr type) | 日期运算 |
7.2 字符串函数
函数 | 函数说明 |
---|---|
conv(n,from_base,to_base) | 进制转换,对from_base进制的数n,转成to_base进制的表示方式 |
concat(str1,str2,...) | 将多个参数拼接成一个字符串,只要有一个为null,就返回null |
lpad(str,len,padstr) rpad(str,len,padstr) | 用字符串padstr填补str左端/右端直到字串长度为len并返回 |
left(str,len) right(str,len) | 返回字符串str的左端/右端的len个字符 |
substring(str,pos[,len]) | 返回字符串str的位置pos起len个字符,此函数的下标是从1开始 |
length(str) octet_length(str) | 返回参数对应的默认字符集的所有字节数 |
char_length(str) character_length(str) | 返回字符串str的字符长度 |
ltrim(str) rtrim(str) trim(str) | 返回删除了左空格/右空格的字符串str |
lcase(str)lower(str)ucase(str)upper(str) | 返回str的大小写 |
replace(str,from_str,to_str) | 用字符串to_str替换字符串str中的子串from_str并返回 |
insert(str,pos,len,newstr) | 把字符串str由位置pos起len个字符长的子串替换为字符串newstr并返回 |
7.3 数值函数
函数 | 函数说明 |
---|---|
pow(x,y)/power(x,y) | 返回值x的y次幂 |
sqrt(n) | 返回非负数n的平方根 |
pi() | 返回圆周率 |
rand() rand(n) | 返回在范围0到1.0内的随机浮点值(可以使用数字n作为初始值) |
truncate(n,d) | 保留数字n的d位小数并返回 |
least(x,y,...) greatest(x,y,...) | 求最小值或最大值 |
mod(n,m) | 取模运算,返回n被m除的余数 |
ceiling(n) floor(n) | 向上/向下取整函数 |
round(n,d) | 返回n的四舍五入值,保留d位小数(d的默认值为0) |
第八章 DCL语句
8.1 作用
用于创建用户,授予权限,撤销权限等操作。 create user grant revoke alter user drop user
8.2 管理用户
创建用户,修改密码,删除用户等操作,都需要使用超级管理员root进行操作
- 创建用户语法: create user username@ip identified by 'password'; - 修改用户密码: alter user username@ip identified by 'newPassword'; set password for username@ip = password('newPassword'); - 删除用户: drop user username@ip
8.3 权限管理
可进行授予权限,撤销权限,查询权限等操作
- 查看用户权限:使用超级管理员root show grants for username - 授权:使用超级管理员root grant 权限名[,权限名.....] on dbname.* to username@ip DDL权限:create、alter、create view.....,drop DML权限:insert、update、delete DQL权限: select 案例:授于某用户全部权限 grant all privileges on *.* to 'scott'@'localhost' identified by '123456' with grant option; 案例:启用root用户的远程连接操作 grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; - 撤销权限 revoke 权限名 [,权限名.....] on dbname.* from username@ip - 刷新权限 flush privilages;
第九章 数据库的备份和恢复
9.1 手动复制的方法
a.可以先登陆mysql 查看数据文件的位置: show global variables like '%datadir%' b.在某一个位置创建备份目录backup. 比如:D:\backup c.将%datadir%下的所有文件,copy到backup下。 d.先模拟某一个数据库mydb毁坏。drop database mydb; e.先终止服务项。再将所有的数据,copy到%datadir%下。然后再去查看。
9.2 使用mysqldump命令进行备份。
a.在命令提示符下输入(别登陆到mysql内): mysqldump -uUsername -pPwd --all-databases > filename.sql #备份所有数据库 b.备份一部分数据库 mysqldump -uUsername -pPwd --databases dbname1 dbname2 > filename.sql c.备份某个数据库中的某些表 mysqldump -uUsername -pPwd dbname tablename1 tablename2 > filename.sql d.恢复数据 登入到mysql内,使用source命令 语法: source filename.sql 注意: 路径是绝对路径