《MySQL必知必会》[04] 表的操作和视图的使用

《MySQL必知必会》[04] 表的操作和视图的使用


1、表的操作

现在创建表的工作大部分还是使用数据库管理工具来完成的,虽然其本质也是使用的SQL,但是方便许多。现在就来简单谈谈使用SQL语句操作表。

1.1 创建表

 创建表的基本语句是(如果仅想在一个表不存在时创建它,则在表名后给出关键字 IF NOT EXISTS 即可):
CREATE TABLE R ( 
  A1<数据类型>,
  A1<数据类型>,
  ...
  An<数据类型>
);

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;

创建表的语句中,各列的定义之间用逗号隔开,表名之后,跟列的数据类型,和更详细的定义,如 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 具体的更改操作;

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

1.3 删除表

删除表的基本语句是:
DROP TABLE R;

1.4 重命名表

重命名表的基本语句是:
RENAME TABLE R1 TO R2;



2、视图的使用

视图并不是真实存在的表,它是虚拟的表,只包含使用是动态检索数据的查询。视图通常是按不同的应用领域或不同的用户群体进行定义,从而使用户从数据库中澎湃的数据中超超脱出来,只关心自己所需要的数据。

创建视图的基本语句是:
CREATE VIEW <视图名> AS <子查询>;

利用视图,可以编写一些基础的SQL,根据需要配合SELECT语句,以隐藏复杂的SQL,起到简化的目的。

注意:
  • 视图实际上并不包含数据,而是每次使用时再去执行查询,所以逻辑过于复杂的视图,同样会性能下降
  • 视图可以嵌套,即可以从其他视图中查询数据构造新的视图
  • 视图可以和表一起使用,如连结表和试图的SELECT语句
  • 视图不能索引