导出select语句结果到excel文件等,聚簇索引和非聚簇索引的认识

聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。

一、导出数据外部

1.事务

在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。

1)mysql连接+将查询结果输出到文件。在命令行中执行(windows的cmd命令行,mac的终端)

在sql  servce 中 事务是一个工作单元
可能包含查询和修改数据以及修改数据定义等多个活动
也可以显示或隐式定义事务边界

因此,MYSQL中不同的数据存储引擎对聚簇索引的支持不同就很好解释了。下面,我们可以看一下MYSQL中MYISAM和INNODB两种引擎的索引结构

mysql -hxx -uxx -pxx -e "query statement" db > file 

显示定义事务 BEGIN TRAN 开始  如果要提交事务 使用 COMMIT TRAN 
 撤销事务(回滚) ROLLBACK TRAN  如下示例

 

  -h:后面跟的是链接的host(主机)

BEGIN TRAN;
INSERT INTO Sales.Orders
      (custid, empid, orderdate, requireddate, shippeddate, 
       shipperid, freight, shipname, shipaddress, shipcity,
       shippostalcode, shipcountry)
    VALUES
      (85, 5, '20090212', '20090301', '20090216',
       3, 32.38, N'Ship to 85-B', N'6789 rue de l''Abbaye', N'Reims',
       N'10345', N'France');
commit tran

myisam的索引存储图如下,可以看出,无论是id还是cat_id,下面都存储有执行物理地址的值。通过主键索引或者次索引来查询数据的时候,都是先查找到物理位置,然后再到物理位置上去寻找数据。

  -u:后面跟的是用户名

一个简单的显示事务    也可以是隐式事务

图片 1

  -p:后面跟的是密码

GO
 INSERT INTO Sales.Orders
      (custid, empid, orderdate, requireddate, shippeddate, 
       shipperid, freight, shipname, shipaddress, shipcity,
       shippostalcode, shipcountry)
    VALUES
      (85, 5, '20090212', '20090301', '20090216',
       3, 32.38, N'Ship to 85-B', N'6789 rue de l''Abbaye', N'Reims',
       N'10345', N'France');
GO

 

  db:你要查询的数据库

通过GO 在当前批执行完成时自动 提交事务   当然默认情况下SQL Server
将每个单独的语句作为一个事务 每个语句结束后SQL Server 会自动提交事务
也可通过设置会话来改变默认设置 

innodb的索引存储图如下,我们会发现,主键索引下面直接存储有数据,而次索引下,存储的是主键的id。通过主键查找数据的时候,就会很快查找到数据,但是通过次索引查找数据的时候,需要先查找到对应的主键id,然后才能查找到对应的数据。

  file:你要写入的文件,绝对路径

SET IMPLICIT_TRANSACTIONS ON

图片 2

例如:

设置为ON 后不需要指定BEGIN TRAN 语句开始事务 但必须以COMMIT TRAN或
TOLLBACK TRAN 标记结束

 

  下面将 sql语句 select * from edu_iclass_areas
的查询结果输出到了 /Users/zhengcanrui/WORK/test/test.xls 这个文件中。

事务有4个属性-原子性,一致性,隔离性,持续性 首字母缩写为ACID

nnodb的主索引文件上
直接存放该行数据,称为聚簇索引,次索引指向对主键的引用
myisam中, 主索引和次索引,都指向物理行(磁盘位置).

mysql -h127.0.0.1 -uroot -p123 -e "select * from edu_iclass_areas" test > /Users/zhengcanrui/WORK/test/test.xls

原子性(Atomicity)**:
事务是一个原子工作单元,事务中的所有修改要么提交,要么撤销。在事务提交指令记录到事务日志之前
如果系统出现了故障,重新启动时,SQL Server 会撤销所做的修改。 
如果事务中出现错误 默认会自动回滚   也可以通过 @@TRANCOUNT
检测事务事务完成 或者说是 当前环境是否在事务中 如果在就返回 1 没有就是0 

注意: innodb来说, 
1: 主键索引 既存储索引值,又在叶子中存储行的数据
2: 如果没有主键, 则会Unique key做主键 
3: 如果没有unique,则系统生成一个内部的rowid做主键.
4:
像innodb中,主键的索引结构中,既存储了主键值,又存储了行数据,这种结构称为”聚簇索引”

2)mysql连接 和 将查询结果输出到数据库分开执行

SELECT    @@TRANCOUNT
mysql -hxxx -uxx -pxx 

select * from table into outfile 'xxx.txt'; 

一致性(Consistency):指数据状态, 在隔离级别中  每个级别都要是
一致性级别 只有事务保持一致性级别才能访问。在约束中 也指 主外键
书屋会转换数据库的一致性状态到另一个一致性状态 保持一致性

  -h/-u/-p 的参数都没的内容和上面一致, xxx.txt
 是要输出的文件路径及其名称。

隔离性(Isolation):隔离是一种控制访问数据的机制,确保事务所范围数据是在其所期望的一致性级别中的数据。在SQL
Server
中支持两种不同的模式来处理隔离:基于锁的传统模式和行版本控制(新模式)
但是默认的是 锁模式  而且当前加锁也是共享锁 ,如果数据状态不一致
读取数据就会被阻止 直到状态一致 。而改成行版本控制模式 读取就不需要等待
也不会加共享锁 在不需要及时显示的数据时 这种模式是提高并发的处理方式。
具体实现要看使用的隔离级别。

如:

持续性(Durability):数据修改在写入到数据库磁盘之前,总是先写入数据库的事务日志磁盘。提交后,指令记录在事务日志磁盘上,在尚未修改磁盘数据之前,事务是持续的,回滚也只是删除事务日志的所有修改记录。

网站地图xml地图