发表于: 2017-10-27 15:17:15

1 658


今天完成的事情:

1.了解 InnoDB引擎:创建数据库表的时候,要选择引擎,查看了一下以前的表设置的都是 InnoDB,然后就百度了一下,发现InnoDB是支持事物操作的,也就是以后如果需要事物操作的话,引擎就要选择InnoDB。以下是做的测试:

图1建表引擎是InnoDB,

图2建表引擎是MyISAM(不支持事物直接提交)。

BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认。

图1执行后进行事物回滚操作,查询后没有保存数据。图2则相反无法回滚,直接保存。

2.学习数据库索引

2.1索引对插入效率的影响:

同时插入10万条数据:表1 姓名和时间建了索引 执行耗时  4min46 sec表2 未建索引耗时 4.043 sec;索引对存储效率有影响并不是索引建的越多越好,会影响插入修改效率。

2.2 使用 like '%',not in 查询时不会使用索引查询。

 

明天计划的事情:

1.创建maven项目并写一个小demo。

2.编写DAO,分别JdbcTemplate和Mybatis连接数据库。

遇到的问题:

创建存储过程,执行时陷入死循环,这是存储过程代码

DELIMITER ;; 

CREATE PROCEDURE test_insert1() 

BEGIN 

DECLARE y TINYINT DEFAULT 1;

WHILE y<200

DO

insert into sys_user1(login_name) values(y); 

SET y=y+1; 

END WHILE ; 

commit; 

END;; 

执行了几次根本停不下来,后来查看一下保存的数据发现,大部分login_name的值都是127,突然想到了数据库字段 TINYINT 的取值范围


mysql字段默认是有符号的,所以最大值为127,直接就是死循环了。

解决方法


DELIMITER ;; 

CREATE PROCEDURE test_insert1() 

BEGIN 

DECLARE y TINYINT UNSIGNED  DEFAULT 1;

WHILE y<200

DO

insert into sys_user1(login_name) values(y); 

SET y=y+1; 

END WHILE ; 

commit; 

END;; 

TINYINT 后面加入 UNSIGNED  (无符号) 此时范围就是0,255 完全满足,或者换成SMALLINT ,INT,MEDIUMINT等。


收获:更多的了解数据方面的知识,为以后独立开发项目做基础


返回列表 返回列表
评论

    分享到