十七、插入数据
1、 数据插入
关键词:INSERT
插入可以用以下几种方法使用:
- 插入完整的行
- 插入行的一部分
- 插入多行;
- 插入某些查询的结果
2、 插入完整行
要求指定表名和被插入到新行中的值
例如:INSERT INTO customers
VALUES(NULL,
‘Pep E. LaPew’,
‘100 Main Street’,
‘Los Angeles’,
‘CA’,
‘90046’,
‘USA’,
NULL,
NULL);
此例子插入一个新客户到表customers中。对每个列必须提供一个值,某列没有值则要用NULL代替。这种语法很简单但不安全因为它高度依赖表中列的定义顺序,还依赖于其次序容易获得的信息。
编写INSERT语句的更安全的方法如下:
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_eamil)
VALUES(‘Pep E. LaPew’,
‘100 Main Street’,
‘Los Angeles’,
‘CA’,
‘90046’,
‘USA’,
NULL,
NULL);
VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序
3、 插入多个行
可以使用多条INSERT语句,甚至一次提交它们,每条语句用一个分号结束
例如:INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(‘Pep E. LaPew’,
‘100 Main Street’,
‘Los Angeles’,
‘CA’,
‘90046’,
‘USA’);
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(‘M. Martian’,
’42 Galaxy Way’,
‘New York’,
‘NY’,
‘11213’,
‘USA’);
或者,只要每条INSERT语句中的列名(和次序)相同,可以如下组合各语句:
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VLAUES(
‘Pep E. LaPew’,
‘100 Main Street’,
‘Los Angeles’,
‘CA’,
‘90046’,
‘USA’),
(
‘M. Martian’,
’42 Galaxy Way’,
‘New York’,
‘NY’,
‘11213’,
‘USA’);
4、 插入检索出的数据
利用INSERT将一条SELECT语句的结果插入表中。这就是INSERT SELECT语句
例如:INSERT INTO customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM custnew;
INSERT SELECT 中SELECT语句可包含WHERE子句以过滤插入的数据。
十八、更新和删除数据
1、 更新数据
关键字:UPDATE
有两种方式使用UODATE:
- 更新表中特定行;
- 更新表中所有行。
基本的UODATE语句由三部分组成:
- 要更新的表
- 列名和他们的新值;
- 确定要更新行的过滤条件
例如:更新客户10005的电子邮件地址
UPDATE customers
SET cust_email=’elmer@fudd.com’
WHERE cust_id = 10005;
UPDATE语句总是以要更新的表的名字开始。SET命令用来将新值赋给被更新的列。UPDATE语句以WHERE子句结束,它告诉MySQL更新哪一行。
更新多个列时只需要单个SET命令,每个“列=值”对之间用逗号隔开(最后一列之后不用逗号)
例如:更新客户10005的电子邮件和姓名
UPDATE customers
SET cust_email = ‘elmer@fuss.com’,
Cust_name = ‘The Fudds’
WHERE cust_id = 10005;
2、 删除数据
关键字:DELETE
用两种方式使用DELETE:
- 从表中删除特定的行;
- 从表中删除所有行
例如:从customers表中删除一行:
DELETE FROM customers
WHERE cust_id = 10006;
如果省略WHERE子句,它将删除表中每个客户
3、 更新和删除的指导原则
-除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE和DELETE语句
-保证每个表都有主键,尽可能像WHERE子句那样使用它
-在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确
-使用强制实施引用完整性的数据库
十九、创建和操纵表
1、 创建表
一般有两种创建表的方式:
- 使用具有交互式创建和管理表的工具
- 表也可以直接用MySQL语句操纵
关键词:CREATE TABLE
为利用CREATE TABLE创建表,必须给出下列信息:
- 新表的名字,在关键字CREATE TABLE之后给出。
- 表列的名字和定义,用逗号隔开
例如:创建customers表:
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(5) NULL,
cust_zip char(10) NULL,
cust_country char(50) NULL,
cust_contact char(50) NULL,
cust_email char(255) NULL,
PRIMARY_KEY (cust_id)
) ENGINE=InnoDB;
NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行。
主键必须是唯一的。如果使用多个列作为主键,应以逗号分隔的列表给出各列名:
PRIMARY_KEY(order_num, order_item);
AUTO_INCREMENT的作用:AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量,给该列赋予下一个可用的值。每个表只允许一个AUTO_INCREMENT列,而且它必须被索引。
如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定:
quantity int NOT NULL DEFAULT 1,
2、 更新表
关键字:ALTER TABLE
使用方法:
-在ALTER TABLE之后给出要更改的表名
-所做更改的列表。
例如:给表添加一个列
ALTER TABLE vendors
ADD vend_phone CHAR(20);
删除刚刚添加的列,可以这样做:
ALTER TABLE vendors
DROP COLUMN vend_phone;
3、 删除表
删除表(删除整个表而不是其内容)非常简单,使用DROP TABLE语句即可
例如: DROP TABLE customers;
4、 重命名表
关键字:RENAME TABLE
例如:RENAME TABLE backup_customers TO customers,
backup_vendors TO vendors,
backup_products TO products;