还剩25页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
数据库基础入门 ------------------- 数据库的作用 ------------------- 数据是数据库中存储的基本对象 包括文字、图形、图像、声音 有组织的、可共享的数据__ ------------------ 常用的DBMS ------------------ MYSQL(oracle、Sun) oracle(oracle) SQL-Server(Microsoft DB2(IBM) ----------------------------------- ..如何学习数据库管理系统 ------------------------------------ .程序员
1、标准语言SQL(结构化查询语言) SQL是用于访问数据库的最常用标准化语言,他是由ANSI/ISOSQL标准定义的 SQL的分类 DML数据操作语言(用于检索或者修改数据) DDL数据定义语言(用于定义数据的结构,比如创建、修改或者删除数据库的对象) DCL数据控制语言(用于定义数据库用户的权限) DML: select:用于检索数据 insert:用于增加数据到数据库 update:用于从数据库中修改现存的数据 delete用于从数据库中删除数据 DDL: createtable//创建表 alter//修改表 droptable//删除表 createindex//创建索引 dropindex//删除索引 createview//创建视图 dropview//删除视图 DCL grant//授权 revoke//撤销授权 set//设置
2、不同数据库的独特管理方式 .DBA(DatabaseAdministrator)
1、标准语言SQL(结构化查询语言)
2、不同数据库的独特管理方式
3、数据库的调优
4、精通数据库的备份、回复机制 ----------------------------- MYSQL的__与配置 ---------------------------- __选择普通__类型 .配置
1、选择配置类型DetailedConfiguration
2、选择服务器类型Developer__chine
3、选择数据库的是使用情况 --多功能数据库(MultifunctionalDatabase) --只是事务处理数据库(TransactionalDatabaseOnly) --只是非事务处理数据库(Non-TransactionalDatabaseOnly)
4、InnoDB表空间文件存储的盘符,默认在c\
5、数据库并发连接数配置Decisionsupport
6、MYSQL服务器端口默认3306
7、EnableStrictMode是否允许严格样式检查取消
8、选择字符编码手工选择gb2312,windows下中文支持
9、服务器默认__到windows系统服务中,默认服务自启动,选择自动配置环境变量
10、填写数据库管理系统的_____ --在mySQL中数据库___的用户名为root
11、是否允许使用root用户远程登录数据库
12、测试配置是否正确c\c:\mysql\bin\mysqlshow ------------------------ MYSQL的登录 ------------------------ .开始--运行--cmd .输入mysql-uroot-p,然后输入__ .或者mysql-uroot-p__ .退出quit或者\q --不必全在一个行内给出一个命令,较长命令可以输入到多个行中mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束 -等待多行命令的下一行 等待下一行,等待以单引号开始的字符串结束 如果你决定不想执行正在输入过程中的一个命令,输入\c取消它 能够以大小写输入关键词,结果是等价的 -------------------- 基本的SQL语句 -------------------- 创建数据库---createdatabaseschool; 查看有哪些数据库--showdatabases; 删除数据库---dropdatabaseschool; -------------------------- 向数据库中存储数据 --------------------------
1、首先进入数据库usedbname; use类似quit,不需要一个分号,写也无碍 use必须在一个单行上给出
2、查看数据库中的表showtables;
3、在数据库中创建表createtablestudent (namevarchar
(20),ageint,___char
(2));
4、向表中插入数据---insertintodbnamevalues(‘张三’,18,‘男’);
5、查看表中所有的数据--select*fromstudent; 只查看姓名和年龄---selectname,agefromstudent; -------------------- 常用的数据类型 -------------------- char(M)固定长度字符 用来表示固定长度字符串,字符串的长度是1-255 VARCHAR(M)可变长度字符 具有灵活性的字符数据类型,范围1-255 处理char类型的数据比varchar类型的数据要快,有时会快50%(char类型存储的数据的长度是声明变量时的固定长度,而不管数据的实际长度,varchar存储的是按数据的实际长度,从而减小了数据文件的大小) int整数有符合的范围-2147483648到2147483647,无符号范围0到4294967295 -------------------------- 其他常用的数据类型 -------------------------- DATE---日期类型,显示‘YYYY-MM-DD’ DATETIME--日期和时间的组合,显示‘YYYY-MM-DDHH:MM:SS TEXT/BLOB文本和大对象 TEXT可以保存字符串的长度在255-65535字节内BLOB是一个能保存二进制数据的大对象,区别是TEXT不区分大小写,而BLOB区分大小写 SQL语句的导入
1、编写SQL脚本(.sql)
2、导入mysql-uusername-p***.sql 练习 老师表teacher 姓名,性别,年龄,课程 导出sql脚本---mysqldumpstu-uroot-pabc.sql 查看表的结构------desctablename 修改表中的数据---updatetablenamesetcolname=valuewhere条件 删除数据-----deletefromteacherwhereage=? 删除表中所有数据---deletefromteacher; 删除表---droptabletablename 根据条件进行过滤查找---select*fromtablenamewhere条件 查找出版社为“清华出版社”的所有书籍---select*frombookswherepub=‘清华出版社’; 查找出库存大于50的所有书籍---select*frombookswherestore50; 查找出“西游记”的库存量---selecttitle,storefrombookswheretitle=‘西游记’; SQL运算符 大于小于=大于等于=小于等于!=不等于 查看数据库的信息----\s ------------------- mysql常用函数 -------------------
1、查看数据库版本---selectversin(); 计算机的时间是存在BIOS()
2、查看当前数据库的日期----selectcurrent_date();
3、查看当前数据库时间----selectnow();
4、查看当前连接数据库的用户---selectuser();localhost代表是本机 createtableuseridintnamevarchar20birdatedeadatetime; insertintouservalues1zhangsannownow; or和and查询 or(满足一个条件) and(都需要满足) 查找学生EQ为80分或90分的学生 select*fromstuwhereEQ=80orEQ=90; 查找学生EQ为90分并且性别为女的学生 select*fromstuwhereEQ=90and___=女; in(x,x)返回条件中的记录与or作用相似 select*fromtablenamewhere条件in(,); between‘’and‘’返回两者之间的记录 查询年龄在20-30之间的所有学生 select*fromstuwhereagebetween20and30; like与通配符(%)一起使用,模糊查询 查找出姓张的学生 select*fromstuwherenamelike‘张%’; 查询出使用163邮箱的所有学生 select*fromstuwheree__illike‘
3.com’; 查询出邮箱里面含有a的所有学生 select*fromstuwheree__illike‘%a%’; orderby实现排序(从小到大)--asc 将学生的年龄从高到低排列 select*fromstuorderbyagedesc;(降序) 将学生的年龄从低到高排列 select*fromstuorderbyageasc;(升序) 数据默认为升序(从低到高) select*fromstuorderbyage; as为查询的列起别名
1、查询所有学生只列出姓名,年龄,性别 selectnameas姓名ageas年龄___as性别fromstu; groupby对于查询出的数据结果进行分类(分组)
2、将学生按性别进行分类 select*fromstugroupby___; 将学生按年龄进行分类 select*fromstugroupbyage;
3、h__ing子查询对于where查询出的结果再次进行查询 查找出年龄大于20岁学生,并且在其中找出姓名等于xxx的学生 select*fromstuwhereage20h__ingname=xxx或 select*fromstuwhereage20andname=xxx
4、distinct过滤查询的重复型记录,只显示唯一的记录 将学生性别过滤 selectdistinct___fromstu; count查看表中有几条数据 selectcount*fromstu; selectcountdistinct___fromstu; limit限制查询结果的输出数量同时也可以实现数据的分页 查询EQ前三名的学生 select*fromstuorderbyEQdesclimit3; 实现查询记录的分页 select*fromstulimit03; select*fromstulimit33; 约束----定义了表级的强制规则、数据的完整性 非空约束(notnull)createtabletestidintnotnull;insertintotestvalues; innodb会报错,myISAM会整形默认以0填充 唯一约束(UNIQUE不允许列中的数据重复 createtabletestidintuniqueid; insertintotestvalues1; 默认约束defaultcreatetabletestidintnotnulldefault111111;insertintotestvalues; 主键约束pri__rykey是一个字段或一组字段(组合键),用于唯一标识表中的记录,它可以确保每个记录是唯一的 createtabletestidintpri__rykeyid; insertintotestvaluse1; id主键自增减 createtabletestidint,namevarchar
(20),pri__rykey(id); insertintotestvalues1张安; auto_increment的特点-------自增值当删除某一值时,他不会自动填充,而是继续自增1 createtabletestidintnotnullauto_incrementnamevarchar20pri__rykeyid; insertintotestnamevaluesxxx; 创建一个有合理约束的表 createtablepeopleidintnotnullauto_incrementnamevarchar20notnullageintnotnull___char2notnullpcodevarchar50telvarchar50e__ilvarchar50pri__rykeyid; insertintopeoplenameage___e__ilvalues张三,‘28’,‘男’,abc@
163.com; 查询出所有学生的档案信息 select*fromstudentschoolwherestudent.daih=school.id;或 select*fromstudentasaschoolasbwherea.daih=b.id; 查询所有学生档案信息只需显示学生姓名,年龄毕业学校,学校地址 selectstudent.namestudent.ageschool.nameschool.addressfromstudentschoolwherestudent.daih=school.id;或 selecta.namea.ageb.nameb.addressfromstudentasaschoolasbwherea.daih=b.id; 外键约束foreignkey 如何创建外键 foreignkey:定义子中的列为外键 referen__s:标记外键所要参考的父表和列 ondeletecascade:允许在删除父表的列的同时,删除子表的列//在InnoDB中支持 createdatebasefordb; usefordb; 创建父表 createtableschoolidintnotnullauto_incrementnamevarchar20pri__rykeyidengine=innodb; insertintoschoolnamevalues紫琅学院; 创建子表 createtablestudentidintnotnullauto_incrementnamevarchar20schoolidintpri__rykeyidforeignkeyschoolidreferen__sschoolidondeletecascade; insertintostudentnameschoolidvalues张三1; E-R模型 概述设计数据库时,通常采用实体关系模型“--E-R模型 软件__流程 需求调研(设计功能,收集数据) 与最终用户进行确定 数据库的设计 控制多余数据 那么在最后,数据库设计者确定表、不同表之间的关系以及每个表之间的关系,通常使用”E-R模型“,它将整个系统看作彼此相关的实体组成 实体通常用于表示能够被清晰识别的人、地点、事物、对象、__ 实体关系图如果需要基于‘E-R’模型建立数据库模型,需要标识实体,实体的属性、以及实体之间的关系那么通常用‘E-R’图来表示 实体之间的三种类型111N或N:1M:N 数据库设计员确定的实体被转换为表,而其属性则成为相应表中的字段(列) 如何控制冗余数据 一般来说通过数据库的范式理论 设计数据库的范式来控制冗余 共有五个范式,一般达到第三范式即可 第一范式对于表中的每一行,必须且仅仅有唯一的行值,在一行中的每一列仅有唯一的值并且具有原子性 第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成一旦创建,主键无法改变,外键关联一个表的主键主外键关联意味着一对多的关系 第三范式要求非主键列互不依赖 第四范式禁止主键列和非主键列一对多关系不受约束 第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余 MYSQL的聚合函数
1、最大值 找出EQ最高的学生 selectnameeqfromstudentwhereeq=select__x(EQ)fromstudent; SELECT__XarticleASarticleFROMshop;
2、最小值 找出EQ最低的学生 selectname,min(EQ)fromstudent; count()//统计查询出的记录总数
3、查询出学生的总条数 selectcount(name)fromstudent; __g()//求平均值
4、查询学生EQ的平均值 select__g(EQ)fromstudent; sum()//求和
5、查询学生EQ的总和 selectsum(EQ)fromstu; 修改字段类型 altertablestudentmodify___char
(5); 增加列 altertablestudentaddaddressvarchar
(50); 删除列 altertablestudentdropaddress; 修改列的名称 altertablestudentchangenamenamesvarchar
(20); 修改表的名字 renametablestudenttostu; MYSQL之表连接 内链接innerjoin又为等值连接,因为他将两个表中的公共字段有相等的值(记录)连接起来,这是最常用的连接一个表引用还被称为 查询显示订单编号,顾客姓名,物品名称 selectcases.iduser.namegoods.namefromcasesusergoodswherecases.user_id=user.idandcases.goods_id=goods.id;或 selectcases.iduser.namegoods.namefromcasesinnerjoinusergoodsonuser.id=cases.user_idandgoods.id=cases.goods_id;或 selectcases.iduser.namegoods.namefromcasesinnerjoinuseroncases.user_id=user.idinnerjoingoodsoncases.goods_id=goods.id;或 selectcases.iduser.namegoods.namefromuserinnerjoincasesinnerjoingoodsoncases.goods_id=goods.idonuser.id=cases.user_id; 左连接:显示sql语句中leftjoin左边表中的所有记录,即使在leftjoin右边的表中没有满足连接条件的数据也被显示当满足连接条件时,leftjoin右边的表中的相应的记录与leftjoin左边表中的相应记录结合显示 查询出学生的编号,学生姓名,学生学校 selectstudent.namestudent.idschool.namefromstudentleftjoinschoolonstudent.school_id=school.id; 右连接与左连接相对应,他显示sql语句中rightjoin右边表中的记录,即使在rightjoin左边没有的记录也被显示当满足条件时rightjoin左边表中相应记录将与rightjoin右边的表中相应记录进行结合显示通常左连接和右连接显示的内容是一样的 selectstudent.namestudent.idschool.namefromstudentrightjoinschoolonstudent.school_id=school.id; leftjoin以左边的表查询为主 rightjoin以右边的表查询为主 示例 studentleftjoinschool 那么student就为左表school就为由表 MYSQL之视图 视图它可以访问一个或多个表中的数据,是从一个或多个表中派生出的数据对象(虚表) 视图的特点
1、将复杂的查询简单化
2、提供安全机制,它保证用户只可以看得到的数据,系统中真实的表是不可被存取的(现都支持更改数据) 创建视图 createviewcase_viewasselectcases.idas订单编号user.nameas顾客姓名goods.nameas物品名称fromuserinnerjoincasesinnerjoingoodsoncases.goods_id=goods.idonuser.id=cases.user_id; 注意点 视图属于数据库,在默认情况下,将在当前数据库创建新视图要想在给定数据库中明确创建视图创建时,应将名称指定为 db_name.view_name mysqlcreateviewtest.vasselect*fromt; 视图必须具有唯一的列名,不得有重复,就像基表那样 修改视图:alterviewviewnameasSQL; 删除视图dropviewviewname; alterviewcase_viewasselectcases.idas编号user.nameas姓名goods.nameas名称fromuserinnerjoincasesinnerjoingoodsoncases.goods_id=goods.idonuser.id=cases.user_id; 数据字典 数据库的数据字典---实际上是一个数据库 它记录着数据库管理系统中的其他数据库的操作 mysql数据库字典infor__tion_sche__ useinfor__tion_sche__ select*fromviews; --------------------------- MYSQL的事务与引擎 --------------------------- 什么是事务(transaction) 所谓事务,它是一个操作序列这些操作要么都执行,要么都不执行,他是一个不可分割的工作单位 事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性 mysql表类型 在mysql中有多种表的类型,但是分为两类: 事务类型InnoDB、BDB 非事务类型MYISAM、MERGE、MEMORY(HEAP) InnoDB和BDB存储引擎提供事务安全表BDB被包含在__c支持它的操作系统发布的mysql-__x二制分发版里InnoDB也默认被包括在所有mysql
5.1二进制分发版里 InnoDB是为处理巨大数据量时的最大性能设计它的cpu效率可能是任何其他基于磁盘的关系数据库引擎所有不能匹敌的 MYISAM管理非事务表他提供高速存储和检索,以及全文搜索能力 ISAM数据表是mysql最原始的数据表,有三个文件,分别是 .frm,存放数据表的结构定义 .isd,数据文件,存放数据表中的各个数据行的内容 .i__索引文件,存放数据表的所有索引信息 MYISAM是数据表是ISAM数据表的继承者,也是三个文件,分别是 .frm结构定义文件; .MYD,数据文件; .MYI,索引文件 BDB数据表用两个文件来表示,分别是; .frm,结构定义文件 .DB,数据表数据和索引文件 INNODB:由于采用表空间的概念来管理数据表,所以他只有一个与数据表对应.frm文件,同一目录下的其他文件表示为空间,存储数据表的数据和索引 HEAP数据表是一个存在与内存中的表,所以他的数据和索引都存在于内存中,文件系统中只有一个.frm文件,及定义结构,当mysql关闭后数据都将消失 定义表的的类型 createtabletest(idint)engine=heap; 事务表币非事务表有几大优势 更安全即使mysql崩溃或遇到硬件问题,要么自动恢复,要么从备份加事务日志恢复,你可以取回数据 你可以合并许多语句,并用commit语句同时接受她们全部(如果autocommit被禁止掉) 你可以执行rollback来忽略你的改变(如果autocommit被禁止掉) 如果更新失败,你的所有改变都变回原来(用非事务安全表,所有发生的改变都是永久的) 事务安全存储引擎可以给那些当前用读得到许多更新的表提供更好的部署 非事务表自身有几大优点 非事务表自身有几大优点,因为没有事务开支,所有优点都能出现 更快 需要更更少的磁盘空间 执行更新需要更少的内存 你可以在同一个语句中合并事务安全和非事务安全表来获得两者最好的情况尽管如此,在autocommit被禁止掉的事务里,变换到非事务安全表依旧即使提交并且不会被回滚 如何在innodb中实现事务 begin://告知服务器我要开始一个事物 rollback://如果事务发生异常,那么数据回滚 commit://事务执行成功,进行数据提交 mysqlbegin; QueryOK0rowsaffected
0.00sec mysqlinsertintotest11values1zhangs; QueryOK1rowaffected
0.00sec mysqlselect*fromtest11; +------+--------+ |id|name| +------+--------+ |1|zhangs| +------+--------+ 1rowinset
0.00sec mysqlend; ERROR106442000:Youh__eanerrorinyourSQLsyntax;checkthe__nualthatcorrespondstoyourMySQLserver versionfortherightsyntaxtousenearendatline1 mysqlrollback; QueryOK0rowsaffected
0.00sec mysqlselect*fromtest11; Emptyset
0.00sec mysqlcommit; QueryOK0rowsaffected
0.00sec mysqlselect*fromtest11; Emptyset
0.00sec 修改表类型 sql语句altertabletablenameengine=innodb; 注意不可以将mysql系统表比如‘user’或‘host’转换成innodb类型系统表必须为myisam类型 对myisam进行事务处理---锁 locktabletablename(read,write) locktable可以对表进行加锁控制,以保证用户并发访问时非事务表的数据一致性 unlocktables释放锁 mysql之index(索引) 什么是索引? 索引被用来快速找出在一个列上用一特定值的行没有索引,mysql不得不首先以第一条记录开始并然后读完整个表直到他找出相关的行,表越大,花费时间越多如果表对于查询的列有一个索引,mysql能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据 索引的作用 快速找出匹配一个where子句的行 当执行连接时,从其他表检索行 对特定的索引列找出__x()或min()值 mysql中的索引 索引实际上是一个分离的列表,具有一个指向全表的指针 myisam表,索引被存储为分离文件 innodb,索引存储为表空间的一部分 mysql有四种类型的索引主键(pri__rykey)、唯一索引(unique)、全文索引(fullindex)、普通索引(index) 创建index
1、createindexindexnameontablename(columnname); indexname(索引名称) tablename(表名称) columnname(要创建索引的字段名称)
2、altertabletablenameaddindexindexname(columnname); 查看索引----showkeysfromtablename; 删除index--altertabletablenamedropindexindexname; fullindex(myisam支持) createtablechat(idint,chat1text,chat2text); createfulltextindexindex_textontablename(col1,col2); altertabletablenameaddfulltext(col1,col2); 高效使用索引 太多的索引,占用空间 每次进行插入或更新时,索引都必须针对变化 重新排序,会导致很多额外负担 何处使用索引?
1、where从句中条件匹配的行 selectnamefromstudentwherecommentlike“a%”; comment域的索引就起到了作用 Explain分析索引 语法explainselectagefromtest12; Explain分析mysql中的索引 table查询中涉及的表 type显示连接中使用了何种类型 const(最好),eq_ref,fef,range,index和allpossible_keys可能用到的索引 key实际使用的索引,可以在select语句中使用useindex(indexname)来强制使用索引,用ignoreindex(indexname)来强制忽略索引key_len使用的索引长度,越短越好; refreferen__s显示索引哪一列被使用了 rows mysql必须检查用来返请求数据的行数 extra usingtemporary(需要临时表来存储结果,通常发生在对不同的列集进行orderby),usigfilesort意即mysql根本不能使用索引 索引的算法btreebit__p 使用索引注意的事项;
1、合理创建索引,反之会降低数据库的查询效率,反之创建的索引会失去意义 mysql的备份方式backup、restore、copy//冷备份、mysqldump、selectinto backup备份myisam表的 示例 usetest; backuptablechattoc:\\db_backup; 只生成.frm和.myd可以在数据库恢复后重建索引 droptablechat; restoretablechatfromc:\\db_backup; copy备份
1、停止mysql服务器一避免在备份的时候有用户进行数据库的访问
1、__数据库的文件夹 用mysqldump备份 备份库
1、备份 #mysqldump-uroot-pdbname xxxname.sql 再打开查看(创建表备份的sql语句)
2、恢复 #mysql-uroot-pdbname 备份某个表
1、备份 #mysqldump-uroot-pdbnametablename xxxname.sql 再打开文件进行查看(创建表备份的sql语句)
2、恢复 #mysql-uroot-pdbname 用selectinto备份 备份mysqlselect*fromtablenameintooutfilec:\\db_backup\table.dat 删除表 mysqldeletefromtablename; 恢复 mysqlloaddatainfilec:\\db_backup\table.datintotabletablename; 作业
1、唯一索引
2、全文索引 要求理解她们的意思及用途,以及实验
3、selectinto备份 MYSQL其他客户端工具 查看数据库中有哪些数据库 mysqlshow-uroot-p 查看数据库中有哪些表 mysqlshow-uroot-pdbname 查看数据库中表的结构 mysqlshow-uroot-pdbnametablename mysqlcheck客户端可以检查和修复myisam表,他还可以优化和分析表
1、mysqlcheck-uroot-pdbname//检测
2、mysqlcheck-uroot-p--auto-repairdbname//如碰到有问题的表自动进行修复
3、mysqlcheck-uroot-p--optimize//优化表 MYSQL管理方式 连接方式----mysql-hlocalhost-uroot通过本地主机,以root用户访问,无需__验证 mysql-hlocalhost通过本地主机,匿名用户访问,无需__验证 设置__----mysqladmin 外部
1、修改__--mysqladminhlocalhost-uroot-ppasswordnewpassword
2、__为空--mysqladmin-hlocalhost-uroot-ppassword
3、设置root用户远程访问__--mysqladmin-hremote-uroot-ppassword 内部设置__
1、设置root用户本地登录__ setpasswordforroot@localhost=password000000;
2、设置root用户远程登录__ setpasswordforroot@remote=passwordnewpassword; 加密 mysqlusestart Databasechanged mysqlcreatetableusersusernamevarchar50passwordvarchar50; QueryOK0rowsaffected
0.16sec mysqlinsertintousersvaluesabcd123456; QueryOK1rowaffected
0.34sec mysqlinsertintousersvaluesabcdfgpassword123456; QueryOK1rowaffected
0.00sec mysqlselect*fromusers;selectuser,host,passwordformuser; +----------+-------------------------------------------+ |username|password| +----------+-------------------------------------------+ |abcd|123456| |abcdfg|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9| +----------+-------------------------------------------+ 2rowsinset
0.00sec 系统中的权限表 user表记录允许连接到服务器的用户帐号信息,里面的权限是全局级的 db表记录各个帐号在各个数据库上的操作权限 table_priv记录数据表级的操作权限 columns_priv记录数据列级的操作权限 host表配合db权限表对给定主机上数据库级操作权限作更细致的控制这个权限表不受grant和revoke语句的影响 ------------------------------------------------------------------------------------------------------------------------------------- 设置__---修改user表 直接修改user表 mysqlusemysql; mysqlupdateusersetpassword=passwordnewpasswordwhereuser=root; mysqlflushprivilegs;重新加载权限表,使修改立即生效 添加用户 mysqlusemysql mysqlinsertintouserhostuserpasswordvalueslocalhosttestpassword222222; mysqlflushprivileges; 授权grantallon*.*totest@localhostidentifiedby222222 grantselectonstus.*totest@localhostidentifiedby121212 grantprivileges(columns) privileges表示授予的权限,columns表示作用的列(可选) onwhat 设置权限级别全局级、数据库级、表级、列级 toaccount 权限授予的用户:用user_name@host_name这种用户名、主机名格式、identifiedbypassword设置__ privileges有哪些 alter修改表和索引 create创建数据库和表 delete删除表中以有的记录 drop删除数据库和表 inde创建和删除索引 insert向表中插入数据 select检索表中的数据、 update修改表中的记录 file读写服务器上的数据 pro__ss查看服务器中执行的线程信息或杀死线程 reload重载授权表或清空日志、主机缓存或表缓存 shutdown关闭服务器 all所有权限 revoke取消授权 mysqlrevokeprivilegescolumnsonwhat fromaccount; 注revoke可删除权限,但不能删除帐号,即使帐号已经没有任何权限所以user数据表里还会有该帐号的记录,要彻底删除帐号,需使用delete命令手工删除user表中的相关数据 示例 revokeallon*.*fromtest@localhost; deletefromuserwhereuser=test; 细节权限的分配与撤销 grantselectdeleteupdateonstudenttest.*toerich@localhostidentifiedbytest 运行结果是,erich用户只能通过‘test‘__从本机访问student,test数据库,并且没有insert权限 revokeselectdeleteupdateonstudent.*fromerich@localhost; 运行结果是,将erich用户在student数据库中的select,delete,update权限撤销。