扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
2种办法
创新互联服务项目包括东平网站建设、东平网站制作、东平网页制作以及东平网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,东平网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到东平省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
1.修改你的数据库表,将ID设为自增长,注:只有主键才可以设置为自增长
id自增是由mysql负责的,设置id AUTO_INCREMENT 插入时不用插入id值就能实现自增CREATE TABLE `table ` (`id` INT(8) NOT NULL AUTO_INCREMENT, PRIMARY KEY(`id`));
2.代码中进行处理
Statement ps;
ResultSet rs;
int id = 0;
..................
String sql="select max(id) as id from message";
rs = ps.executeQuery(sql);//查询出最大ID
if(rs.next){//如果有ID,原有ID+1
id = rs.getInt("id")+1;
}else{//否则 ID 初始为0
id = 0;
}
//下面接你写的代码就OK了
PreparedStatement ps;
String sql="insert message (id,name,msg) value(?,?,?)"
ps.setString(1,id);
ps.setString(2,name);
ps.setString(3,msg);
例如,数据表t_toy_user表中有字段user_id(主键),user_name,desc三个字段,则查询从10到100的记录如下:
access数据库和sqlserver数据库:
select
user_id,user_name,desc
from
(select
top
100
user_id,user_name,desc,row_number()
over(order
by
user_id)
as
rowindex
from
t_toy_user)
t
where
t.rowindex=10
oracle数据库:
select
user_id,user_name,desc
from
(select
user_id,user_name,desc,row_number()
over(order
by
user_id)
as
rowindex
from
t_toy_user
where
rownum=100)
t
where
t.rowindex=10
以上若有疑问,可以hi我~
数据库的自增就是存在这种情况,如果不想要自增,你就每次判断最大值,然后插入当前值加1,出现不连续的情况,你就要去判断,要再次插入缺失的ID,这个比较浪费资源,
我猜测,你只所以烦恼出现这个不连续的ID号,是因为你显示的出来的列表出现不连接,你编号使用的是ID,你可以用页数和每页显示的条数来控制编号,这样就不存在ID的问题了
很多时候数据库中表的主键都是自增id,
而在连续插入数据时,需要前一条的自增id时候,可以使用PHP中的
mysql_insert_id();函数
如果我的回答没能帮助您,请继续追问。
您也可以向我们团队发出请求,
一般数据库所谓的自增列都是通过序列来完成。创建序列的语句为
CREATE SEQUENCE name
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
或者MAXVALUE xxxxx
NOCYCLE -- 一直累加,不循环
所以极限就看你自己怎么定义了。长度的话,引用序列的字段可以定为number类型,int类型等数字类型就可以了。
这个看情况了,首先看看是不是有使用自增列的必要,如果有必要前期要有预见性,对于可能会出现溢出的情况,则尽量使用bigint类型,当然这个要多占用存储空间。如果删除操作比较规则,比如会定期删除较早的数据,那么可以在id即将溢出的时候重置种子,从头开始自增,如果不能循环使用id值得话只能在即将溢出的时候修改表,用更大的数据类型来作为自增列的类型,这个过程因为涉及大量的数据更新插入操作,速度会很慢,通常尽量避免。如果id快溢出了,最好新建一个表来存储新增的数据。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流