论坛首页 Java企业应用论坛

SQL--约束

浏览 2337 次
锁定老帖子 主题:SQL--约束
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-14  

1.1、SQL--约束

数据类型是约束我们可以在表里存储什么类型的数据的一种方法。 不过,对于许多应用,它们提供的约束实在是太粗糙。比如, 一个包含产品价格的字段可能应该只接受正数。但是没有哪种标准数据类型只接受正数。 另外一个问题是你可能需要根据其他字段或者行的数据来约束字段数据。比如,在一个包含产品信息的表中, 每个产品编号都应该只有一行

1.2、SQL约束种类:

1.2.1、检查约束:

检查约束是最常见的约束类型。它允许你声明在某个字段里的数值必须满足一个布尔表达式。比如,要强制一个正数的产品价格, 你可以用:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0)
);

 

1.2.2、 非空约束
非空约束只是简单地声明一个字段必须不能是空值。下面是一个语法例子:

CREATE TABLE products (
    product_no integer NOT NULL,
    name text NOT NULL,
    price numeric
);

提示: 在大多数数据库设计里,主要的字段都应该标记为非空。

 

1.2.3、唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的。它的语法是

CREATE TABLE products (
    product_no integer UNIQUE,
    name text,
    price numeric
);

上面是写成字段约束,下面这个

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric,
    UNIQUE (product_no)
);是写成表约束。

如果一个唯一约束引用一组字段,那么这些字段用逗号分隔列出:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    UNIQUE (a, c)
);这样就声明了指定字段的数值的组合,在整个表的范围内是唯一的, 不过这些字段中的某个的数值可以不必是(并且通常也的确可能不是)唯一的。
 

 

1.2.4、主键:

从技术上来讲,主键约束只是唯一约束和非空约束的组合。 所以,下面两个表定义接受同样的数据:

CREATE TABLE products (
    product_no integer UNIQUE NOT NULL,
    name text,
    price numeric
);
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);
主键也可以约束多于一个字段;其语法类似唯一约束: 通常所说的联合主键

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

 

1.2.5、 外键
外键约束声明一个字段(或者一组字段)的数值必须匹配另外一个表中某些行出现的数值。 我们把这个行为称做两个相关表之间的参考完整性。

 

CREATE TABLE t1 (
  a integer PRIMARY KEY,
  b integer,
  c integer,
  FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)
);

 

 

以上五个为SQL的常见约束!

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics