当前位置:文档之家› 传智 韩忠康 mysql 课程笔记5(吐血整理)

传智 韩忠康 mysql 课程笔记5(吐血整理)

昨天作业2013年4月20日星期六09:56class as h on m.host_id =h.id left joinselect2013年4月20日星期六10:06生成的文件格式:默认的,采用行来区分记录,而采用制表符,来区分字段。

为了满足某种特别的需求,会采用不同的分割方式。

支持,在导出数据时,设置记录,与字段的分割符。

通过如下的选项:fields:设置字段选项Lines: 设置行选项(记录选项)先看默认值:字段:fields terminated by '\t' enclosed by '' escaped by '\\‘记录:lines terminated by '\n' starting by ''可以自己设定:select * into outfile 'e:/amp/three'fields terminated by ','lines terminated by '\n' starting by 'start:'from teacher_class where t_name = '韩信';字段包裹select * into outfile 'e:/amp/four'fields terminated by '\t' enclosed by 'x'lines terminated by '\n' starting by 'start:'from teacher_class where t_name = '韩信';注意:常规的,所有的记录,应该通过行来显示例外是保存二进制数据:Blob binary使用into dumpfileselect * into dumpfile 'e:/amp/six' from teacher_class where t_name = '韩信' limit 1;新增数据Insert&replace&load data2013年4月20日星期六10:37Insert 插入Insert into tbl_name (字段列表)values (值列表)可以不将所有的字段都插入数据。

如果说需要完成部分字段的插入,需要必须存在字段列表,没有插入的字段,使用默认值:如果是插入部分字段,可以使用下面的set语句:用value的值列表语法,可以一次性插入多条数据:每条数据采用记录构造符括号完成即可:插入数据时,如果主键冲突会如何?默认有主键约束,不会插入成功但是可以在insert语法内,控制在主键冲突时,改成执行更新操作内部业务逻辑:注:Update 后不跟set。

插入的数据源:除了使用自定义数据外,还可以是使用select 语句查询到数据,作为插入的数据源。

数据可以来源于其他数据表,要求字段数量和类型一致即可:insert into teacher_class (t_name, c_name) select t_name, class_name from teacher; 通过强制使用default关键字,或者default()函数,使用默认值;Replace主键或唯一索引冲突,则替换;否则插入。

Load data infile "file" into table tbl_name;导入 select * into outfile 'file'命令导出的内容上面两个命令互补。

注意:导入时,涉及到数据增加,需要考虑,是否冲突的情况。

通常,可以在导出时,将主键导出成null。

利用自动增长的特性。

可以形成新的主键:同样:在导入数据时,需要同样指定数据的分割,起止符号等。

保证导出数据的格式与导入数据需要的格式是一致的即可删除数据2013年4月20日星期六11:41Delete允许使用条件(删除符合条件的数据)允许使用limit :限制删除的记录数。

limit N;常见的是limit 配合order by来使用:先将结果排序,再删除固定数量的记录。

允许连接删除:清空表:Truncate类似:delete from table;Truncate:1,不会返回删除的记录数。

2,重建自动增长的主键。

Delete:逐行删除。

truncate:删除表,再新建表。

更新数据2013年4月20日星期六12:05replace,insert on duplicate key update Update支持where、order by、limit备份还原2013年4月20日星期六14:04方案1:适用于mysiam表直接将tbl_name.frm、Tbl_name.myd、Tbl_name.myi三个文件,压缩另保存一个备份即可。

需要的时候,直接解压到移动到相应的数据库目录内即可注意,如果是同样的方法,处理的innodb表结构的文件,则使用show tables时,也可以看到,但是不能使用的。

所以本方案不适合innodb表!方案2:通用的方案思路是:将建表结构,与插入数据的sql语句生成并保存,下次如果需要该结构和数据直接将数据语句执行即可。

利用mysql提供的工具完成的,不是sql语言的一部分。

不需要在mysql命令行客户端执行,直接运行即可。

备份php_one数据库:将备份的数据库还原:就是将刚刚生成的sql语句,在mysql客户端执行即可。

如何执行保存在文件内的sql语句:使用source 指令,可以指定需要执行sql语句的源代码文件:常用的备份操作:1,备份整个数据内的表:mysql dump -uroot -p db_name > bak.sql2,备份数据库内的某张表:mysqldump -uroot -p php_one teacher_class > e:/php_one_teacher_class.sqlmysqldump -uroot -p php_one teacher_class tbl_name1 tbl_name2 tbl_name3 >e:/php_one_teacher_class.sql视图2013年4月20日星期六14:37创建视图:Create view view_name as select_statement;视图就是一个存在与数据库中的虚拟表了,对这个虚拟表的操作会内部同步到真实表上:注:视图,本身没有数据,只是通过执行相应的select语句完成获得相应的数据,相当于执行以下操作注:视图,主要是针对查询操作为生的。

视图管理删除视图:Drop view [if exists] view_name;修改视图:Alter view view_name as select_statement;修改视图内所使用的字段的名称:视图名称后面,使用(字段列表即可)缩减业务逻辑:通过视图还可以使复杂的业务逻辑简单的完成,先使用视图完成一定的逻辑,在在视图的基础上,完成另外的逻辑。

通常,视图完成的逻辑,都是相对来说比较基础的逻辑。

create view join_info as select tc.id as tc_id, t_name, c_name, days from join_teacher_class as tc left join join_teacher as t on tc.t_id=t.id left join join_class as c on tc.c_id=c.id;select * from join_info;视图的执行过程/算法:存在两种执行算法:1,merge2,temptable指的是一个视图是在什么时候执行,依据哪些方式执行:merge:合并的执行方式,每当执行的时候,现将我们视图的sql语句与外部查询视图的sql 语句,混合在一起,最终执行Temptable:临时表模式,每当查询的时候,将视图所使用select语句生成一个结果的临时表,再在当前的临时表内进行查询。

当用户创建视图时,mysql默认使用一种undefine的处理算法:就是会自动在合并和临时表内进行选择。

事务2013年4月20日星期六16:05一组sql语句操作单元。

组内所有sql语句完成一个业务。

如果整组成功:意味着全部sql都实现.如果其中任何一个失败,意味着整个操作都失败。

失败,意味着整个过程都是没有意义的。

应该是数据库回到操作前的初始状态。

上面的特性,就是事务。

如何处理?1,失败后,可以回到开始位置2,没都成功之前,别的用户(进程,会话)是不能看到操作内的数据修改的。

思路:就是在一组操作之间,设计一个记号,备份点。

实现:利用innodb存储引擎的,事务日志功能:执行语句:自动提交存在一个系统的变量,auto commit 可以对自动提交进行配置关闭自动提交:set autocommit=0;关闭后,再次执行相应的更新语句:发现,在其他连接中,查看数据,没有发生变化,因为结果没有提交。

提交或回滚在此基础上,执行完所有的sql语句。

判断是否都成功(出现错误,包括语法错误,和逻辑错误服务器错误)。

成:将结果提交。

利用commit;败:回到开始位置。

利用Rollback;常见的事务的指令:开启事务/关闭自动提交Start transaction; 可以使用begin。

如果事务结束(敲击了commit或rollback)了,成或败,都会将自动将提交机制回到初始时的状态。

初始状态一般是开启了自动提交/关闭事务。

限定:在innodb、DBD下生效事务的特点:ACID1,原子性。

Atomicity 2,一致性。

Consistency 3,隔离性。

Isolation 4,持久性。

Durability触发器2013年4月20日星期六18:24注意:1,触发器不能同名。

2,目前mysql只支持一类事件设置一个触发器。

管理触发器:删除:Drop trigger trigger_name;查看:Show create trigger trigger_name;在触发器内,获得触发该触发程序时的数据:利用触发程序内的new 和old来完成;Old:监听事件所在表上的数据,在事件发生之前时的数据。

旧的数据。

New:监听表上,事件发生之后,新处理完毕的数据。

数据,就是触发该事件的记录。

事件是insert呢?不能使用old 事件是delete呢?不能使用newPHP操作数据库准备工作2013年4月26日星期五17:27解决的问题:1,mysql服务器,开放接口,允许其他语言操作。

相关主题