【Qt 专栏】sqlite INT关键字与AUTOINCREMENT关键字的冲突
INTEGER。有符号整数,存储在1、2、3、4、6或8个字节中,可以设置主键自增. int 或者 INT不能设置主键自增。
也就是说:
有了 autoincrement 的加持,在添加记录的时候,就不用给这个属性专门设置输入框了。
代码如下:
/*
* @func:regBtn的SLOT函数
* @detail:
*/
void RegisterWin::on_regBtn_clicked()
{
//1. 得到faceid,将相应的图片保存在当下的目录
//2. 得到其他属性,作为一条记录,插入到表格当中
QSqlTableModel model;
model.setTable("employee");
QSqlRecord rcd = model.record();
//epy_id 不需要自己设置
rcd.setValue("face_id", ui->faceidEdit->text().toInt());
rcd.setValue("name",ui->nameEdit->text());
rcd.setValue("sex", (ui->mRbtn->isChecked())?"男":"女");
rcd.setValue("part", ui->partBox->currentText());
rcd.setValue("phone", ui->phoneEdit->text());
bool ret = model.insertRecord(0,rcd);//0代表第0行
if(ret)
{
QMessageBox::information(this, "注册提示","注册成功");
//提交
model.submitAll();
}
else
{
QMessageBox::information(this, "注册提示","注册失败");
}
}
测试结果:可见epyid已经自动设置好了。
autoincrement 字段详细介绍
我们通常希望在每次插入新记录时自动创建主键字段的值。Auto-increment 会在新记录插入表中时生成一个唯一的数字。
我们可以在表中创建一个自动增量(auto-increment)字段。
用于 MySQL 的语法
以下SQL语句将 "Persons" 表中的“ID”列定义为自动递增(auto-increment)主键字段:
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
姓名 varchar(255) NOT NULL,
地址 varchar(255),
城市 varchar(255),
省份 varchar(255),
PRIMARY KEY (ID)
)
MySQL使用AUTO_INREMENT关键字来执行自动增量( auto-increment )任务。
默认情况下,AUTO_INREMENT的起始值为1,每个新记录增加1。
若要以其他值开始AUTO_INREMENT序列,请使用以下SQL语法:
ALTER TABLE Persons AUTO_INCREMENT=100
要在 "Persons" 表中插入新记录,我们不需要为"ID"栏指定值(自动添加唯一值):
INSERT INTO Persons (姓名,城市)
VALUES ('宋江','蓬莱市')
上面的SQL语句在 "Persons" 表中插入一个新记录。“ID”栏将得到唯一值。"姓名"栏设置为"宋江","城市"栏设置为"蓬莱市"。
autoincrement 字段原理
假设你有一个表如下:
CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER );
针对此表,执行如下:
INSERT INTO t1 VALUES(NULL,123);
逻辑上等同于:
INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);
参考资料:
1. SQL基础知识普及(二十)——AUTO INCREMENT 字段 https://blog.51cto.com/u_13002900/5133916
2.《sqlite 创建表 AUTO_INCREMENT 失败》https://www.jianshu.com/p/671b55d702b1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-04-27 《R语言入门与实践》第五章:对象改值
2019-04-27 《R语言入门与实践》第四章:R 的记号体系
2019-04-27 《R语言入门与实践》第三章:R 对象