SQLite设置自增主键

/ 31评 / 10

心血来潮想做一个网站,具体干什么暂时还是不透露了,因为我也不确定能不能搞出来,这不,刚开始就踩到坑了。

这算是第一次近距离接触SQLite吧,算是脱离文本数据库的一小步(虽然SQLite也有类似文本数据库的味道),第一次用php+sql,操作起来有点小激动,按照教程来做,感觉无比顺利,成功完成了增删改查,于是打算开始着手写点什么,比如一个简单的记事本。

Runoob给的创建表的代码如下:

$sql =<<<EOF
            CREATE TABLE COMPANY (
                ID                 INT             PRIMARY KEY            NOT NULL,
                NAME          TEXT           NOT NULL,
                AGE              INT             NOT NULL,
                ADDRESS     CHAR(50),
                SALARY        REAL
            );
EOF;

然后数据是这么插入的:

$sql =<<<EOF
            INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
            VALUES (1, 'Paul', 32, 'California', 20000.00 );

            INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
            VALUES (2, 'Mark', 25, 'Rich-Mond ', 65000.00 );
EOF;

按照这种方式创建的表,再执行插入,我发现ID字段并不能自动增加,难道要每次都手动给一个ID?那岂不太坑了,于是想着当初学MSSQL的时候有自增ID这一说,上网搜了一下,发现了 INTEGER PRIMARY KEY AUTOINCREMENT 但是实际应用中,我怎么都没有正确插入值,疯狂郁闷。

事情真是莫名其妙,刚试了一下,竟然神奇的可以自增了,好吧,不管那么多了,能正常用就可以,下面列出我的代码,仅供参考:

<?php
//配置(创建)数据库
class MyDB extends SQLite3
{
     function __construct()
     {
            $this->open('test.db');
     }
}
$db = new MyDB();
if(!$db){
     echo $db->lastErrorMsg().'<br>';
} else {
     echo "卧槽,竟然打开了<br>";
}
/*
下面就要创建一个叫 COMPANY 的表,如果存在则插入,不存在则创建
-- 创建ID列,int类型,主键,自增
-- 昵称,text类型,不允许为空
-- 年龄
-- 地址,最多50字
-- 薪水
*/
$sql =<<<EOF
        CREATE TABLE COMPANY (
        ID              INTEGER             PRIMARY KEY          AUTOINCREMENT,
        NAME            TEXT            NOT NULL,
        AGE             INT             NOT NULL,
        ADDRESS         CHAR(50),
        SALARY          REAL
        );
EOF;

$ret = $db->exec($sql);
if(!$ret){
        echo $db->lastErrorMsg().'<br>';
} else {
        echo "不错,表(zi)创建成功了<br>";
}

     $sql =<<<EOF
            INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
            VALUES ('Paulsada', 32, 'Calfornia', 200.00 );
EOF;

     $ret = $db->exec($sql);
     if(!$ret){
            echo $db->lastErrorMsg().'<br>';
     } else {
            echo "666,这条数据也插入成功了<br><br>";
     }


$sql =<<<EOF
        SELECT * from COMPANY;
EOF;

     $ret = $db->query($sql);
     while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
            echo "ID = ". $row['ID'] . "<br>";
            echo "NAME = ". $row['NAME'] ."<br>";
            echo "ADDRESS = ". $row['ADDRESS'] ."<br>";
            echo "SALARY =  ".$row['SALARY'] ."<br><br>";
     }
     echo "简直没谁了,竟然从库里读出来了数据<br>";

     $db->close();
?>

31条回应:“SQLite设置自增主键”

  1. 木头怀说道:

    SQLite 设置 auto crement不就是自增吗?

  2. 唯美图片说道:

    好久不来,每月一更~^^

  3. MG说道:

    现在看到SQLite就想到ghost了。。。。

  4. 昌浩说道:

    窝主站数据库换成了MariaDB……虽然没啥异样的感觉2333

  5. c说道:

    强烈建议mysql,sqlite数据存多了以后备份起来很费劲……

  6. 小叶说道:

    到底是什么站呢?很期待哎。莫非是H站,(#滑稽)

  7. jiamin说道:

    好久没来新文章了,以来就这么深奥,表示不懂,但是继续支持

  8. 灰常记忆说道:

    呵呵,不研究。

发表评论

电子邮件地址不会被公开。 必填项已用*标注