您的位置:首页 > 数据库 > MySQL

mysql 之 sql管理数据 二

2017-06-21 00:00 260 查看
1、创建一个指定 存储引擎 的表

create table mytb1(....) engine = memory;

create table mytb1(....) engine = innodb;

> 查看 某张表 使用 何种 存储引擎

mysql> show create table tt;
+-------+----------------------------------------
-------------------------------------------------
---+
| Table | Create Table

|
+-------+----------------------------------------
-------------------------------------------------
---+
| tt    | CREATE TABLE `tt` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------

也可以 通过: show table status; 来查看.

> 改变某个表的 存储引擎

mysql> alter table tt engine = innodb;
Query OK, 0 rows affected (0.21 sec)
Records: 0  Duplicates: 0  Warnings: 0

> 创建一个表的 2种 规范式 示例:

## 如果不存在,则创建
mysql> create table if not exists hh(
id int primary key auto_increment,
name varchar(20)) engine = innodb;
Query OK, 0 rows affected (0.14 sec)

## 如果存在,删除,再创建
drop table if exists tt;
create table tt(
id int primary key auto_increment,
name varchar(20)
) engine = innodb;

2、创建一个新数据表作为原始数据表的一份空白副本

mysql> create table tt like hh;
Query OK, 0 rows affected (0.09 sec)

新表将 会同原表的结构丝毫不差,所有的数据列、索引等都会 复制过来.-- 复制的是表结构,并无数据.

3、创建一个新数据表 复制 原始表部分数据

mysql> create table tt select * from hh;
Query OK, 1 row affected (0.15 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> create table tt select * from hh where id > 10;
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

新表 只是 取 原始表 部分 相同的数据,新表 和 原始表 数据结构 并不一定 相同;

作用:可以用新表来 容纳一次 查询的 结果.

4、merge 操作

merge 存储引擎 把一组 MyISAM 数据表 当做一个逻辑单元对待,方便查询;每一个Merge 数据表的各成员 MyISAM 数据表 必须具有 完全一样的结构。

create table log_2017(dt datetime not null,
info varchar(100) not null,
describ varchar(20))engine=myisam;

create table log_2017(dt datetime not null,
info varchar(100) not null,
describ varchar(20))engine=myisam;

create table log_merge(dt datetime not null,
info varchar(100) not null,
describ varchar(20))engine=merge union=(log_2016,log_2017);

最后 log_merge 将 会有 log_2016 和 log_2017 表 2个表 综合起来的 数据.

> merge 修改操作

mysql> alter table log_merge union = (log_2016,log_2017);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

> merge 存储引擎说明

MERGE数据表可以用来创建一个尺寸超过各个MyISAM数据表所允许的最大长度逻辑单元,修改后要通过FLUSH TABLES刷新表缓存,此法可以动态增加减少子表;MERGE只能用 MyISAM 数据表来构成.

5、分区表

同 MerGe 很相似,但是分区数据表可以使用 MyISAM以外的存储引擎,并且是 一个货真价实的数据表。

mysql>  create table log_partition(
->  dt datetime not null,
->  info varchar(100),
->  index(dt))
->  partition by range(year(dt))
->  (partition p0 values less than(2016),
->   partition p1 values less than(2017),
->   partition p2 values less than maxvalue);
Query OK, 0 rows affected (0.51 sec)

说明:> 表的分区指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。用户所选择的、实现数据分割的规则被称为分区函数,这在MySQL中它可以是模数,或者是简单的匹配一个连续的数值区间或数值列表,或者是一个内部HASH函数,或一个线性HASH函数。

> 使用场景:某张表的数据量非常大,通过索引已经不能很好的解决查询性能的问题;表的数据可以按照某种条件进行分类,以致于在查询的时候性能得到很大的提升;

> 优点:

[b] >>> [/b]对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。

>>> 一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。

>>> 涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这意味着查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。

>>> 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。

6、删除数据表

> drop table db_name;
drop table db_name1,db_name2;
drop table if exists db_name1;

7、修改某个表的 存储引擎

mysql> alter table hh engine=innodb;
Query OK, 1 row affected (0.34 sec)
Records: 1  Duplicates: 0  Warnings: 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql 管理