zoukankan      html  css  js  c++  java
  • Sqlite 约束条件 Constraints

    一、约束 Constraints

    我们在数据库中存储数据的时候,有一些数据有明显的约束条件。 比如一所学校关于教师的数据表,其中的字段列可能有如下约束:

    • 年龄 - 至少大于20岁。如果你想录入一个小于20岁的教师,系统会报错
    • 国籍 - 默认中国。所谓默认,就是如果你不填写,系统自动填上默认值
    • 姓名 - 不能为空。每个人都有名字嘛
    • 员工号 - 唯一。这个可不能乱,工资发错了就麻烦了

    上面提到的大于默认不能为空唯一等等,就是数据的约束条件。 我们在用 CREATE TABLE 创建表的时候,就应该将每个字段列的约束条件事先说明(如果有的话), 以后再往表里输入数据的时候,系统会自动为我们检查是否满足约束条件,如果不满足系统会报错。

     

    SQLite 常用约束如下

    • NOT NULL - 非空
    • UNIQUE - 唯一
    • PRIMARY KEY - 主键
    • FOREIGN KEY - 外键
    • CHECK - 条件检查,确保一列中的所有值满足一定条件
    • DEFAULT - 默认
    • AUTOINCREATEMENT-自增型变量

    二、主键 PRIMARY KEY

    我们还是进入 SQLite 命令行环境,建立一个 test.db 数据库用来做实验,如下

    myqiao@ubuntu:~/My Documents/db$ sqlite3 test.db
    -- Loading resources from /home/myqiao/.sqliterc
    SQLite version 3.7.4
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> .tables 
    sqlite>  
                

    运行 .tables 命令没有返回,说明数据库是空的。如果你的数据库里面有内容并影响到下面的实验, 你可以用我们上一篇学的 DROP TABLE 来删除造成影响的表, 或者用 ALTER TABLE ... RENAME TO ... 来改名。


    下面言归正转,我们来说说主键 PRIMARY KEY 。

    • 首先,数据表中每一条记录都有一个主键, 这就像我们每的身份证号码、员工号、银行帐号; 反过来也可以说,每一个主键对应着一条数据记录。 所以,主键必须是唯一的。
    • 其次,一般情况下主键同时也是一个索引,所以通过主键查找记录速度比较快。
    • 第三,在关系型数据库中,一个表的主键可以作为另外一个表的外键, 这样,这两个表之间就通过这个键建立了关系。
    • 最后,主键一般是整数或者字符串,只要保证唯一就行。 在 SQLite 中,主键如果是整数类型,该列的值可以自动增长。

    下面我们来做实验

    sqlite>  
    sqlite> CREATE TABLE Teachers(Id integer autoincreatement PRIMARY KEY,Name text);
    sqlite> .tables
    Teachers
    sqlite> INSERT INTO Teachers(Name) Values('张三');
    sqlite> INSERT INTO Teachers(Name) Values('李四');
    sqlite> INSERT INTO Teachers(Name) Values('王二麻子');
    sqlite> SELECT * FROM Teachers;
    Id          Name      
    ----------  ----------
    1           张三    
    2           李四    
    3           王二麻 
    sqlite> INSERT INTO Teachers(Id,Name) Values(2,'孙悟空');
    Error: PRIMARY KEY must be unique
    sqlite>  
                

    我们先新建了一个 Teachers 表,并设置了两个字段列,其中 Id 字段列为主键列。 然后,我们向其中插入三条数据并查询,反馈一切正常。

    注意:在插入前三条数据的时候,命令中并没有明确指明 Id 的值,系统自动赋值,并且数值自动增长。

    插入第四条数据的时候,我给了一个明确的 Id 编号为 2,因为李四的编号已经是 2 了, 所以系统提示我错误:主键必须唯一。

  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/ransn/p/8067289.html
Copyright © 2011-2022 走看看