mssql 如何初始 id

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mssql 如何初始 id相关的知识,希望对你有一定的参考价值。

把所有数据删除后 在增加数据的时候ID变成300多了 如何初始变成1
?如何初始变成1

2种解决办法

1.修改你的数据库表,将ID设为自增长,注:只有主键才可以设置为自增长
例:CREATE TABLE `message ` (`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);今后一起共勉!欢迎到CSDN,365testing,测评网看看THP。365testing.com。THP
参考技术A truncate tableName; 简单直接 参考技术B DBCC CHECKIDENT ('表名',Reseed,1)

用truncate table来清除数据也可以

如何将 MSSQL CTE 查询转换为 MySQL?

【中文标题】如何将 MSSQL CTE 查询转换为 MySQL?【英文标题】:How to transform a MSSQL CTE query to MySQL? 【发布时间】:2012-02-08 15:37:16 【问题描述】:

在我的 MySQL 架构中,我有 category(id, parentid, name)

在 MSSQL 中,我有 CTE 查询(为提供的类别 ID 自下而上构建类别树:

with CTE (id, pid, name) 
as
(
    select id, parentid as pid,name
    from category
    where id = 197
      union all
        select CTE.pid as id , category.parentid as pid, category.name
        from CTE 
          inner join category 
            on category.id = CTE.pid
 )
 select * from CTE 

如何将该查询“转换”为 MySQL?

【问题讨论】:

【参考方案1】:

很遗憾,MySQL 不支持 CTE(通用表表达式)。这是迟来的国际海事组织。通常,您可以只使用子查询,但这个特定的 CTE 是递归的:它在查询中引用自身。递归 CTE 对分层数据非常有用,但同样:MySql 根本不支持它们。您必须实现一个存储过程才能获得相同的结果。

我之前的回答应该提供了一个很好的起点:

Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)

【讨论】:

@f00,那么他们会实施它吗?或者答案是“从不”?【参考方案2】:

谢天谢地,它不再需要了,因为 MySQL 从 8.0.1 supports CTE 开始。

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review @Jonathan 但它确实回答了这个问题:) @KubaOber 你是对的 - 我可能应该将其标记为仅链接答案。你真的应该添加一些代码来解释它是如何工作的,而不仅仅是链接到一个网站。这样,它就不太可能被标记和否决。完成后,发表评论,我将收回我的评论。 事实上,我希望它现在应该“按原样”工作。如果在 MySQL 上运行该查询时还有其他问题,则应详细说明问题。【参考方案3】:

不幸的是 MYSQl 或 XAMPP(MARIADB) mysql 不支持 CTEs(COMMON TABLE EXPRESSIONS), 同样,您将不得不使用嵌套查询。

更多信息请点击以下链接:-

https://mariadb.com/kb/en/library/with/

【讨论】:

请在您的回答中包含来自链接站点的基本信息 - 链接不太可靠。【参考方案4】:

请检查您使用的 MySQL 版本SELECT VERSION(); 如果它是 8 或更高,您可以继续我的评论。 在 MySQL 8.0、MariaDB 10.2 及更高版本中,您可以使用递归 CTE:

WITH RECURSIVE CTE (id, pid, name) AS (
    select id, parentid as pid,name
from category
where id = 197
  union all
    select CTE.pid as id , category.parentid as pid, category.name
    from CTE 
      inner join category 
        on category.id = CTE.pid
)
select * from CTE ;

请注意,CTE 在 MySQL 中受 cte_max_recursion_depth(默认 1000,最大 4,294,967,295 (2³²−1))和 MariaDB 中 max_recursive_iterations(默认 4,294,967,295)的限制。

你可以通过执行来增加限制:

SET cte_max_recursion_depth = 4294967295;

它只会影响你当前的会话,不会被持久化。

【讨论】:

以上是关于mssql 如何初始 id的主要内容,如果未能解决你的问题,请参考以下文章

如何设置...在 mopub ios sdk 中初始化多个单元 ID

如何重新初始化 React 钩子

如何检查对象是不是已在 C++ 中初始化/创建?

openfire 初始密码

如何使用JPA GenerationType.AUTO提供初始值或增量ID

如何避免重复代码初始化 hashmap 的 hashmap?