【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