UPDATE 命令总是要求一个 SET 在某个位置出现,并且这个特定的 INSERT 还要求有一个 VALUES 才完整

可以用"select"表示一个字段或者表的名字,而一个没有引号的 select 将被当做一条命令的一部分

 

SQL 标识符和关键字必须以一个字母(a-z 以及带变音符的字母和非拉丁字母)或下划线(_)开头,随后的字符可以是字母、下划线、数字(0-9)、美元符号($)。需要注意的是,根据 SQL 标准,美元符号不允许出现在标识符中,因此使用美元符号将不易移植。SQL 标准不会定义包含数字或者以下划线开头或结尾的关键字

 

注释

-- 这是标准的 SQL92 注释

还可以使用C-风格的块注释:

/* 多行注释
* 可以嵌套: /* 被嵌套的块注释 */
*/

删除表
DROP TABLE my_first_table
试图删除一个不存在的表是一个错误。不过,在 SQL 脚本文件里,我们通常在创建表之前无条件删除它并忽略错误信息。
当然你还可以使用 DROP TABLE IF EXISTS 来避免警告信息,不过这并不符合 SQL 标准


缺省值
缺省值可以是一个表达式,它会在插入缺省值的时候计算(不是在创建表的时候)。
个常见的例子是一个 timestamp 字段可能有缺省值 now()
CREATE TABLE products (
product_no integer,
name text,
price numeric DEFAULT 9.99
);
CREATE TABLE products (
product_no integer DEFAULT nextval('products_product_no_seq'),
...);
CREATE TABLE products (
product_no SERIAL,
...);
后两个为每一行生成一个"序列号

约束
检查约束
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0)
);
你还可以给这个约束取一个独立的名字
CREATE TABLE products (
product_no integer,
name text,
price numeric CONSTRAINT positive_price CHECK (price > 0)
);
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 NOT NULL,
name text NOT NULL,
price numeric);

唯一约束
CREATE TABLE products (
product_no integer UNIQUE,
name text,
price numeric);
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
);

主键
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)
);

外键

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

CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products (product_no),
quantity integer
);
我们不能创建任何其 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)
);



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 的意思是如果在检查约束的时候还存在任何引用行,则抛出错误

 

增加字段

ALTER TABLE products ADD COLUMN description text CHECK (description <> '');

删除字段

ALTER TABLE products DROP COLUMN description CASCADE;

通过使用 CASCADE 指明删除任何依赖该字段的东西:

增加约束

ALTER TABLE products ADD CHECK (name <> '');

ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

 

删除约束

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
修改字段的数据类型
ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
重命名字段
ALTER TABLE products RENAME COLUMN product_no TO product_number;

重命名表
ALTER TABLE products RENAME TO items;




 


 


posted on 2010-11-29 20:57  hotty  阅读(200)  评论(0)    收藏  举报