第二十一章 创建和操纵表

注:一个数据库小白的成长之路

创建表

1.表创建基础

创建表时需给出以下信息:

  • 新表的名字,在关键字CREATE TABLE之后给出
  • 表列的名字和定义,用逗号分隔
CREATE TABLE customers
(
  cust_id        int        NOT NULL AUTO_INCREMENT,
  cust_name      char(50)   NOT NULL,
  cust_address   char(50)   NULL,
  cust_city      char(50)   NULL,
  cust_state     char(50)   NULL,
  cust_zip       char(5)    NULL,
  cust_country   char(50)   NULL,
  cust_contact   char(50)   NULL,
  cust_email     char(255)  NULL,
  PRIMARY KEY (cust_id)
) ENGINE = InnoDB;

2.使用NULL值

每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定。
允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行。
NULL为默认值,如果不指定NOT NULL,则认为指定的是NULL。

3.主键再介绍

主键必须唯一。如果主键使用单列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。
主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。

CREATE TABLE orderitems
(
  order_num        int              NOT NULL,
  order_item       int              NOT NULL,
  prod_id          char(10)         NOT NULL,
  quantity         int              NOT NULL,
  item_price       decimal(8, 2)    NOT NULL,
  PRIMARY KEY (order_num, order_item)
) ENGINE = InnoDB;

orderitems表中order_num列和order_item列的组合是唯一的,所以利用它们的组合作为主键。

4.使用AUTO_INCREMENT

CREATE TABLE books
(
  book_id        int               NOT NULL AUTO_INCREMENT,
  book_name      char(50)          NOT NULL,
  book_price     decimal(8, 2)     NULL,
  PRIMARY KEY (book_id)
) ENGINE = InnoDB;

一般在主键所在的列添加关键字AUTO_INCREMENT,当表中增加一行时,MySQL自动对该列进行增量。而且每个表只允许一个AUTO_INCREMENT列

5.指定默认值

 CREATE TABLE books
(
  book_id        int               NOT NULL AUTO_INCREMENT,
  book_name      char(50)          NOT NULL,
  book_price     decimal(8, 2)     NOT NULL DEFAULT 20,
  PRIMARY KEY (book_id)
) ENGINE = InnoDB;

当未给出book_price的值时,默认为20
注:与大多数DBMS不同,MySQL不允许使用函数作为默认值,它只支持常量。

6.引擎类型

引擎 说明
InnoDB 一个可靠的事务处理引擎,它不支持全文本搜索。
MEMORY 功能等同于MyISAM,但由于数据存储在内存中,速度很快。
MyISAM 一个性能极高的引擎,它支持全文本搜索。

更新表

更新表时需给出以下信息:

  • 在ALTER TABLE之后给出要更改的表名
  • 所做更改的列表
ALTER TABLE vendors
ADD vend_phone char(20);

vendors表增加了一个名为vend_phone的列

ALTER TABLE vendors
DROP column vend_phone

删除vend_phone

删除表

DROP TABLE customers2;

重命名表

RENAME TABLE backup_customers TO customers,
backup_vendors TO vendors,
backup_products TO products;

注意

  • 删除表中的某一行用delete from table1 where primary_key = 'a';
  • 删除表中的某一列用alter table table1 drop column column1;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。