//参考 https://blog.csdn.net/yimenglin/article/details/92794528?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-16.channel_param_right&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-16.channel_param_right
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
1.主键是能确定一条记录的唯一标识
比如,一条记录包括身份证号,姓名,年龄。
身份证号是唯一能确定这个人的,其他都可能有重复,所以,身份证号可以是主键。
主键:一般用于对数据的快速定位(索引作用)(在A表中创建一个名为ID的自增长的主键 CREATE TABLE IF NOT EXISTS A(ID INTEGER PRIMARY KEY AUTOINCREMENT);)
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
外键:对数据的增加或删除加条件,满足条件时才能更改(约束作用)(将数据库中指定的两个表的指定列关联。CREATE TABLE IF NOT EXISTS B(A_ID INT,foreign key(A_ID) references A(ID) on delete cascade); 作用:将B表中的A_ID列设为外键且和A表中的ID关联。此处外键是删除限制,当删除A表中ID=1的行时,B表中所有A_ID=1的行都会被删除)《-级联操作 还可以加上foreign key(ROI_Info_ID) references ROI_Info(ID) on update cascade 更新限制。
删除:PRAGMA foreign_keys=ON; Delete From A Where ID= 4;(删除A表中ID=4的行,表B中A_ID=4的所有行同时删除,需要在执行的sql语句中加上PRAGMA foreign_keys=ON;,因为sqlite3默认为关闭外键限制的)
查询语句理解:
int sqlite3_get_table(
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be evaluated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
);
参数
db:已经打开的db的指针
zSql:sqlite3查询语句
pazResult:所有符合查询条件的数据的一个数组
pnRow:一共有(pnRow + 1)行(从0开始,第0行是表头)
pnColumn:一共多少列(从0开始)
取最后一行最后一列的数据:pazResult[pnRow * pnColumn + pnColumn - 1]