SQLite 的三种元素约束操作 | 学习笔记

简介: 快速学习 SQLite 的三种元素约束操作

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 的三种元素约束操作】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11231


SQLite 的三种元素约束操作

内容介绍:

一、约束

1.主键

2.唯一约束

3.检查约束

 

一、约束

管理如何插入或处理数据库数据的规则

常用约束分类:主键、唯一约束、检查约束

前面的课程已经讲过如何创建主键,就是在创建的元素后面加上 primary key。比如在 id 后面加上 primary key,这个 id 就成为一个主键。

现在查看已有表的 id 是不是主键:

image.png

sqlite> .schema

CREATE TABLE tbl2(id INT, name TEXT , addr TEXT);

CREATE TABLE IF NOT EXISTS"tbl"(id interger primary key,name text , addr text,sclass text) ;

如果违背主键插入数据是否会通过:

sqlite> insert into tbl(id) values ( 106);

Error: UNIQUE constraint failed: tbl.id

sqlite> insert into tbl(id) values (107);

sqlite> select*from tbl;

id     name    addr    score    class

----   --------  -------  ------   ----------

101     zs      bj       40      class_A

102     ls       tj       40      class_A

103     ww     sh      60      class_A

104     zs       cd     60      class_B

105     sw      cq      90      class_B

106      xh      hb     90      class_B

107

在插入 106 时报错,插入 107 成功,所以主键的作用就是保证列里面数据的唯一性。

1.主键:

惟一的标识一行(一张表中只能有一个主键)

主键应当是对用户没有意义的(常用于索引)

永远不要更新主键,否则违反对用户没有意义原则

主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等

主键应当有计算机自动生成(保证唯一性)

如果将一列传 null,系统会自动生成;如果要指定,一定要遵循唯一性的原则。

语法: create table 表名称(列名称 1 数据类型 primary key,列名称 2 数据 类型,列名称3数据类型,...);

2. 唯一约束:

唯一约束的用法和主键类似,比如将表中的 primary key 改为 unique,之后id就不能重复,但跟主键有区别,unique 还可以约束姓名,地址列。

用来保证一个列(或一组列)中数据唯一,类似于主键,但与主键有区别

比如将表中的 primary key 改为 unique,之后 id 就不能重复

表可包含多个唯一约束,但只允许一个主键

唯一约束列可修改或更新

创建表时,通过 unique 来设置

语法:

create table 表名(列名称 1 数据类型 unique[,列名称②数据类型 unique...]);

3. 检查约束:

检查约束的作用是在输入数据时保证数据是合法数据。

用来保证一个列(或一组列)中的数据满足一组指定的条件。

指定范围,检查最大或最小范围,通过 check 实现

create table 表名(列名数据类型 check (判断语句));

要求:将 id 设为主键,对 addr 做唯一约束,对 score 进行检查约束

演示:

sqlite> create table ntbl(id INT primary key,name text , addr text unique, score INT check(score>0));

sqlite>.schema

CREATETABLE tbl2(id INT,name TEXT , addr TEXT);

CREATE TABLE IF NOT EXISTS “tbl"(id interger primary key ,name text,addr text,score integer,class text);

CREATE TABLE ntbl(id INT primary key ,name text ,addr text unique,score INT check(score>0 ))

sqlite>

/导入数据

sqlite> insert into ntbl(id ,name , addr , score) select id,name , addr , score from tbl;

sqlite> select * from ntbl;

id     name    addr    score

----   --------  -------  ------  

101     zs      bj       40

102     ls       tj       40

103     ww     sh      60

104     zs       cd     60

105     sw      cq      90

106      xh      hb     90

107

查看对 addr 的约束:

sqlite> insert into ntbl(addr) values ( "bj");

Error: UNIQUE constraint failed: ntbl.addr

查看对 score 的约束:

sqlitea insert into ntbl(score) values (-20);

Error:CHECK constraint failed:ntbl

假如 addr、score 都不对:

sqlite> insert into ntbl(addr , score) values( "bj",-20);

Error: CHECK constraint failed: ntbl

Addr 不对,score 对:

sqlite> insert into ntbl(addr , score) values ( "bj",80);

Error: UNIQUE constraint failed: ntbl.addr

sqlite> insert into ntbl(addr , score) values ( "sd",80);

sqlite> select * from ntbl;

id     name    addr    score

----   --------  -------  ------  

101     zs      bj       40

102     ls       tj       40

103     ww     sh      60

104     zs       cd     60

105     sw      cq      90

106      xh      hb     90

107

sd      80

总结:元素约束

主键约束:主要区分内容相同的行,只能有一列

唯一约束:主要保证被约束的列所有元素不能重复出现,可以设置多列

检查约束:主要约束插入或修改的元素合法性,检查条件自己设定

相关文章
|
2月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
134 6
|
3天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
48 15
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
75 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
38 8
|
2月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
36 4
|
2月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
64 3
|
2月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
3月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
3月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
208 1
|
2月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
43 0