langhua9527 2009-04-22 13:26 采纳率: 0%
浏览 605
已采纳

mysql的问题,大家看一下嘛,谢谢

mysql方面的
第一题:一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15

第二题:还是MYSQL的,一张表有还是有ID自增主键,用JDBC insert一条语句之内,怎么在JAVA程序里面获得这条记录的ID.
[b]问题补充:[/b]

18,因为你没有把mysql归0

但是那个面试我的人告诉我是15啊。。
还有MYSQL怎么归0啊
[b]问题补充:[/b]
第一题,面试的人告诉我的说是15,还是这个是MYSQL的XX机制,还说MYSQL可能会才产XX数据的原因所在
[b]问题补充:[/b]

面试的人不一定技术都是很厉害的,我最烦的是那些SB从网络抄一题,自己都没有验证过,来考应聘人员。。。我是这么认为,这么多年来,经历那么多面试,真正懂技术没有几个,真正能够和他谈技术的,我的印象中仅一人。

哇,我去验证下嘛,是不是MYSQL版本的问题呢?有的版本就是15有的版本就是18呢。。。还有MYSQL是要重启的,重启了之后再INSERT
[b]问题补充:[/b]
人家是是把MYSQL重启啊,不是把表truncate t_test;
[b]问题补充:[/b]
谢谢大家。。。。
[b]问题补充:[/b]
wcily123大哥,我说了,删了数据之后,[color=red]MYSQL要重启啊。。。[/color]
[b]问题补充:[/b]
如果表的类型是MyISAM,那么是18。
因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。

如果表的类型是InnoDB,那么是15。
InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。
(防止因OPTIMIZE操作丢失最大ID的方法,我写了一篇博客,请参看http://ilgnep.iteye.com/blog/317343)

个人感觉,使用的InnoDB的多一些。

MyISAM表和InnoDB表怎么创建,怎么看表是InnoDB还是MyISAM

[b]问题补充:[/b]
[color=red]MyISAM表和InnoDB表怎么创建,怎么看表是InnoDB还是MyISAM [/color]
[b]问题补充:[/b]
晕了,去MYSQL官方看了一下,就一个表,就有这么多的类型啊。。。

[img]/upload/attachment/97387/25c4663f-77d0-3513-903c-3246d4cda874.jpg[/img]
。。。。。。
[b]问题补充:[/b]
http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html
[b]问题补充:[/b]
第一题:这个要看Mysql表的类型
我现在知道的有两种,一种是MyISAM,另一种是InnoDB
MYSQL默认的就是InnoDB
InnoDB是把表的主键最大值放到内存里面,所以MYSQL重启之后就会丢失(在WINDOW下,这是MYSQL默认的)
MyISAM是把表的主键最大值放到文件里面,所以MYSQL重启之后不会丢失

可以在创建表的时候显示指定
[code="sql"]create table t_test(id int not null auto_increment primary key,name varchar(255)) ENGINE=InnoDB;


create table t_test(id int not null auto_increment primary key,name varchar(255)) ENGINE=MyISAM;[/code]

还可以通过
[code="sql"]SHOW TABLE STATUS;[/code]命令可以看到表的类型

使用ALTER命令可以对单个表的类型进行修改
[code="sql"]ALTER TABLE talbe_name ENGINE=InnoDB; [/code]


[code="sql"]SHOW GLOBAL VARIABLES LIKE '%engine%';[/code]
可以看到MySQL当前默认的新生成表的类型。

第二题:
有两种方法,
1.JDBC有这个API,Statement.getGeneratedKeys();
2.可以利用MySQL语句获得,但这个就不是通用语句了:SELECT LAST_INSERT_ID();

以上是总结,大家看一看有什么问题没有,谢谢大家了,那个MySQL-Front 就算了嘛,我要的话我去网上搜一下就应该下载的到啥。。

感谢所有网友

在这里还要特别感谢:
huangnetian,hantsy,lovewhzlq,LucasLee,wcily123,秦朝古月等等
[b]问题补充:[/b]
http://langhua9527.iteye.com/blog/374113

  • 写回答

38条回答 默认 最新

  • 秦朝古月 2009-04-24 14:19
    关注

    如果表的类型是MyISAM,那么是18。
    因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失。

    如果表的类型是InnoDB,那么是15。
    InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。
    (防止因OPTIMIZE操作丢失最大ID的方法,我写了一篇博客,请参看http://ilgnep.iteye.com/blog/317343)

    个人感觉,使用的InnoDB的多一些。

    第二题,有点没有读懂题目。如果你能确保你INSERT的是最后一条(在查询之前没有再次INSERT),可以用'select * from talbe_name order by id desc limit 1;'来获得。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(37条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器