没有序列和触发器,没有简单的方法可以做到这一点吗?我有平均的SQL技能,我想使用pl/sql(PostgreSQL)的行业标准方法.我基本上是从Spring Security转换这个示例表:
create table group_members (
id bigint generated by default as identity(start with 0) primary key,
username varchar(50) not null,
group_id bigint not null,
constraint fk_group_members_group foreign key(group_id) references groups(id));
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的:
CREATE TABLE auth_group_members (
id NUMBER,
username VARCHAR(50) NOT NULL,
group_id NUMBER NOT NULL,
CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id)
);
Run Code Online (Sandbox Code Playgroud) 我试图通过它的MongoID"_id"字段在mongoDB中找到一条记录.我找到了如何做到的例子,但无法让它发挥作用.例:
$recID = "010101010101011"; //would be a valid mongodb _id
$recID = new MongoId((string)$recID); // I have tried it without the (string) cast too
$cursor = $this->Collection->findOne(array('_id' => $recID));
print_r($cursor);
Run Code Online (Sandbox Code Playgroud)
它输出:
MongoCursor (
)
Run Code Online (Sandbox Code Playgroud)
里面没什么.
我已经通过将上面的"_id"更改为不同的字段(例如"firstName")并传入第一个名称来验证其他所有工作,然后我返回有效数据.
为什么这不起作用?
我甚至尝试用$ recID作为字符串进行搜索,没有区别.
这是从mongo shell发生的事情(虽然我不确定我是否正确查询):
>
> db.Employee.find({login:"myperson"})
{ "_explicitType" : "project.Employee", "_id" : ObjectId("4e209564203d83940f0000
06"), "active" : true, "addedDate" : "07/15/2011 15:29:21", "domain" : "xxx",
"id" : ObjectId("4e209564203d83940f000006"), "lastLogin" : "07/20/2011 19:13:36
", "login" : "myperson", "name" : "My Person", "pw" : "", …Run Code Online (Sandbox Code Playgroud) 运行了很长时间后,我在id字段中得到越来越多的漏洞.一些表的id是int32,id序列达到了它的最大值.一些Java源代码是只读的,因此我不能简单地将id列类型更改为int32to long,这会破坏API.
我想重新编号.这可能不是一个好的做法,但好或坏并不关心这个问题.我想重新编号,特别是那些很长的ID,如"61789238","548273826529524324".我不知道它们为什么这么长,但更短的ID也更容易手动处理.
但由于引用和约束,手动压缩ID并不容易.
PostgreSQL本身是否支持ID重新编号?或者是否有任何插件或维护工具?
也许我可以写一些存储过程?那将是非常好的,所以我可以每年安排一次.
我正在使用C#中的一个对象,我需要对象的每个实例都有一个唯一的id.我对此的解决方案只是放置一个成员变量,我在类中和我将拥有的构造函数中调用idCount:
objectID = idCount;
idCount++;
Run Code Online (Sandbox Code Playgroud)
我认为这可以解决我的问题,但似乎idCount永远不会增加,即使构造函数被多次调用.例如,如果idCount = 1,则所有对象的objectID仍为1.为什么idCount ++不起作用?
任何帮助,将不胜感激.抱歉,如果我的解释不充分,我不确定如何解释它.
我想在mysql innodb表Auto_Increment列中插入值.
我正在将旧表中的一些数据加载到具有标识的新表中,并且需要保留旧表中的现有值,因此我需要保留现有Id值,但保留列Auto_Increment中的新值.
在MS T-SQL中,我将启动我的insert查询脚本SET SET IDENTITY_INSERT MyTable ON并结束查询SET SET IDENTITY_INSERT MyTable OFF.
我怎样才能在MySQL中做同样的事情?
假设我有一个简单的表格:
create table foo
{
id INTEGER PRIMARY KEY AUTOINCREMENT,
bar INTEGER
}
Run Code Online (Sandbox Code Playgroud)
我想插入一个新行,id == bar以便id数据库选择值,即自动增量.
像这样的东西:
INSERT INTO foo (id, bar) VALUES (NULL, id)
Run Code Online (Sandbox Code Playgroud)
有可能在一个声明中这样做吗?
那个SQL语法是什么?
我需要在现有表中添加自动增量ID.我做了:
ALTER TABLE table_name ADD column_name INT NOT NULL AUTO_INCREMENT FIRST ,
ADD PRIMARY KEY (column_name)
Run Code Online (Sandbox Code Playgroud)
但是,自动编号不是基于任何特定的列顺序.我希望mysql根据某列的顺序巧妙地输入自动数字.可能吗?
大多数答案都告诉您如何添加自动增量字段,而不是如何在现有表中控制这些数字.
假设我有桌子:
CREATE TABLE test (
ID INT AUTO_INCREMENT PRIMARY KEY,
InsertTime DATETIME
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
并且,通过Apache/PHP网站,作为对Web请求的响应,我继续这样做:
INSERT INTO test (InsertTime) values (NOW());
Run Code Online (Sandbox Code Playgroud)
如果row1.ID > row2.ID那么假设是否安全row1.InsertTime >= row2.InsertTime?或者也许是通过一些不幸的因素组合(复制环境中的多CPU服务器与正确对齐的木星卫星等),这可能会失败?
注意:我没有任何问题.我正在写一个新的软件,我想知道我是否可以依靠排序ID依次按日期排序(NOW()甚至只会插入该列).
我最近遇到了一个问题,我需要能够获取我在页面上插入的查询的最后一个ID.这个过程很简单,但我想对这个过程是如何完成的.以下是我的代码:
$query30 = $db->query("INSERT `mybb_quickexample` SET `player1` = '".$row19[username]."', `player2` = '".$row18[username]."', `games` = '".$numberofgames."'")or die( mysqli_error());
Run Code Online (Sandbox Code Playgroud)
如您所见,我刚刚在mybb_quickexample中插入了一些内容,然后生成一个ID.现在在它下面的代码中,我尝试找到ID.
$mmid = $db->insert_id();
foreach($_POST['optiontitle'] as $val){
$val = $db->escape_string($val); //
echo $val;
$query30 = $db->query("INSERT `mybb_quickexample2` SET `gid` = '".$id."', `mid` = '".$mmid."', `optiontitle` = 'OPTION TITLE', `option1` = '$val'")or die( mysqli_error());
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它抓取最近的ID并将其放入新表中.当我需要时,允许这两个表在以后相互对应.
但是,insert_last_id是否会抓取插入数据库的最后一行或者插入页面上数据库的最后一行?现在我不完全确定这背后的机制,但我问这个因为,如果一个人在与另一个人相同的时间加载这个页面怎么办?是否有无与伦比的ID抓取或代码仍然有效?
我有这个模型:
class Invoice(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL)
data = models.TextField(default=None, blank=True, null=True)
number = models.PositiveIntegerField(default=0, null=False)
Run Code Online (Sandbox Code Playgroud)
我需要的是number为每个分离的用户自动增加字段。基本原理是每个用户都有一个Invoice从number=1到的列表number=latest.number+1。
我确实了解F()表达式,但无法弄清楚如何number为每个特定用户引用最新/最好的。也许Invoice.objects.filter(owner=request.user).aggregate(Max('number'))是路径,但是我如何确保Max()和 之间没有竞争条件F()?
auto-increment ×10
mysql ×4
php ×2
postgresql ×2
c# ×1
constructor ×1
django ×1
field ×1
find ×1
identifier ×1
identity ×1
insert ×1
model ×1
mongodb ×1
one-to-many ×1
sql ×1
sqlite ×1