1、初识数据库
1.1 数据库的概念
数据库(DB database):数据仓库、软件、在装在操作系统上。可以存储大量数据,500万条以下,若超过500w需要进行索引优化
1.2 数据库的分类
关系型数据库:(SQL)
- MySQL、Oracle、SQL Server、DB2
- 通过表和表之间、行和列之间的管理进行数据存储
非关系型数据库:(NoSQL)
- Redis、MongoDB
- 对象存储,通过对象的自身属性来决定
2 MySQL下载与安装
2.1 下载地址
[官网下载地址]:MySQL :: MySQL Downloads
提取码:q844
2.2 安装步骤(压缩包安装)
1、下载解压zip压缩包(不建议使用.exe安装)
2、配置MySQL系统环境变量,在系统变量下的path中填写mysql安装目录的bin文件夹路径
3、在安装目录下创建一个my.ini配置文件
[mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir=D:\\mysql\\mysql8#设置mysql数据库的数据的存放目录datadir=D:\\mysql\\mysql8\\Data#更改时区default-time_zone = '+8:00'#允许最大连接数max_connections=200#允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10#服务端使用的字符集默认为UTF8character-set-server=utf8#创建新表时将使用的默认存储引擎default-storage-engine=INNODB#默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password[mysql]#设置mysql客户端默认字符集default-character-set=utf8[client]#设置mysql客户端连接服务端时默认使用的端口,可能和VMware的端口冲突,可自行修改port=3306default-character-set=utf8[WinMySQLAdmin]Server=D:\mysql\mysql8\bin\mysqld.exeskip-grant-tables#设置将mysql的服务添加到注册表中,反正我当时没加这句话初始化有问题,目录照猫画虎,单双杠自己选#第一次登录mysql可以跳过密码输入skip-grant-tables
4、以管理员权限启动CMD,并将路径切换至mysql下的bin目录,然后输入mysqld –install (安装mysql)
5、再输入 mysqld —initialize-insecure —user=mysql 初始化数据文件
6、然后再次启动mysql 然后用命令 mysql –u root –p 进入mysql管理界面 (第一次不需要输入密码)
7、进入界面后更改root密码
update mysql.user set authentication_string=password('123456') where user='root'and Host = 'localhost';
8、 刷新数据库 删除my.ini配置文件的最后一行“skip-grant-tables”
flush privileges;
9、重启连接
net stop mysqlnet start mysql
10、连接成功界面
11、安装SQLyog或navicat
3、MySQL数据类型
3.1 数值类型
3.2 字符串类型
3.3 日期和时间
4、基本命令
4.1 操作数据库
create database if not exists dbName; #创建数据库show create database dbName #查询创建数据库的语句drop database if exists dbName #删除数据库show databases; #显示所有数据库use dbName;#打开某个数据库
4.2 操作数据表
4.2.1 创建表
-- 创建学生信息表 (学号,姓名,性别,出生日期)CREATE TABLE if not exists `student` (`studentno` INT(4) NOT NULL COMMENT '学号',`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',`birthday` DATETIME DEFAULT NULL COMMENT '生日') ENGINE=INNODB DEFAULT CHARSET=utf8show create table student #查询数据表的定义语句desc student #显示表的结构
4.2.2 数据表的类型
4.2.3 修改表
#修改表名ALTER TABLE 旧表名 RENAME AS 新表名#添加字段名ALTER TABLE 表名 ADD 字段名 列属性[属性]#修改字段名ALTER TABLE 表名 MODIFY 字段名 列类型[属性] #修改字段名的属性ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性] #重命名#删除字段ALTER TABLE 表名 DROP 字段名
4.2.4 删除表
DROP TABLE [IF EXISTS] 表名
4.3 MySQL数据管理
4.3.1 外键(不建议使用)
创建外键:
方式一:创建子表同时创建外键
-- 年级表 (id\年级名称)CREATE TABLE `grade` (`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY (`gradeid`)) ENGINE=INNODB DEFAULT CHARSET=utf8-- 学生信息表 (学号,姓名,性别,年级,出生日期)CREATE TABLE `student` (`studentno` INT(4) NOT NULL COMMENT '学号',`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',`gradeid` INT(10) DEFAULT NULL COMMENT '年级',`borndate` DATETIME DEFAULT NULL COMMENT '生日',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`studentno`),KEY `FK_gradeid` (`gradeid`),CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)) ENGINE=INNODB DEFAULT CHARSET=utf8
方式二: 创建子表完毕后,修改子表添加外键
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
删除外键:
删除具有主外键关系的表时 , 要先删子表 , 后删主表
-- 删除外键ALTER TABLE student DROP FOREIGN KEY FK_gradeid;-- 发现执行完上面的,索引还在,所以还要删除索引-- 注:这个索引是建立外键的时候默认生成的ALTER TABLE student DROP INDEX FK_gradeid;
4.3.2 添加
INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')/*字段或值之间用英文逗号隔开 .’ 字段1,字段2…’ 该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致 .可同时插入多条数据 , values 后用英文逗号隔开 .*/
4.3.3 修改
UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHEREcondition];UPDATE grade SET gradename = '高中' WHERE gradeid = 1;
4.3.4 删除
DELETE FROM 表名 [WHERE condition];DELETE FROM grade WHERE gradeid = 5#condition为筛选条件 , 如不指定则删除该表的所有列数据TRUNCATE命令:用于完全清空表数据 , 但表结构 , 索引 , 约束等不变TRUNCATE table table_name;
注:truncate与delete的区别
- 都能删除数据 , truncate不删除表结构,而delete是删除整张表 , 且TRUNCATE速度更快
- 使用TRUNCATE TABLE 重新设置AUTO_INCREMENT计数器
4.4 DQL查询
4.4.1 指定查询字段
-- selcet查询中可以使用表达式SELECT @@auto_increment_increment; -- 查询自增步长 默认自增1SELECT VERSION(); -- 查询版本号SELECT 100*3-1 AS 计算结果; -- 表达式-- 查询所有学生信息SELECT * FROM student;-- 查询指定列(学号 , 姓名)SELECT studentno,studentname FROM student;-- 这里是为列取别名(当然as关键词可以省略)SELECT studentno AS 学号,studentname AS 姓名 FROM student;-- 使用as也可以为表取别名SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;-- 使用as,为查询结果取一个新名字-- CONCAT()函数拼接字符串SELECT CONCAT('姓名:',studentname) AS 新姓名 FROM student;-- DISTINCT 去除重复项 , (默认是ALL)SELECT DISTINCT studentno FROM result;-- 学员考试成绩集体提分一分查看SELECT studentno,StudentResult+1 AS '提分后' FROM result;
4.4.2 where条件字句
逻辑操作符:
-- 满足条件的查询(where)SELECT Studentno,StudentResult FROM result;-- 查询考试成绩在95-100之间的SELECT Studentno,StudentResult FROM result WHERE StudentResult>=95 AND StudentResult<=100;-- AND也可以写成 &&SELECT Studentno,StudentResult FROM result WHERE StudentResult>=95 && StudentResult<=100;-- 模糊查询(对应的词:精确查询)SELECT Studentno,StudentResult FROM result WHERE StudentResult BETWEEN 95 AND 100;-- 除了1000号同学,要其他同学的成绩SELECT studentno,studentresult FROM result WHERE studentno!=1000;-- 使用NOTSELECT studentno,studentresult FROM result WHERE NOT studentno=1000;
比较操作符:
/*------like-------*/-- like结合使用的通配符 : % (代表0到任意个字符) _ (匹配一个字符)-- 查询所有姓陈的同学SELECT studentno,studentname FROM student WHERE studentname LIKE '陈%';-- 查询姓卿的同学,后面只有一个字的SELECT studentno,studentname FROM student WHERE studentname LIKE '卿_';-- 查询姓名中含有 卿 字的SELECT studentno,studentname FROM student WHERE studentname LIKE '%卿%';/*------in-------*/-- 查询学号为1000,1001,1002的学生姓名SELECT studentno,studentname FROM student WHERE studentno IN (1000,1001,1002);-- 查询地址在北京,南京,河南洛阳的学生SELECT studentno,studentname,address FROM student WHERE address IN ('北京','南京','河南洛阳');/*------NULL 空-------*/-- 查询出生日期没有填写的同学-- 不能直接写=NULL , 这是错误的 , 用 is nullSELECT studentname FROM student WHERE BornDate IS NULL;-- 查询出生日期填写的同学SELECT studentname FROM student WHERE BornDate IS NOT NULL;-- 查询没有写家庭住址的同学(空字符串不等于null)SELECT studentname FROM student WHERE Address='' OR Address IS NULL;
4.4.3 联表查询 join
/*连接查询如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询内连接 inner join查询两个表中的结果集中的交集外连接 outer join左外连接 left join(以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充)右外连接 right join(以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充)等值连接和非等值连接*/-- 查询参加了考试的同学信息(学号,学生姓名,科目编号,分数)SELECT s.studentno,studentname,subjectno,StudentResult FROM student s INNER JOIN result r ON r.studentno = s.studentno-- 右连接(也可实现)SELECT s.studentno,studentname,subjectno,StudentResult FROM student s RIGHT JOIN result r ON r.studentno = s.studentno-- 等值连接SELECT s.studentno,studentname,subjectno,StudentResult FROM student s , result r WHERE r.studentno = s.studentno-- 左连接 (查询了所有同学,不考试的也会查出来)SELECT s.studentno,studentname,subjectno,StudentResult FROM student s LEFT JOIN result r ON r.studentno = s.studentno-- 查一下缺考的同学(左连接应用场景)SELECT s.studentno,studentname,subjectno,StudentResult FROM student s LEFT JOIN result r ON r.studentno = s.studentnoWHERE StudentResult IS NULL
/*自连接(了解)数据表与自身进行连接需求:从一个包含栏目ID , 栏目名称和父栏目ID的表中查询父栏目名称和其他子栏目名称*/-- 创建一个表CREATE TABLE `category` (`categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id',`pid` INT(10) NOT NULL COMMENT '父id',`categoryName` VARCHAR(50) NOT NULL COMMENT '主题名字',PRIMARY KEY (`categoryid`)) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8-- 插入数据INSERT INTO `category` (`categoryid`, `pid`, `categoryName`)VALUES('2','1','信息技术'),('3','1','软件开发'),('4','3','数据库'),('5','1','美术设计'),('6','3','web开发'),('7','5','ps技术'),('8','2','办公信息');-- 编写SQL语句,将栏目的父子关系呈现出来 (父栏目名称,子栏目名称)-- 核心思想:把一张表看成两张一模一样的表,然后将这两张表连接查询(自连接)SELECT a.categoryName AS '父栏目',b.categoryName AS '子栏目' FROM category AS a,category AS b WHERE a.`categoryid`=b.`pid`
4.4.4 分页和排序
/*------排序-------ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照ASC升序对记录进行排序。按照降序对记录进行排序,可以使用 DESC 关键字。*/SELECT * FROM student ORDER BY StudentResult DESC #按StudentResult降序/*------分页-----------limit 页面起始显示值,页面的大小pageNo:当前页 pageSzie:页面大小limit (pageNo-1)*pageSzie,pageSzie第一页 : limit 0,5(1-5)第二页 : limit 5,5(6-10)第三页 : limit 10,5*/SELECT * FROM result order by grade LIMIT 0,5
4.4.5 子查询
SELECT *FROM student WHERE studentno=(SELECT studentno FROM result WHERE grade=9)-- 分步写简单sql语句,然后将其嵌套起来SELECT studentno,studentname FROM student WHERE studentno IN(SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(SELECT subjectno FROM `subject` WHERE subjectname = '高等数学-2'))
5、MySQL函数
5.1 常用函数
5.1.1 数学运算
SELECT ABS(-8); /*绝对值*/SELECT CEILING(9.4); /*向上取整*/SELECT FLOOR(9.4); /*向下取整*/SELECT RAND(); /*随机数,返回一个0-1之间的随机数*/SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/
5.1.2 字符串函数
SELECT CHAR_LENGTH('狂神说坚持就能成功'); /*返回字符串包含的字符数*/SELECT CONCAT('我','爱','程序'); /*合并字符串,参数可以有多个*/SELECT INSERT('我爱编程helloworld',1,2,'超级热爱'); /*替换字符串,从某个位置开始替换某个长度*/SELECT LOWER('KuangShen'); /*小写*/SELECT UPPER('KuangShen'); /*大写*/SELECT LEFT('hello,world',5); /*从左边截取*/SELECT RIGHT('hello,world',5); /*从右边截取*/SELECT REPLACE('狂神说坚持就能成功','坚持','努力'); /*替换字符串*/SELECT SUBSTR('狂神说坚持就能成功',4,6); /*截取字符串,开始和长度*/SELECT REVERSE('狂神说坚持就能成功'); #反转-- 查询姓周的同学,改成邹SELECT REPLACE(studentname,'周','邹') AS 新名字 FROM student WHERE studentname LIKE '周%';
5.1.3 日期和时间函数
SELECT CURRENT_DATE(); /*获取当前日期*/SELECT CURDATE(); /*获取当前日期*/SELECT NOW(); /*获取当前日期和时间*/SELECT LOCALTIME(); /*获取当前日期和时间*/SELECT SYSDATE(); /*获取当前日期和时间*/-- 获取年月日,时分秒SELECT YEAR(NOW());SELECT MONTH(NOW());SELECT DAY(NOW());SELECT HOUR(NOW());SELECT MINUTE(NOW());SELECT SECOND(NOW());
5.2 聚合函数(常用)
-- 聚合函数/*COUNT:非空的*/SELECT COUNT(studentname) FROM student;SELECT COUNT(*) FROM student;SELECT COUNT(1) FROM student; /*推荐*/-- 从含义上讲,count(1) 与 count(*) 都表示对全部数据行的查询。-- count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。-- count(*) 包括了所有的列,相当于行数,在统计结果的时候,包含字段为null 的记录;-- count(1) 用1代表代码行,在统计结果的时候,包含字段为null 的记录 。/*很多人认为count(1)执行的效率会比count(*)高,原因是count(*)会存在全表扫描,而count(1)可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。下面它们之间的一些对比:1)在表没有主键时,count(1)比count(*)快2)有主键时,主键作为计算条件,count(主键)效率最高;3)若表格只有一个字段,则count(*)效率较高。*/SELECT SUM(StudentResult) AS 总和 FROM result;SELECT AVG(StudentResult) AS 平均分 FROM result;SELECT MAX(StudentResult) AS 最高分 FROM result;SELECT MIN(StudentResult) AS 最低分 FROM result;
5.3 MD5加密
简介:MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
INSERT INTO testmd5 VALUES(1,'qingfan',md5('123456'));update testmd5 set pwd = md5(pwd) where name = 'qingfan';
6、事务
6.1 什么是事务
- 事务就是将一组SQL语句放在同一批次内去执行
- 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
- MySQL事务处理只支持InnoDB和BDB数据表类型
6.2 ACID
6.2.1 原子性(Atomic)
整个事务中的所有操作,**要么全部完成,要么全部不完成,**不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(ROLLBACK)到事务开始前的状态,就像这个事务从来没有执行过一样。
6.2.2 一致性(Consist)
事务前后的数据完整性要保证一致
6.2.3 隔离性(Isolated)
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
6.2.4 持久性(Durable)
在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
6.3 语法
-- 使用set语句来改变自动提交模式SET autocommit = 0; /*关闭*/SET autocommit = 1; /*开启*/-- 注意:-- 1.MySQL中默认是自动提交-- 2.使用事务时应先关闭自动提交 SET autocommit = 0;-- 开始一个事务,标记事务的起始点START TRANSACTION-- 提交一个事务给数据库COMMIT-- 将事务回滚,数据回到本次事务的初始状态ROLLBACK-- 还原MySQL数据库的自动提交SET autocommit =1;-- 保存点SAVEPOINT 保存点名称 -- 设置一个事务保存点ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点RELEASE SAVEPOINT 保存点名称 -- 删除保存点-- 测试:转账实现SET autocommit = 0; -- 关闭自动提交START TRANSACTION; -- 开始一个事务,标记事务的起始点UPDATE account SET cash=cash-500 WHERE `name`='A';UPDATE account SET cash=cash+500 WHERE `name`='B';COMMIT; -- 提交事务# rollback;SET autocommit = 1; -- 恢复自动提交
7、索引
7.1 索引作用
- 提高查询速度
- 确保数据的唯一性
- 可以加速表和表之间的连接 , 实现表与表之间的参照完整性
- 使用分组和排序子句进行数据检索时 , 可以显著减少分组和排序的时间
- 全文检索字段进行搜索优化
7.2 索引分类
- 主键索引 (Primary Key)
- 唯一索引 (Unique)
- 常规索引 (Index)
- 全文索引 (FullText)
7.2.1 主键索引
主键 : 某一个属性组能唯一标识一条记录
特点 :
- 最常见的索引类型
- 确保数据记录的唯一性
- 确定特定数据记录在数据库中的位置
7.2.2 唯一索引
作用 : 避免同一个表中某数据列中的值重复
与主键索引的区别:
- 主键索引只能有一个
- 唯一索引可能有多个
CREATE TABLE `Grade`(`GradeID` INT(11) AUTO_INCREMENT PRIMARYKEY,`GradeName` VARCHAR(32) NOT NULL UNIQUE-- 或 UNIQUE KEY `GradeID` (`GradeID`))
7.2.3 常规索引
作用 : 快速定位特定数据
注意 :
- index 和 key 关键字都可以设置常规索引
- 应加在查询找条件的字段
- 不宜添加太多常规索引,影响数据的插入,删除和修改操作
CREATE TABLE `result`(-- 省略一些代码INDEX/KEY `ind` (`studentNo`,`subjectNo`) -- 创建表时添加)-- 创建后添加ALTER TABLE `result` ADD INDEX `ind`(`studentNo`,`subjectNo`);
7.3 测试索引
测试查询100w条数据的表
-- 建表app_user:CREATE TABLE `app_user` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(50) DEFAULT '' COMMENT '用户昵称',`email` varchar(50) NOT NULL COMMENT '用户邮箱',`phone` varchar(20) DEFAULT '' COMMENT '手机号',`gender` tinyint(4) unsigned DEFAULT '0' COMMENT '性别(0:男;1:女)',`password` varchar(100) NOT NULL COMMENT '密码',`age` tinyint(4) DEFAULT '0' COMMENT '年龄',`create_time` datetime DEFAULT CURRENT_TIMESTAMP,`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='app用户表'-- 插入100w条数据DROP FUNCTION IF EXISTS mock_data;DELIMITER $$CREATE FUNCTION mock_data()RETURNS INTBEGINDECLARE num INT DEFAULT 1000000;DECLARE i INT DEFAULT 0;WHILE i < num DOINSERT INTO app_user(`name`, `email`, `phone`, `gender`, `password`, `age`)VALUES(CONCAT('用户', i), '24736743@qq.com', CONCAT('18', FLOOR(RAND()*(999999999-100000000)+100000000)),FLOOR(RAND()*2),UUID(), FLOOR(RAND()*100));SET i = i + 1;END WHILE;RETURN i;END;SELECT mock_data();-- 创建索引CREATE INDEX idx_app_user_name ON app_user(name);-- 删除索引ALTER TABLE app_user DROP INDEX idx_app_user_name
没有创建索引的查询时间为1.8s
添加索引后的查询时间为0.025s
7.4 索引原则
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表建议不要加索引
- 索引一般应加在查找条件的字段
7.5 索引数据结构
-- 我们可以在创建上述索引的时候,为其指定索引类型,分两类hash类型的索引:查询单条快,范围查询慢btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)-- 不同的存储引擎支持的索引类型也不一样InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;
8、权限管理和备份
8.1 用户管理
/* 用户和权限管理 */ ------------------用户信息表:mysql.user-- 刷新权限FLUSH PRIVILEGES-- 增加用户 CREATE USER kuangshen IDENTIFIED BY '123456'CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 密码(字符串)- 必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。- 只能创建用户,不能赋予权限。- 用户名,注意引号:如 'user_name'@'192.168.1.1'- 密码也需引号,纯数字密码也要加引号- 要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD-- 重命名用户 RENAME USER kuangshen TO kuangshen2RENAME USER old_user TO new_user-- 设置密码SET PASSWORD = PASSWORD('密码') -- 为当前用户设置密码SET PASSWORD FOR 用户名 = PASSWORD('密码') -- 为指定用户设置密码-- 删除用户 DROP USER kuangshen2DROP USER 用户名-- 分配权限/添加用户GRANT 权限列表 ON 表名 TO 用户名 [IDENTIFIED BY [PASSWORD] 'password']- all privileges 表示所有权限- *.* 表示所有库的所有表- 库名.表名 表示某库下面的某表-- 查看权限 SHOW GRANTS FOR root@localhost;SHOW GRANTS FOR 用户名-- 查看当前用户权限SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();-- 撤消权限REVOKE 权限列表 ON 表名 FROM 用户名REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户名 -- 撤销所有权限
8.2 MySQL备份
-- 导出1. 导出一张表 -- mysqldump -uroot -p123456 school student >D:/a.sqlmysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)2. 导出多张表 -- mysqldump -uroot -p123456 school student result >D:/a.sqlmysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)3. 导出所有表 -- mysqldump -uroot -p123456 school >D:/a.sqlmysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)4. 导出一个库 -- mysqldump -uroot -p123456 -B school >D:/a.sqlmysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)可以-w携带备份条件-- 导入1. 在登录mysql的情况下:-- source D:/a.sqlsource 备份文件2. 在不登录的情况下mysql -u用户名 -p密码 库名 < 备份文件
