19插入数据
1插入完整的行
INSERT INTO customers
VALUES (NULL,
'Pep E. LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA'
NULL,
NULL);
各个列必须以它们在表中出现的次序填充。如果某个列没有值(如上例最后两列),应该使用NULL值。第一列为NULL是因为它是主键,由MySQL自动增量。
这种语法简单但不安全,因为高度依赖表中列的定义次序。
更安全的方法:
INSERT INTO customers(cust_name,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email,
cust_address)
VALUES ( 'Pep E. LaPew',
'Los Angeles',
'CA',
'90046',
'USA'
NULL,
NULL,
'100 Main Street');
VALUES必须以指定的次序匹配指定的列名,不一定按各个列在实际表中的次序。优点是,即使表的结构改变,词INSERT语句仍然可以正常工作。cust_id不需要出现在列表中(自动增量)。
省略列的条件
- 该列允许为NULL值
- 在表定义中给出默认值(包括自动增量)
数据库以检索为主,INSERT操作可能耗时,为了提高整体性能,通常需要添加关键词LOW_PRIORITY降低INSERT语句优先级:INSERT LOW_PRIORITY INTO。此法同样适用于接下来的UPDATE 和 DELETE语句。
2插入多个行
INSERT INTO customers(cust_name,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_address)
VALUES (一堆与上述列
对应值),
VALUES (另一堆与上述列
对应值);
3插入检索出的数据
使用场景:假如你想从另一表(custnew)中合并客户列表到你的customers表。
INSERT INTO customers(cust_id
cust_name,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_address)
SELECT cust_id
cust_name,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_address
FROM custnew;
注意:
- 必须保证cust_id值不重复(创建新表时避开customers中已使用过的cust_id或省略这列在导入时自动产生新值)
- MySQL不关心SELECT返回的列名,它匹配的是列的位置。对于只用不同列名的表导入数据时是非常有用的。
20更新和删除数据
1更新
更新客户的cust_name和cust_email列:
UPDATE customers
SET cust_name='The Fudds',
cust_email='elmer@fudd.com'
WHERE cust_id = 10005;
不要省略WHERE,否则可能会更新表中所有行。
2删除
删除客户10006:
DELETE FROM customers
WHERE cust_id = 10006;
如果没有WHERE,将删除表中每个客户。
DELETE语句从表中删除所有行后,不删除表本身。如果想删除所有行,可使用TRUNCATE TABLE语句。
MySQL没有撤销,在对UPDATE和DELETE语句使用WHERE之前,先用SELECT语句进行测试确保是要更新或删除的记录,防止WHERE子句不正确。