【精粹系列】Mysql精粹
2016-09-29 17:09
302 查看
关于Mysql整理的需要记忆和熟练掌握的内容1.查询数据表的信息(比如有多少行数据):
showtablestatuslike'tab_User'--数据表中的数量2.使用explain查看sql运行效率时
1)通过'row'来查看扫描的行数
2)通过'key'来查看使用的索引
showtablestatuslike'tab_User'--数据表中的数量2.使用explain查看sql运行效率时
1)通过'row'来查看扫描的行数
2)通过'key'来查看使用的索引
1./*查看操作*/-------------------------------------------------------------------------------------------------------1./*查看操作*/
SHOWPROCESSLIST--显示哪些线程正在运行 SHOWVARIABLES--查看变量 2./*数据库操作*/------------------------------------------------------------------------------------------------------2./*数据库操作*/
--查看当前数据库 selectdatabase(); --显示当前时间、用户名、数据库版本 selectnow(),user(),version();
--复制表结构 CREATETABLE表名LIKE要复制的表名 --复制表结构和数据 CREATETABLE表名[AS]SELECT*FROM要复制的表名
3./*字符集编码*/---------------------------------------------------------------------------------------------------------3./*字符集编码*/ 字符编码 --MySQL、数据库、表、字段均可设置编码 --数据编码与客户端编码不需一致 SHOWVARIABLESLIKE'character_set_%'--查看所有字符集编码项 character_set_client客户端向服务器发送数据时使用的编码 character_set_results服务器端将结果返回给客户端所使用的编码 character_set_connection连接层编码 SET变量名=变量值 setcharacter_set_client=gbk; setcharacter_set_results=gbk; setcharacter_set_connection=gbk; SETNAMESGBK;--相当于完成以上三个设置 4./*数据类型(列类型)*/---------------------------------------------------------------------------------------------------4./*数据类型(列类型)*/
1)数值类型
int4字节 bigint8字节
int(M)M表示总位数 -默认存在符号位,unsigned属性修改 -显示宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,zerofill属性修改 例:int(5)插入一个数'123',补填后为'00123' -在满足要求的情况下,越小越好。 -1表示bool值真,0表示bool值假。MySQL没有布尔类型,通过整型0和1表示。常用tinyint(1)表示布尔型。
2)字符串类型 --a.char,varchar---------- char定长字符串,速度快,但浪费空间 varchar变长字符串,速度慢,但节省空间 M表示能存储的最大长度,此长度是字符数,非字节数。 不同的编码,所占用的空间不同。 char,最多255个字符,与编码无关。 varchar,最多65535字符,与编码有关。 一条有效记录最大不能超过65535个字节。 utf8最大为21844个字符,gbk最大为32766个字符,latin1最大为65532个字符 varchar是变长的,需要利用存储空间保存varchar的长度,如果数据小于255个字节,则采用一个字节来保存长度,反之需要两个字节来保存。 varchar的最大有效长度由最大行大小和使用的字符集确定。 最大有效长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来存放字符串的长度,所以有效长度是64432-1-2=65532字节。 例:若一个表定义为CREATETABLEtb(c1int,c2char(30),c3varchar(N))charset=utf8;问N的最大值是多少?答:(65535-1-2-4-30*3)/3
5./*建表规范*/------------------------------------------------------------------------------------------------------------------5./*建表规范*/ --NormalFormat,NF -每个表保存一个实体信息 -每个具有一个ID字段作为主键 -ID主键+原子表 --1NF,第一范式 字段不能再分,就满足第一范式。 --2NF,第二范式 满足第一范式的前提下,不能出现部分依赖。 消除符合主键就可以避免部分依赖。增加单列关键字。 --3NF,第三范式 满足第二范式的前提下,不能出现传递依赖。 某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。 将一个实体信息的数据放在一个表内实现。
6./*select查询语句*/--------------------------------------------------------------------------------------------------------6./*select查询语句*/
1)having子句,条件子句 与where功能、用法相同,执行时机不同。 where在开始时执行检测数据,对原数据进行过滤。 having对筛选出的结果再次进行过滤。 having字段必须是查询出来的,where字段必须是数据表存在的。 where不可以使用字段的别名,having可以。因为执行WHERE代码时,可能尚未确定列值。 where不可以使用合计函数。一般需用合计函数才会用having SQL标准要求HAVING必须引用GROUPBY子句中的列或用于合计函数中的列。
7./*备份与还原*/-------------------------------------------------------------------------------------------------------------7./*备份与还原*/ 备份,将数据的结构与表内数据保存起来。 利用mysqldump指令完成。 --导出 1)导出一张表 mysqldump-u用户名-p密码库名表名>文件名(D:/a.sql) 2)导出多张表 mysqldump-u用户名-p密码库名表1表2表3>文件名(D:/a.sql) 3)导出所有表 mysqldump-u用户名-p密码库名>文件名(D:/a.sql) 4)导出一个库 mysqldump-u用户名-p密码-B库名>文件名(D:/a.sql) 可以-w携带备份条件 --导入 1)在登录mysql的情况下: source备份文件 2)在不登录的情况下 mysql-u用户名-p密码库名<备份文
8./*锁表*/------------------------------------------------------------------------------------------------------------------8./*锁表*/ 表锁定只用于防止其它客户端进行不正当地读取和写入 MyISAM支持表锁,InnoDB支持行锁 --锁定 LOCKTABLEStbl_name[ASalias] --解锁 UNLOCKTABLES
9./*用户和权限管理*/--------------------------------------------------------------------------------------------------------9./*用户和权限管理*/
用户信息表:mysql.user --刷新权限 FLUSHPRIVILEGES --增加用户 CREATEUSER用户名IDENTIFIEDBY[PASSWORD]密码(字符串) -必须拥有mysql数据库的全局CREATEUSER权限,或拥有INSERT权限。 -只能创建用户,不能赋予权限。 -用户名,注意引号:如'user_name'@'192.168.1.1' -密码也需引号,纯数字密码也要加引号 -要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD --重命名用户 RENAMEUSERold_userTOnew_user --设置密码 SETPASSWORD=PASSWORD('密码')--为当前用户设置密码 SETPASSWORDFOR用户名=PASSWORD('密码')--为指定用户设置密码 --删除用户 DROPUSER用户名 --分配权限/添加用户 GRANT权限列表ON表名TO用户名[IDENTIFIEDBY[PASSWORD]'password'] -allprivileges表示所有权限 -*.*表示所有库的所有表 -库名.表名表示某库下面的某表 --查看权限 SHOWGRANTSFOR用户名 --查看当前用户权限 SHOWGRANTS;或SHOWGRANTSFORCURRENT_USER;或SHOWGRANTSFORCURRENT_USER(); --撤消权限 REVOKE权限列表ON表名FROM用户名 REVOKEALLPRIVILEGES,GRANTOPTIONFROM用户名--撤销所有权限 --权限层级 --要使用GRANT或REVOKE,您必须拥有GRANTOPTION权限,并且您必须用于您正在授予或撤销的权限。 全局层级:全局权限适用于一个给定服务器中的所有数据库,mysql.user GRANTALLON*.*和REVOKEALLON*.*只授予和撤销全局权限。 数据库层级:数据库权限适用于一个给定数据库中的所有目标,mysql.db,mysql.host GRANTALLONdb_name.*和REVOKEALLONdb_name.*只授予和撤销数据库权限。 表层级:表权限适用于一个给定表中的所有列,mysql.talbes_priv GRANTALLONdb_name.tbl_name和REVOKEALLONdb_name.tbl_name只授予和撤销表权限。 列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv 当使用REVOKE时,您必须指定与被授权列相同的列。
相关文章推荐
- mysql优化存储过程中批量插入的速度
- [MySQL] SQL_ERROR 1032解决办法
- 高性能MySQL学习笔记(3) —— 数据库事务
- mysql用触发器同步表
- Mysql order by语句未使用索引的思考
- mysql grant命令详解
- mysql 多值检索 find_in_set()函数
- Mac上安装MySQL记要
- mysql 性能优化方案
- MySQL的备份与还原
- MySQL的InnoDB和MyISAM区别
- JDBC 连接MySQL实例详解
- lnmp环境搭建——mysql部分
- MySQL查看和修改表的存储引擎
- MySQL函数总结
- MySql中的严格模式
- 如何利用报表工具FineReport实现报表列的动态展示
- MySQL删除重复记录只保留一条
- 查看MySQL的错误日志的方法
- mysql 时间相减