发表于: 2017-10-27 15:17:15
1 657
今天完成的事情:
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等。
收获:更多的了解数据方面的知识,为以后独立开发项目做基础
评论