首页/应用软件/内容

mysql基础知识

应用软件2024-03-22 阅读()
[摘要]操作符的sql在MySql将无法执行,为了解决这个问题mysql提供了PIPES_AS_CONCAT模式、MySql分区MySql从5.1版本开始支持分区,分区是指按照一定的规则,数据库把一个表分解...
操作符的sql在MySql将无法执行,为了解决这个 问题mysql提供了PIPES_AS_CONCAT模式、

MySql分区

MySql从5.1版本开始支持分区,分区是指按照一定的规则,数据库把一个表分解成多个更小的,更容易管理的部分。就访问数据库的应用而言,逻辑上只有一个表或一个索引,但是实际上

这个表可能由数10个物理分区对象组成,每个分区都是一个独立的对象,可以独自处理,可以作为表的一部分进行处理。分区对应用而言是完全透明的,不影响应用的业务逻辑优点

分区有利于管理非常大的表,它采用 分而治之的逻辑,分区引入分区键的概念,分区键用于根据某个区间键,特定值列表或者HASH函数执行数据的聚集,让数据根据规则分布在不同的分区

中,让一个大对象变成一些小对象

show VARIABLES like '%partition%' 查看是否支持分区

Mysql支持大部分存储引起如MyISAM,INNODb,Memory等存储引擎,创建分区,在5.1版本中,同一个分区表的所以分区必须使用同一个存储引擎;
在同要给表上,不能对一个分区使用MyISAM引擎和Innodb引擎,但是在同一个MySQL服务器服务器上,甚至同一个数据库中,对于不同的分区表使用不同的存储引擎

分区类型

range分区

CREATE TABLE emp(
    id int not null,
    ename varchar(30),
    hired date not null DEFAULT '1970-01-01',
    separated date NOT null DEFAULT '9999-12-21',
    job varchar(30) not null,
    store_id int not null
)
partition by range(store_id)(
    PARTITION p0 VALUES less than (10),
    PARTITION p1 VALUES less than (20),
    PARTITION p2 VALUES less than (30)
);
//上述的分区方案将storid,1-9分到p0区,10-19分到p1区,等如果插入大于30,会出现错误,因为没有规则保护大于30的

INSERT into emp VALUES('2322','milk','1993-12-23','1993-12-23','click',19);//可以

//Table has no partition for value 40
INSERT into emp VALUES('2322','milk','1993-12-23','1993-12-23','click',40);

添加分区
alter  table emp add partition(partition p3 values less than maxvalue);
maxvalue表示最大的可能的整数值

mysql 支持在values less than 语句中加入表达式
比如以日期作为分区
CREATE TABLE emp(
    id int not null,
    ename varchar(30),
    hired date not null DEFAULT '1970-01-01',
    separated date NOT null DEFAULT '9999-12-21',
    job varchar(30) not null,
    store_id int not null
)
partition by range(year(separated ))(
    PARTITION p0 VALUES less than (1995),
    PARTITION p1 VALUES less than (2000),
    PARTITION p2 VALUES less than (2005)
);
MySQl 5.5改进了range分区给你,通过支持非整数分区,创建日期分区就不需要通过函数进行转换
partition by range(separated )(
    PARTITION p0 VALUES less than ('1996-01-01'),
    PARTITION p1 VALUES less than ('2001-01-01'),
    PARTITION p2 VALUES less than ('2006-01-01')
);

List分区

create table expenses(
  expense_date date not null,
  category int,
  amount decimal(10,3)
)partition by list (category)(
   partition p0 values in(3,5),
   partition p1 values in(1,10),
   partition p2 values in(4,9),
   partition p3 values in(2),
   partition p4 values in(6)
)

LIST分区不存在类似于VALUES LESS THAN MAXVALUE这样的值 在MYSQL5.5支持非整数分区

Columns分区

create table rc3(a int,b int)
parition by range columns(a,b)(
 parition p01 values less than(0,10),
 parition p01 values less than(10,10),
 parition p01 values less than(10,20),
 parition p01 values less than(maxvalue,maxvalue)
)

Hash分区

create table emp(id int not null.ename varchar(30),hired date not null default '1907-01-01',sparated date null null default '8888-12-31',job varchar(30) not null,
store_id int not null) partition by hash(store_id)partitions 4;

这里创建了一个常规的hash 使用 partition by hash(expr)其中expr是某列值或一个整数值的表达式返回值。 partition num 对分区类型,分区键,分区个数进行定义,上述基于
store_id列hash分区,表被分为4个分区

我们可以计算出它被保存在哪个分区中假设,假设记录的分区编号为N,那么N=MOD(expr,num),例如emp表中有4个分区,插入一个store_id为234的 mod(234,4)=2,倍保存在第二个
分区

相关推荐:

关于mysql 基础知识的总结

PHP 和 MySQL 基础教程(一)

PHP 和 MySQL 基础教程(二)

PHP 和 MySQL 基础教程(三)

PHP 和 MySQL 基础教程(四)


以上就是mysql基础知识 的详细内容,更多请关注php中文网其它相关文章!


学习教程快速掌握从入门到精通的SQL知识。



第1页  第2页  第3页  第4页  第5页  第6页  第7页  第8页 

……

相关阅读