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

Mysql 基础知识

2014-12-15 14:55 218 查看
create temporary haha 将创建一个临时的数据表,当与服务器的连接断开时自动消失

每个客户只能看到它自己创建的数据表,所以不同的客户可以各自创建一个名字相同的TEMPORARY数据表而不会发生冲突

当含有名字相同的数据表和临时数据表时,原来的数据表会被临时数据表覆盖,暂时隐藏起来了,删除临时表时,原来的表就会出现了

mysql从其他数据表或查询结果创建数据表,提供了两条语句:

create table ... like 为数据表创建一份空白副本,会把数据结果丝毫不差的复制过来,所有属性都会保留,连索引都会复制的一模一样

新数据表没有数据需要使用insert into ... select填充,

create table ... select不会复制原始表的结构和索引等信息,将原始表的一个子集创建一个新数据表

使用MERGE数据表,把一组MyISAM数据表当做一个逻辑单元来对待,各个成员必须具有完全一样的结构,每个成员数据表

具有同样的顺序,同样的名字,同样的类型,索引也必须相同,适用于例如:日志表

假设当前日志集合包括log_2004,log_2005,log_2006,而可以创建一个MERGE来归拢为一个逻辑单元

create table log_merge (dt datetime not null, info varchar(100) not null, index(dt)) engine=merge union = (log_2004,log_2005,log_2006)

不但是原始数据表,连用myisampack工具压缩的数据表也可以拿来使用。

使用分区数据表:也就是数据表的存储可以分布在多个设备上,这意味着我们可以通过建立某种I/O并行机制缩短访问时间

优化器可以把检索操作限定在某个特定的分区或是同时搜索多个分区,创建一个分区数据表的时候,在create table语句里给出数据列和索引的清单

然后使用partition by子句定义一个用来把数据分配到各个分区的分区函数,再写出其他必须的分区选项即可,

例如上面的日志集合,我决定根据年份把数据分配到一个给定的分区

create table log_partition (dt datetime not null , info varchar(100) not null, index(dt)) partition by range(year(dt))(partition p0 values less then(2009),partition p1 values less

then maxvalue

默认情况下,分区保存在分区数据表所属于的数据库的子目录里,若要分配到另外一个物理设备,需要使用DATA_DIRECTORY和INDEX_DIRECTORY分区选项

使用FEDERATED数据表,该存储引擎可以让你访问在其他主机上由另一个MySQL服务器实际管理的数据表,

在本地服务器创建一个FEDERATED数据表必须使用同样的定义,还必须把ENGINE选项设置为FEDERATED,在通过CONNECTION进行设置

create table federated_student (name varchar(20) not null, student_id int unsigned not null auto_increment, primary key (student_id)) ENGINE=FEDERATED

CONNECTION = 'mysql = user_name[:password]@host_name[:port_num]/db_name/tbl_name'

本地的insert , update, delete操作的办法去改变那个远程student数据表的内容

InnoDB数据表可以被转换为使用另一种存储引擎,不过,如果你的InnoDB数据表定义了外键约束条件,那些约束条件在转换后将不复存在

因为只有InnoDB才支持外键

Alter table tab_name rename to new_tab_name 更改表名

获取数据库的元数据:1,各种show操作. 2,information_schema数据库里的数据表. 3.命令行程序,如mysqldump或mysqlshow

1.show create database db_name 查询创建指定数据库的语句

show index from tbl_name 查询数据表里的索引信息

describe tbl_name 和 explain tbl_name 语句是show columns from tbl_name语句的同义语句

2.从information_schema数据库获取元数据, 具有优于各种show语句的可移植性,可以把这个数据库里的数据表是一些由不同的数据库

元数据构成的视图,想知道information_schema包含的表,可以使用show tables命令,show tables in information_schema

包括 schema,tables,views,存储过程,触发器,数据库里的事件,数据表分区,数据列的信息

查看的方式是:select * from information_schema.tbl_name

3.命令行获取元数据,和show命令差不多,mysqlshow db_name,等等

事务处理:当执行每一条SQL语句时都会自动对该语句所涉及的资源进行锁定以避免各语句之间相互干扰

事务机制可以防止在多客户环境里可能发生的并发问题

mysql中使用START TRANSACTION语句开始一次事务,往数据表里面添加一些数据行,最后提交本次事务

START TRANSACTION;

insert into t set name='william';

insert into t set name= 'Wallace';

commit; select * from t;这样就能看到了

如果设置事务的SET autocommit = 0 将禁用自动提交模式,SET autocommit = 1 启用自动提交

InnoDB存储引擎提供了外键,支持级联操作,

CONSTRAINT语句,这个子句用来给外键约束关系起一个名字,如果省略InnDB存储引擎将创建一个名字

FOREIGN KEY子句,列出子表里被索引数据列,他们必须匹配父表里的索引值,

REFERENCES子句,父表中的索引名字 

ON DELETE子句,用来设定父表里的数据行被删除时,子表发生什么事,没有ON DELETE子句,默认行为是

拒绝从父表里删除仍有子表数据行的引用他们的数据行,明确一种action值,则会出现以下结果:

ON DELETE CASCADE 级联删除

ON DELETE NULL 将子表中的行设置为null值

ON UPDATE子句和上面的ON DELETE差不多含义, ON UPDATE CASCADE 级联修改

序号:最后生成序号值可以通过调用 LAST_INSERT_ID()函数获得,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mysql 基础知识