繁体   English   中英

我的数据库表没有排序

[英]My database table is not ordered

有时,当我在数据库中的表中插入新行时,它会出现在最后一行之前。

我会解释。 如果我有下表:

ID Name
1 James
2 Terry
3. Miriam
4. Arthur

我想用“Danny”插入一个新行,有时会发生这种情况:

ID Name
1 James
2 Terry
3. Miriam
5. Danny
4. Arthur

我的代码在 99% 的情况下都有效,但有时它会发生。 我不知道该怎么办? 这是正常的吗?

我与 ASP.NET、VB.NET、.NET 3.5 和 Z62A004B95946BB97541AFAAZ471DCCA73 上的数据库一起使用。 我已经看到它也发生在 Access 和 SQL 服务器中。

这是我的代码:

  ' insert to user_table
    Dim connString As String = ConfigurationManager.ConnectionStrings("mysql_ConnString").ConnectionString
    Dim conn As MySqlConnection = New MySqlConnection(connString)
    Dim sqlCommand As String

    sqlCommand = "INSERT INTO user_table (Nickname,Email,Pass,SubscriptionMode,SignupDate,LastVisitDate,VisitCounter) VALUES (@Nickname,@Email,@Pass,@SubscriptionMode,@SignupDate,@LastVisitDate,@VisitCounter)"

    Dim cmd As New MySqlCommand(sqlCommand, conn)

    Try
        conn.Open()
        cmd.Parameters.AddWithValue("@Nickname", txtNickname.Text)
        cmd.Parameters.AddWithValue("@Email", txtEmail.Text)
        cmd.Parameters.AddWithValue("@Pass", password)
        cmd.Parameters.AddWithValue("@SubscriptionMode", 1)
        cmd.Parameters.AddWithValue("@SignupDate", Date.Now)
        cmd.Parameters.AddWithValue("@LastVisitDate", Date.Now)
        cmd.Parameters.AddWithValue("@VisitCounter", 0)
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        GlobalFunction.sendToLog(ex, "problem in create profile page - sub: insertUser_table")
        GlobalFunction.jsMessage(Me, "problem in create profile page - sub: insertUser_table")
        Return False
    Finally
        conn.Close()
    End Try

一般来说,当你这样做

select * from Users

你不能依赖记录的顺序。 如果您需要按特定顺序记录记录,则必须明确指定order by子句

select * from Users order by ID

MySql 是一个关系数据库管理系统,这意味着它基于关系 model。 表(表示关系)的行的物理顺序并不重要。 您必须将表视为无序集。 如果要按特定顺序显示数据,则必须使用 order by 子句。

我认为如果您使用 InnoDB,您可以使用聚集索引来指定行的顺序。

纠正您的问题:我的数据库表未排序

您的数据库表排序,但您的 select 语句排序。
而且因为这不是你没有得到有序结果的原因。
您得到的结果是未定义的顺序!

如果您想要一个有序的结果,您必须始终在查询中指定和order by子句。

将 ID 设为主键并将其编入索引。 无论您新输入的行是什么,都将是最后一行。 对于选择使用上面关于订购的建议。

正如 Bala R 所说,你不能让 SQL 确定你想如何组织你的数据,所以你想做这样的事情:

SELECT * FROM Users ORDER BY id ASC

例如:(1,2,3,4,5)

或这个:

SELECT * FROM Users ORDER BY id DESC

例如:(5,4,3,2,1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM