【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

 

posted @ 2024-04-27 10:43  FBshark  阅读(19)  评论(0编辑  收藏  举报