将oracle获取自增主键换成mysql自增主键需要如何修改

将oracle获取自增主键换成mysql自增主键需要如何修改,第1张

请先给出明确答复:oracle

自增是用sequence,mysql用AUTO_INCREMENT

如:

CREATE TABLE IF NOT EXISTS `runoob_tbl`(

`runoob_id` INT UNSIGNED AUTO_INCREMENT,

`runoob_title` VARCHAR(100) NOT NULL,

`runoob_author` VARCHAR(40) NOT NULL,

`submission_date` DATE,

PRIMARY KEY ( `runoob_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;

解释原因:

AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

PRIMARY

KEY关键字用于定义列为主键。

您可以使用多列来定义主键,列间以逗号分隔。

数据库修改mysql的字符集:在安装mysql50时可以设置好mysql的字符集,一般使用utf8的字符集1查看建立表“tablename”的sql语句Show create table tablename;//查看建立表“tablename”的sql语句| maos_mail_batch | CREATE TABLE `maos_mail_batch` (`ID` varchar(32) character set latin1 NOT NULL,`BATCH_TIME` varchar(30) character set latin1 NOT NULL,`BATCH_INTRODUCE` varchar(2000) character set latin1 default NULL,`BATCH_SUM` int(11) default NULL,`BATCH_STATE` varchar(1) character set latin1 default NULL,PRIMARY KEY (`ID`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 |2修改数据库和表的字符集alter database maildb default character set utf8;//修改数据库的字符集alter table mailtable default character set utf8;//修改表的字符集如果您想要把表默认的字符集和所有字符列(CHAR, VARCHAR, TEXT)改为新的字符集,应使用如下语句:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;警告:前面的 *** 作转换了字符集之间的列类型。如果您有一列使用一种字符集(如latin1),但是存储的值实际上使用了其它的字符集(如utf8),这种情况不是您想要的。此时,您必须对这样的列进行以下 *** 作。ALTER TABLE t1 CHANGE c1 c1 BLOB;ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;这种方法能够实现此功能的原因是,当您转换到BLOB列或从BLOB列转换过来时,并没有发生转换。3 mysql的主键问题:Mysql的两种主键。Primary key 和not null auto_incriment在建立mysql表时,给一个字段添加了主键primary key 在insert数据时可以不用insert主键,mysql会自动添加0,但是在第二次insert时没有填写值mysql数据库还是默认添加0,会导致有重复的主键,这是不可以的。所有在定义了primary key时,在insert数据时要给主键填写值。在建立mysql表时,给一个字段添加了主键not null auto_increment=1;这也是一个主键。时自增长的以1为开始。这个字段是可以不用填写值的,mysql数据库会自动给填写值,不会出现primary key的状况。Alter table tb add primary key(id);Alter table tb change id id int(10) not null auto_increment=1;4 删除自增长的主键id先删除自增长在删除主键Alter table tb change id id int(10);//删除自增长Alter table tb drop primary key;//删除主建

1 SELECT MAX(id) FROM tablename;

2 LAST_INSERT_ID() 函数

LAST_INSERT_ID 是与table无关的,与你最近一个插入数据的表有关。如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

在多用户交替插入数据的情况下MAX(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update *** 作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。

使用单条INSERT语句插入多条记录, LAST_INSERT_ID返回的是列表中插入的第一条记录的id。

3 SELECT @@IDENTITY;

@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。

比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。它也是基于connection的,每个线程独立使用的。使用@@identity的前提是在进行insert *** 作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。

4 SHOW TABLE STATUS where name ="tablename";

得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值。根据表自增列设置的自增量,以这个值减去自增量,就是当前该表数据记录的最大自增ID。

它也是基于connection的,每个线程独立使用的。

假如你所说的2是最后一条数据,那么可以这样做:用 Max(id)获取"最大的id";

执行ALTER TABLE tbl AUTO_INCREMENT = 最大的id + 1;

然后继续插入数据,id就会如你所想的是连续的数列;

如果你所指的Id不是最后一条,而是数列中间的一个数,那么你要插入数据时,可以循环对比找出不连续的Id,如上修改AUTO_INCREMENT,然后插入数据,并且将AUTO_INCREMENT修改为最大ID。

对于第一种情况,个人认为可以修改,并且性能影响不大,对已第二种情况,由于每次插入都要首先循环找出合适的位置,如果数据量大的情况下效率比较低,你可以根据自己情况进行选择;

如有你问请留言;

你第一次执行insert后,再立刻执行一条“select last_insert_id() as aa",这个aa就是你insert的id值。

这个语句是针对当前线程的,如果别人也insert了内容,互相不会干扰。

可以安全的使用。

只能有一个自增的列,而且一般来说该列都是主键,你要不就是没将auto_increment的字段设为主键,要不就是设了不止一个auto_increment字段

每个表里只能有这样的一个字段,不能有多个希望有帮助。dodofun可到CSDN,365testing逛逛

以上就是关于将oracle获取自增主键换成mysql自增主键需要如何修改全部的内容,包括:将oracle获取自增主键换成mysql自增主键需要如何修改、mysql的设置主键自增的问题、mysql batchinsert怎么获取主键id等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10147253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存