PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 5. ���ݶ��� | Fast Forward | Next |
����������Լ�����ǿ����ڱ���洢ʲô���͵����ݵ�һ�ַ����� �������������Ӧ�ã������ṩ��Լ��ʵ����̫�ֲڡ����磬 һ��������Ʒ�۸���ֶο���Ӧ��ֻ��������������û��������������ֻ���������� ����һ���������������Ҫ���������ֶλ����е�������Լ���ֶ����ݡ����磬��һ��������Ʒ��Ϣ�ı��У� ÿ����Ʒ��Ŷ�Ӧ��ֻ��һ�С�
������Щ���⣬SQL���������ֶκͱ��϶���Լ���� Լ������������Ҫ������ʩ�ӵ�һ�п��ơ����һ���û���ͼ��һ���ֶ���洢��Υ��Լ�������ݣ���ô�ͻ��׳�һ������ �������ͬʱҲ��������ֵ����ȱʡֵ�������
���Լ���������Լ�����͡���������������ij���ֶ������ֵ��������һ������ı��ʽ�����磬Ҫǿ��һ�������IJ�Ʒ�۸� ������ã�
CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0) );
����������Լ���������������ͺ��棬�ͺ���ȱʡֵ����һ���� ȱʡֵ��Լ�������������˳�����С�һ�����Լ����һ���ؼ��� CHECK �������һ������Բ������ı��ʽ��ɡ� ���Լ�����ʽӦ�ð�����Լ�����ֶΣ��������Լ����ûʲô�����ˡ�
�㻹���Ը����Լ��һ�����������֡������Ϳ����������Ϣ�������� ��������Ҫ������ʱ������Բ�ѯ���Լ������ǣ�
CREATE TABLE products ( product_no integer, name text, price numeric CONSTRAINT positive_price CHECK (price > 0) );
��ˣ�Ҫ����һ������Լ����ʹ�ùؼ���CONSTRAINT�� ���������һ����ʶ����Ȼ���ٸ���Լ�����塣
һ�����Լ��Ҳ�����������ɸ��ֶΡ�������洢һ�������۸��һ���ۿۼۣ��������뱣֤�ۿۼ۱������۵͡�
CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric CHECK (discounted_price > 0), CHECK (price > discounted_price) );
ͷ����Լ������ȥӦ�ú����졣������ʹ����һ���µ���� ��û�и�����ij���ֶ��ϣ����ڶ��ŷָ����ֶ��б�������һ�������е���ʽ���ֵġ� �ֶζ������ЩԼ����������Ի�ϵ�˳���г���
����˵ͷ����Լ�����ֶ�Լ�������������DZ�Լ������Ϊ�����ֶζ���ֿ�д�� �ֶ�Լ��Ҳ����д�ɱ�Լ�������������ܿ��ܲ��С����������Ҳ������ôд
CREATE TABLE products ( product_no integer, name text, price numeric, CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0), CHECK (price > discounted_price) );
������
CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0), discounted_price numeric, CHECK (discounted_price > 0 AND price > discounted_price) );
��ֻ�Ƿ��IJ�ͬ��
���ǻ�Ҫ֪��һ�����Լ���ڱ��ʽ���������߿�ֵ��ʱ���ǵõ�����ġ� ��Ϊ��������ʽ������һ���������ǿյ�ʱ��ó���ֵ�� ������ЩԼ����������Լ���ֶ��Ͻ�ֹ��ֵ��Ҫȷ��һ���ֶβ�������ֵ�����ǿ���ʹ����һ�ڽ��ܵķǿ�Լ����
�ǿ�Լ��ֻ�Ǽ�����һ���ֶα��벻���ǿ�ֵ��������һ������ӣ�
CREATE TABLE products ( product_no integer NOT NULL, name text NOT NULL, price numeric );
һ���ǿ�Լ������д��һ���ֶ�Լ���� �ǿ�Լ���ڹ����ϵ�Ч�ڴ���һ�����Լ�� CHECK (column_name IS NOT NULL)�� ���� PostgreSQL �����һ����ȷ�� �ǿ�Լ��Ч�ʸ��ߡ�ȱ�����㲻�ܸ���ô�����ķǿ�Լ��һ����ȷ�����֡�
��Ȼ��һ���ֶο����ж��Լ����ֻҪ��һ��Լ���������д����һ���Ϳ����ˣ�
CREATE TABLE products ( product_no integer NOT NULL, name text NOT NULL, price numeric NOT NULL CHECK (price > 0) );
����˳������ν��˳��Ӱ��Լ������˳��
NOT NULL Լ���и��෴��Լ����NULL Լ�������Լ��������ζ�Ÿ��ֶα����ǿգ���Ϊ�������ֶ�Ҳûɶ�á� ��ֻ�Ƕ����˸��ֶο���Ϊ�յ��������Ϊ���� SQL ����û�ж��� NULL Լ���� ��˲�Ӧ���ڿ���ֲ��Ӧ����ʹ������ �������� PostgreSQL �����������Լ��ֻ��Ϊ�˺��������ݿ�ϵͳ���ݡ��� ��������Щ�û�ϲ��������Ϊ���Լ�����������Ǻ������ڽű��ļ����л�Լ�������磬����Դ�����������ʼ
CREATE TABLE products ( product_no integer NULL, name text NULL, price numeric NULL );
Ȼ������Ҫ��ʱ����� NOT �ؼ��֡�
��ʾ: �ڴ�������ݿ�������Ҫ���ֶζ�Ӧ�ñ��Ϊ�ǿա�
ΨһԼ����֤��һ���ֶλ���һ���ֶ������������������е����������Ψһ�ġ��������
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) );
����Ҳ���Ը�ΨһԼ���������֣�
CREATE TABLE products ( product_no integer CONSTRAINT must_be_different UNIQUE, name text, price numeric );
ͨ��������ڱ��������л�����У�����Щ���а�����ΨһԼ��������Ǽ����ֶζ���ȣ���ô����Υ����ΨһԼ���� ���������ֱȽ��У���ֵ����Ϊ����ȵġ������ζ�ţ��ڶ��ֶ�ΨһԼ��������£� ���������һ���ֶ��ϴ��ڿ�ֵ����ô�����������ǿ��Դ洢������� ������Ϊ��ѭ SQL ��������������˵���� SQL ���ݿ���ܲ���ѭ���������������Ҫ��������ֲ�ij��� ��ô�����ϸЩ��
�Ӽ���������������Լ��ֻ��ΨһԼ���ͷǿ�Լ������ϡ� ���ԣ����������������ͬ�������ݣ�
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) );
������ʾһ���ֶλ��������ɸ��ֶε���Ͽ������ڱ��е������е�Ψһ��ʶ�� �����Ƕ���һ��������ֱ�ӽ������ע��һ��ΨһԼ��ʵ���ϲ������ṩһ��Ψһ��ʾ����Ϊ�����ų���ֵ���� ������ܶ��ĵ�Ŀ�ĺͿͻ�Ӧ�ö������á����磬һ������������ֵ�� GUI Ӧ�ÿ�����Ҫ֪��һ�������������Ψһ�ر�ʶһ���С�
һ������������һ�������������������ж��Ψһ�ͷǿ�Լ������ ��ϵ�����ݿ����۸������ǣ�ÿ����������һ��������PostgreSQL ����ǿ���������������û�����ѭ����
���Լ������һ���ֶΣ�����һ���ֶΣ�����ֵ����ƥ������һ������ijЩ�г��ֵ���ֵ�� ���ǰ������Ϊ����������ر�֮����ο���������
�������и���Ʒ�����ǿ���ʹ���˺ü��Σ�
CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric );
�����Ǽ�������һ���洢��Щ��Ʒ�Ķ����ı� �����뱣֤������ֻ����ʵ�ʴ��ڵIJ�Ʒ����������ڶ������ж���һ�����Լ�����ò�Ʒ��
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products (product_no), quantity integer );
���ڣ����Dz����ܴ����κ��� product_no û���ڲ�Ʒ���г��ֵĶ�����
��������������ǰѶ�������������� ����Ʒ���������������Ƶ�Ҳ�������ֶκͱ������ֶΡ�
��Ҳ��������������д��
CREATE TABLE orders ( order_id integer PRIMARY KEY, product_no integer REFERENCES products, quantity integer );
��Ϊ���ȱ���ֶ��б�Ļ��������ñ�������ͻᱻ�����������ֶ�ʹ�á�
һ�����Ҳ����Լ��������һ���ֶΡ�ͬ����Ҳ��Ҫд�ɱ�Լ������ʽ�� ������һ���������������ӣ�
CREATE TABLE t1 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES other_table (c1, c2) );
��Ȼ����Լ�����ֶε���Ŀ��������Ҫ�ͱ������ֶε���Ŀ������һ�¡�
һ�������������һ�����Լ���������������ʵ�ֱ�֮���Զ�� ��ϵ���������й��ڲ�Ʒ�Ͷ����ı���������������һ������������ ���ֲ�Ʒ�������Ǹ��ṹ�Dz�������ô���ģ��������ʹ�������Ľṹ��
CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( product_no integer REFERENCES products, order_id integer REFERENCES orders, quantity integer, PRIMARY KEY (product_no, order_id) );
��Ҫע�����ı��������������ص��ġ�
����֪����������������κβ�Ʒ���صĶ����� �������һ����������֮�������õIJ�Ʒ��ɾ���˻���ô�죿 SQL Ҳ�����㴦��������⡣��˵�������м���ѡ��
������ɾ��һ�������õIJ�Ʒ
ͬʱҲɾ������
�����ģ�
Ϊ��˵��������⣬�����Ƕ�����Ķ�Զ�Ĺ�ϵ�����ƶ������ ���ԣ����������ɾ��һ����Ȼ��һ���������õIJ�Ʒ��ͨ�� order_items������ô���Dz���������ô���� �������ɾ����һ����������ô������Ҳ��ɾ����
CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( product_no integer REFERENCES products ON DELETE RESTRICT, order_id integer REFERENCES orders ON DELETE CASCADE, quantity integer, PRIMARY KEY (product_no, order_id) );
���ƺͼ���ɾ�������������ѡ�RESTRICT ��ֹɾ�������õ��С� NO ACTION ����˼������ڼ��Լ����ʱ������������κ������У����׳����� ����㲻�����κζ�������ô������ȱʡ����Ϊ�� ��������ѡ���ʵ�������ǣ�NO ACTION ����Լ������Ƴٵ��������Щʱ�� RESTRICT ���С��� CASCADE ������ɾ��һ�������õ��е�ʱ������������Ҳ�ᱻ�Զ�ɾ������ ������ֶ��ϵĶ�����������ѡ� SET NULL �� SET DEFAULT�� �����ᵼ���ڱ�������ɾ����ʱ���������ǵ��ֶηֱ�����Ϊ�ջ���ȱʡֵ�� ��ע����Щѡ������������ѱ��۲��Լ���ľ��ء� ���磬���һ���������� SET DEFAULT������ȱʡֵ�����������������ô�����ͻ�ʧ�ܡ�
���� ON DELETE������ ON UPDATE ѡ������ڱ������ֶ��ģ����£���ʱ����õġ����õĶ�����һ���ġ�
�йظ��º�ɾ�����ݵĸ�����Ϣ������ Chapter 6 ���ҵ���
�������Ӧ��˵�����ǣ�һ���������Ҫô����һ��������Ҫô����һ��ΨһԼ���� ������������һ��ΨһԼ������ô�����ƥ���ֵ��������ϻ���һЩ�����Ŀ����ԡ� ��Щ�������� CREATE TABLE ��� CREATE TABLE �н��͡�