+++++++++++++开始线++++++++++++++++
一、 创建表
一般有两种创建表的方式:
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;
也可以对多个表进行重名,用逗号隔开
+++++++++++++结束线++++++++++++++++