Mysql 我是否能够在没有自动递增数字列的情况下执行基于数字的操作?
假设在数据库表中,我决定使用某种类型的字符串作为主键,因为在某些情况下,每个记录的主键都是唯一的。(Imgur图片、Youtube视频、Reddit帖子,甚至可能是堆栈溢出问题,等等) 然而,在这种情况下,我宁愿避免使用自动递增的数字字段 它是否阻止我采取以下行动:Mysql 我是否能够在没有自动递增数字列的情况下执行基于数字的操作?,mysql,database,relational-database,sql-order-by,primary-key,Mysql,Database,Relational Database,Sql Order By,Primary Key,假设在数据库表中,我决定使用某种类型的字符串作为主键,因为在某些情况下,每个记录的主键都是唯一的。(Imgur图片、Youtube视频、Reddit帖子,甚至可能是堆栈溢出问题,等等) 然而,在这种情况下,我宁愿避免使用自动递增的数字字段 它是否阻止我采取以下行动: 选择表格的前200行 选择表中的30行,其中某一列的内容等于给定值 tl;dr:如果没有orderby,LIMIT子句可以自由选择随机行 选择有限数量的表行非常简单 SELECT something FROM sometabl
- 选择表格的前200行
- 选择表中的30行,其中某一列的内容等于给定值
- tl;dr:如果没有
orderby
,LIMIT
子句可以自由选择随机行
选择有限数量的表行非常简单
SELECT something FROM sometable WHERE condition LIMIT 200
您面临的问题是:SQL没有任何内置的行顺序概念。此查询将从表中提供200行,但从形式上讲,实际提供的行是不可预测的
如果发出相同的查询,大多数SQL实现(MySQL和其他服务器)都会给出相同的200行,但这并不能保证。如果您依赖同样的行行为,那么当服务器决定更改它提供给您的行时,您可能会遇到严重的问题。这可能在版本升级时发生。如果您的表不断增长,并且服务器的查询计划器提出了一种新的方法来检索更大集合的子集,也可能发生这种情况
因此,如果您想如您所写的那样,以可预测的方式“选择表的前200行”,那么您需要有某种方法来定义顺序。自动递增id是实现这一点的一种方法,但您已经排除了这一点。也许你有一个insert_date
列,而“first”表示“最老的”。你可以这样做
SELECT something FROM sometable WHERE condition ORDER BY insert_date LIMIT 200
如果经验表明它是首选的,并且问题比优点少,那么我会添加一个自动递增的id列,如果不必要,我会避免它。自动
id
列是获取主键和排序的好方法。如果您需要将此表加入到其他表中,它也很方便(性能方面)。除非有充分的理由,否则在您所表示的真实数据中,最好省略id
列。