Mysql精粹系列(精粹)_Mysql

关于Mysql整理的需要记忆和熟练掌握的内容

1. /* 查看操作 */ ------------------------------------------------------------------------------------------------------- 1. /* 查看操作 */

SHOW PROCESSLIST -- 显示哪些线程正在运行
SHOW VARIABLES -- 查看变量

2. /* 数据库操作 */ ------------------------------------------------------------------------------------------------------ 2. /* 数据库操作 */

-- 查看当前数据库
select database();
-- 显示当前时间、用户名、数据库版本
select now(), user(), version();
-- 复制表结构
CREATE TABLE 表名 LIKE 要复制的表名
-- 复制表结构和数据
CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名

3. /* 字符集编码 */ --------------------------------------------------------------------------------------------------------- 3. /* 字符集编码 */

字符编码
-- MySQL、数据库、表、字段均可设置编码
-- 数据编码与客户端编码不需一致
SHOW VARIABLES LIKE 'character_set_%' -- 查看所有字符集编码项
character_set_client 客户端向服务器发送数据时使用的编码
character_set_results 服务器端将结果返回给客户端所使用的编码
character_set_connection 连接层编码
SET 变量名 = 变量值
set character_set_client = gbk;
set character_set_results = gbk;
set character_set_connection = gbk;
SET NAMES GBK; -- 相当于完成以上三个设置

4./* 数据类型(列类型) */ ---------------------------------------------------------------------------------------------------4. /* 数据类型(列类型) */

1) 数值类型
  int 4字节
bigint 8字节
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字节。
例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 问N的最大值是多少? 答:(65535-1-2-4-30*3)/3

5./* 建表规范 */ ------------------------------------------------------------------------------------------------------------------ 5./* 建表规范 */

-- Normal Format, NF
- 每个表保存一个实体信息
- 每个具有一个ID字段作为主键
- ID主键 + 原子表
-- 1NF, 第一范式
字段不能再分,就满足第一范式。
-- 2NF, 第二范式
满足第一范式的前提下,不能出现部分依赖。
消除符合主键就可以避免部分依赖。增加单列关键字。
-- 3NF, 第三范式
满足第二范式的前提下,不能出现传递依赖。
某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。
将一个实体信息的数据放在一个表内实现。

6./* select 查询语句*/ -------------------------------------------------------------------------------------------------------- 6./* select 查询语句*/

1) having 子句,条件子句
与 where 功能、用法相同,执行时机不同。
where 在开始时执行检测数据,对原数据进行过滤。
having 对筛选出的结果再次进行过滤。
having 字段必须是查询出来的,where 字段必须是数据表存在的。
where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。
where 不可以使用合计函数。一般需用合计函数才会用 having
SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。

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 支持行锁
-- 锁定
LOCK TABLES tbl_name [AS alias]
-- 解锁
UNLOCK TABLES

9./* 用户和权限管理 */ -------------------------------------------------------------------------------------------------------- 9./* 用户和权限管理 */

用户信息表:mysql.user
-- 刷新权限
FLUSH PRIVILEGES
-- 增加用户
CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 密码(字符串)
- 必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。
- 只能创建用户,不能赋予权限。
- 用户名,注意引号:如 'user_name'@'192.168.1.1'
- 密码也需引号,纯数字密码也要加引号
- 要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD
-- 重命名用户
RENAME USER old_user TO new_user
-- 设置密码
SET PASSWORD = PASSWORD('密码') -- 为当前用户设置密码
SET PASSWORD FOR 用户名 = PASSWORD('密码') -- 为指定用户设置密码
-- 删除用户
DROP USER 用户名
-- 分配权限/添加用户
GRANT 权限列表 ON 表名 TO 用户名 [IDENTIFIED BY [PASSWORD] 'password']
- all privileges 表示所有权限
- *.* 表示所有库的所有表
- 库名.表名 表示某库下面的某表
-- 查看权限
SHOW GRANTS FOR 用户名
-- 查看当前用户权限
SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();
-- 撤消权限
REVOKE 权限列表 ON 表名 FROM 用户名
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户名 -- 撤销所有权限
-- 权限层级
-- 要使用GRANT或REVOKE,您必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。
全局层级:全局权限适用于一个给定服务器中的所有数据库,mysql.user
GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤销全局权限。
数据库层级:数据库权限适用于一个给定数据库中的所有目标,mysql.db, mysql.host
GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。
表层级:表权限适用于一个给定表中的所有列,mysql.talbes_priv
GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。
列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv
当使用REVOKE时,您必须指定与被授权列相同的列。

以上所述是小编给大家介绍的Mysql精粹系列(精粹),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mysql
精粹
mysql技术精粹 pdf、mysql技术精粹、mysql技术精粹 下载、自然堂雪域精粹系列、美肤宝汉方精粹系列,以便于您获取更多的相关知识。

时间: 2024-10-30 01:37:28

Mysql精粹系列(精粹)_Mysql的相关文章

Mysql入门系列:客户机程序5—MYSQL交互式查询程序

6.7 客户机程序5-交互式查询程序 让我们把迄今为止研究的诸多内容整理一下,编写一个简单的交互式客户机程序.它的功能包括可以进入查询,用通用目标查询处理程序process_query 执行查询,并用前面研究过的显示格式process_result_set() 显示查询结果. 客户机程序5在某些方面与mysql类似,虽然在几个特征上还是有所不同.客户机程序5在输入上有几个约束条件: ■ 每个输入行必须包括一个完整的查询. ■ 查询不会以分号或' g'为终止. ■ 不识别类似quit 的命令:而是

MySQL学习系列2--MySQL执行计划分析EXPLAIN

原文:MySQL学习系列2--MySQL执行计划分析EXPLAIN 1.Explain语法 EXPLAIN SELECT -- 变体:   EXPLAIN EXTENDED SELECT -- 将执行计划"反编译"成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句   2.执行计划分析和实例 创建员工表Employee create table Employee ( ID int auto_increment, Ename varchar(32

MySQL OOM 系列三 摆脱MySQL被Kill的厄运_Mysql

前面两章,我们分析了Linux内存分配的策略以及Linux通过使用 OOM_Killer的机制解决了"超售"引起的风险,MySQL同其他的应用程序一样,在操作系统允许的范围内也是可以超售的,一般人理解,Innodb_buffer_pool必须小于实际物理内存,否则MySQL会启动失败.其实这是一个误区,这个不是MySQL层控制的,这个是操作系统(OS)层控制的,就是前面提到的/proc/sys/overcommit_memory控制OS是否允许"超售".如果允许&q

MySQL OOM 系列一 Linux内存分配_Mysql

RDS(网易云关系数据库服务)上线已经有一段时间,陆续不断有产品迁入到了RDS中,在线上运维的过程中,也遇到了一些曾经没有考虑到,或者考虑的不全的东西.后续有时间可以分享给大家. 今天想提到的是线上一个4G的RDS实例,发生了OOM(out of memory)的问题,MySQL进程被直接Kill掉了.在解释这个问题的时候,我们首先需要从Linux系统内存分配策略讲起.     一般写C语言程序,我们习惯使用malloc动态的申请内存空间(Java由JVM负责内存管理),malloc函数会向操作

mysql优化系列 DELETE子查询改写优化_Mysql

1.问题描述 朋友遇到一个怪事,一个用子查询的DELETE,执行效率非常低.把DELETE改成SELECT后执行起来却很快,百思不得其解. 下面就是这个用了子查询的DELETE了: [yejr@imysql.com]mydb > EXPLAIN delete from trade_info where id in ( select id from ( select a.id from trade_info a, order_info b, user c where b.buyer = c.id

MySQL锁系列(二)之 锁解读

背景 锁系列第一期的时候介绍的锁,我们要如何去解读呢? 在哪里能够看到这些锁? 锁信息解读 工欲善其事必先利其器show engine innodb status 关于锁的信息是最详细的 案例一(有索引的情况) 前期准备 dba:lc_3> dba:lc_3> dba:lc_3> show create table a; +-------+---------------------------------------------------------------------------

找到一种不错的从SQLServer转成Mysql数据库的方法_Mysql

年初的时候一直在做一个网站MSSQL2000 -> MySQL5的迁移工作,因为采用了不同的程序系统,所以主要问题在数据的迁移.由于2个系统数据库结构差异非常大,不方便采取SQL SERVER里导入MYSQL的ODBC数据源的功能(也不推荐这么做,字段类型等不同点会搞死人的-),因此就在WINDOWS下自己写PHP脚本从SQLSERVER里读数据,然后按照新系统的需要处理之后插入MYSQL里面,灵活也比较方便.实际过程主要有下面几个问题: 1.数据库的连接,主要是连接SQL SERVER.主要有

MySQL架构系列文章 目录

MySQL架构 - MySQL存储引擎 -小结 MySQL架构 - MySQL存储引擎 -选择合适的引擎 MySQL架构 - MySQL存储引擎 - 其他存储引擎 MySQL架构 - MySQL存储引擎 -实践的例子 MySQL架构 - MySQL存储引擎 -表的转换 MySQL架构 - MySQL存储引擎 -MyISAM MySQL架构 - MySQL存储引擎 -InnoDB MySQL架构 - MySQL 存储引擎 MySQL架构 - 事务处理 MySQL架构 - 多版本并发控制 MySQL

MySQL查询优化系列讲座之调度和锁定

    前面的部分主要是聚焦于如何让单独的查询执行的速度更快.MySQL还允许你改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间.改变优先级还可以确保特定类型的查询被处理得更快.这一部分讲解MySQL的默认的调度策略和可以用来影响这些策略的选项.它还谈到了并发性插入操作的使用和存储引擎锁定层次对客户端的并发性的影响.为了讨论的方便,我们把执行检索(SELECT)的客户端称为"读取者",把执行修改操作(DELETE.INSERT.R