【MySQL必知必会(十八)】【创建和操纵表】

上一篇:【MySQL必知必会(十七)】【更新和删除数据】

+++++++++++++开始线++++++++++++++++

一、 创建表

一般有两种创建表的方式:
1.使用具有交互式创建和管理表的工具
2.表也可以直接用MySQL语句操纵

1.1 表创建基础

利用CREATE TABLE创建表,必须给出下列信息:
1.新表的名字,在关键字CREATE TABLE之后给出
2.表列的名字和定义,用逗号分隔

创建之前使用的customers表

CREATE TABLE `customers`  (
  `cust_id` int(11) NOT NULL AUTO_INCREMENT,
  `cust_name` char(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
  `cust_address` char(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `cust_city` char(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `cust_state` char(5) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `cust_zip` char(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `cust_country` char(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `cust_contact` char(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `cust_email` char(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  PRIMARY KEY (`cust_id`) USING BTREE
) ENGINE = InnoDB ;

处理现有的表

在创建新表时,指定的表名必须不存在,否则将出错。如果要防止意外覆盖已有的表,SQL要求首先手工删除该表,再重建,而不是简单地用创建表语句覆盖

1.2 使用NULL值

NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,在插入或更新行时,该列必须有值。

每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定

CREATE TABLE `orders`  (
  `order_num` int(11) NOT NULL AUTO_INCREMENT,
  `order_date` datetime(0) NOT NULL,
  `cust_id` int(11) NOT NULL,
  PRIMARY KEY (`order_num`) USING BTREE,
  INDEX `fk_orders_customers`(`cust_id`) USING BTREE,
  CONSTRAINT `fk_orders_customers` FOREIGN KEY (`cust_id`) REFERENCES `customers` (`cust_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB ;

理解NULL

不要把NULL值与空串相混淆。NULL值是没有值,他不是空串。如果指定’’(两个单引号,其间没有字符),这在NOT
NULL列中是允许的。空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定

1.3 主键再介绍

主键值必须唯一。表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。
主键可以在创建表时定义,或者在创建表之后定义。

主键和NULL值

主键为其值唯一标识表中每个行的列。主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。

1.4 使用AUTO_INCREMENT

AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行INSERT操作时,MySQL自动对该列增量。给该列赋予下一个可用的值。

确定AUTO_INCREMENT值

使用last_insert_id()函数,SELECT
last_insert_id(),此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。

1.5 指定默认值

在插入行时没有给出值,MySQL允许指定此时使用的默认值。

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

分析

quantity列包含订单中每项物品的数量。在此例子中,给该列的描述添加文本DEFUALT
1指示MySQL,在为给出数量的情况下使用数量1。

不允许函数

MySQL不允许使用函数作为默认值,它只支持常量。

1.6 引擎类型

三个必须知道的引擎:
1.InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索
2.MEMORY在功能等同于MyISAM,但由于数据存储在内存中,速度很快
3.MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理

外键不能跨引擎

混用引擎类型有一个大缺陷。外键不能跨引擎,即使用一个引擎的表也不能引用具有使用不同引擎的表的外键。

二、 更新表

为了使用ALTER TABLE更改表结构,必须给出以下信息:
1.在ALTER TABLE之后给出要更改的表名(表必须存在,否则报错)
2.所作更改的列表

mysql> ALTER TABLE vendors
    -> ADD vend_phone CHAR(20);

分析

为表添加一个列,必须明确其数据类型

删除刚刚添加的列

mysql> ALTER TABLE vendors
    -> DROP COLUMN vend_phone;

ALTER TABLE的一种常见用途就是定义外键

复杂的表结构更改一般需要手动删除过程,涉及以下步骤:
1.用新的列布局创建一个新表
2.使用INSERT SELEC语句从旧表复制数据到新表
3.检验包含所需数据的新表
4.重命名旧表
5.用旧表原来的名字重命名新表
6.根据需要,重新创建触发器、存储过程、索引和外键

三、 删除表

DROP TABLE customers2;

不能撤销,执行之后永久删除该表

四、 重命名表

RENAME TABLE customers2 TO customers;

也可以对多个表进行重名,用逗号隔开

+++++++++++++结束线++++++++++++++++

下一篇:【MySQL必知必会(十九)】【使用视图】

猜你喜欢

转载自blog.csdn.net/qq_42893334/article/details/108902542