1、表的操作
现在创建表的工作大部分还是使用数据库管理工具来完成的,虽然其本质也是使用的SQL,但是方便许多。现在就来简单谈谈使用SQL语句操作表。
1.1 创建表
创建表的基本语句是(如果仅想在一个表不存在时创建它,则在表名后给出关键字 IF NOT EXISTS 即可):
CREATE TABLE R (
A1<数据类型>,
A1<数据类型>,
...
An<数据类型>
);
6
1
CREATE TABLE R (
2
A1<数据类型>,
3
A1<数据类型>,
4
...
5
An<数据类型>
6
);
e.g.
CREATE TABLE vendors
(
vend_id int NOT NULL AUTO_INCREMENT,
vend_name char(50) NOT NULL,
vend_state char(5) NULL,
vend_country char(50) NULL DEFAULT 'China',
PRIMARY KEY (vend_id)
) ENGINE=InnoDB;
8
1
CREATE TABLE vendors
2
(
3
vend_id int NOT NULL AUTO_INCREMENT,
4
vend_name char(50) NOT NULL,
5
vend_state char(5) NULL,
6
vend_country char(50) NULL DEFAULT 'China',
7
PRIMARY KEY (vend_id)
8
) ENGINE=InnoDB;
创建表的语句中,各列的定义之间用逗号隔开,表名之后,跟列的数据类型,和更详细的定义,如 NOT NULL 要求列值不得为空,UNIQUE表列值唯一不得重复。
- 每个列或者是NULL列,或者是NOT NULL列,这是在创建表时就要定义的,如果不指定,则默认是允许NULL值;
- 如果以多个列组成主键,则应以逗号隔开,如 PRIMARY KEY (order_num, order_item)
- AUTO_INCREMENT 即本列每当增加一行时自动增量,每个表只允许一个AUTO_INCREMENT列,且必须被索引
- last_insert_id()函数可以获取最后一个AUTO_INCREMENT值
- DEFAULT 用于定义未指定值时使用的默认值
- ENGINE=InnoDB 表指定具体管理和处理数据的内部引擎,可以省略,则使用默认引擎
- InnoDB:可靠的事务处理引擎,但不支持全文本搜索
- MyISAM:性能极高的一个引擎,支持全文本搜索,但是不支持事务处理
- MEMORY:功能等同于MyISAM,但数据存储在内存而非磁盘,速度很快(特别适合于临时表)
1.2 更新表
更新表的基本语句是:
ALTER TABLE R 具体的更改操作;
1
1
ALTER TABLE R 具体的更改操作;
e.g.
//添加列
ALTER TABLE vendors
ADD vend_phone CHAR(20);
//删除列
ALTER TABLE vendors
DROP COLUMN vend_phone;
//添加外键
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES orders (order_num);
x
1
//添加列
2
ALTER TABLE vendors
3
ADD vend_phone CHAR(20);
4
5
//删除列
6
ALTER TABLE vendors
7
DROP COLUMN vend_phone;
8
9
//添加外键
10
ALTER TABLE orderitems
11
ADD CONSTRAINT fk_orderitems_orders
12
FOREIGN KEY (order_num) REFERENCES orders (order_num);
1.3 删除表
删除表的基本语句是:
DROP TABLE R;
1
1
DROP TABLE R;
1.4 重命名表
重命名表的基本语句是:
RENAME TABLE R1 TO R2;
1
1
RENAME TABLE R1 TO R2;
2、视图的使用
视图并不是真实存在的表,它是虚拟的表,只包含使用是动态检索数据的查询。视图通常是按不同的应用领域或不同的用户群体进行定义,从而使用户从数据库中澎湃的数据中超超脱出来,只关心自己所需要的数据。
创建视图的基本语句是:
CREATE VIEW <视图名> AS <子查询>;
1
CREATE VIEW <视图名> AS <子查询>;
利用视图,可以编写一些基础的SQL,根据需要配合SELECT语句,以隐藏复杂的SQL,起到简化的目的。
注意:
- 视图实际上并不包含数据,而是每次使用时再去执行查询,所以逻辑过于复杂的视图,同样会性能下降
- 视图可以嵌套,即可以从其他视图中查询数据构造新的视图
- 视图可以和表一起使用,如连结表和试图的SELECT语句
- 视图不能索引