sqlite> create table stu(id INTEGER PRIMARY KEY,name char,age integer); sqlite> insert into stu values(1001,'zhangsan',18); sqlite> insert into stu values(NULL,'lisi',19); sqlite> select * FROM stu; 1001|zhangsan|18 1002|lisi|19 sqlite> create table stu1(id INT PRIMARY KEY,name char,age integer); sqlite> insert into stu values(1001,'zhangsan',18); Error: UNIQUE constraint failed: stu.id sqlite> insert into stu1 values(1001,'zhangsan',18); sqlite> insert into stu1 values(NULL,'lisi',19); sqlite> select * FROM stu1; 1001|zhangsan|18 |lisi|19 sqlite> create table stu2(id INTEGER PRIMARY KEY AUTOINCREMENT,name char,age integer); sqlite> insert into stu2 values(1001,'zhangsan',18); sqlite> insert into stu2 values(NULL,'lisi',19); sqlite> select * FROM stu2; 1001|zhangsan|18 1002|lisi|19 sqlite>
总结:自增字段必须是 INTEGER 类型,INT类型及其他类型都是不行的,但 INTEGER 类型不一定是自增字段,需要在后面加上后缀:PRIMARY KEY,
这样就成了自增字段。自增字段也分两种,就目前使用的sqlite来讲,自增是有上限的,上限值为:2的64次方。
当自增值超过上限,根据不同的处理方式,将自增字段分为了两种,一种是直接报错,在后面加入AUTOINCREMENT后缀;
另一种是,当超过最大值时,会随机找一个没被使用的值,不需要额外加后缀。
自增字段可以使用NULL来赋值,值 = 此表最大值 + 1。
(注:内核中到处都是函数指针和回调函数,参考示例的链接:https://www.cnblogs.com/jontian/p/5619641.html )
(作业要求:做作业的时候不要再翻看视频上的教程,对函数理解不明白的全部通过man手册去查看,
自己思考框架,使用makefile编译,然后将测试的记录和结果添加到readme.txt文件中提交上来,代码实现完成测试通过后
再提交作业,网络部分学习不写代码不测试看不出问题的,良好的习惯帮助你们快速成长。)
#include <stdio.h> int operation(int (*callback)(int,int)); int func_add(int a,int b); int func_sub(int a,int b); int func_pun(int a,int b); int func_div(int a,int b); int main() { int cmd; printf("************************\n"); printf("1.add 2.sub 3.pun 4.div 5.quit\n"); printf("************************\n"); while(1){ scanf("%d",&cmd); fflush(stdin); switch(cmd) { case 1:operation(func_add);break; case 2:operation(func_sub);break; case 3:operation(func_pun);break; case 4:operation(func_div);break; case 5:return 0; default:printf("Error: cmd\n"); } } return 0; } int operation(int (*callback)(int,int)) { int a,b,cmd; printf("a:"); scanf("%d",&a); fflush(stdin); printf("b:"); scanf("%d",&b); fflush(stdin); cmd = callback(a,b); printf("result:%d\n",cmd); return 0; } int func_add(int a,int b) { return a+b; } int func_sub(int a,int b) { return a-b; } int func_pun(int a,int b) { return a*b; } int func_div(int a,int b) { return a/b; }