最近回顾了一下MySQL,发现了一些MySQL需要注意的事项,同时也作为学习笔记,记录下来。
Mysql注意事项(三)
15、INSERT(插入数据)
方法一
使用基本的INSERT语法,指定表名和被插入到新行中的值。
示例:
1 2 3 4 5 6 7 8 9 10
| INSERT INTO customers VALUES(NULL, 'Pep E. LaPew', '10 Main Street', 'Logs Angeles', 'CA', '90046', 'USA', NULL, NULL);
|
注意:
虽然这种语法很简单,但并不安全,应该尽量避免使用。上面示例的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下一次表结构变动后各个列保持完全相同的次序。
方法二
总是使用列的列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| INSERT INTO customers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) VALUES('Pep E. LaPew', '10 Main Street', 'Logs Angeles', 'CA', '90046', 'USA', NULL, NULL);
|
使用列的列表能是SQL代码继续发挥作用,即使表结构发生了变化。
插入多个行
方式一:执行多条INSERT语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| INSERT INTO customers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES('Pep E. LaPew', '10 Main Street', 'Logs 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的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| INSERT INTO customers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES('Pep E. LaPew', '10 Main Street', 'Logs Angeles', 'CA', '90046', 'USA' ),('M. Martian', '42 Galaxy Way', 'New York', 'NY', '11213', 'USA' );
|
插入检索出的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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中的列名
不一定要求列名匹配。事实上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一个列,第二列将用来填充表列中指定的第二个列,如此等等。
16、UPDATE(更新数据)
不要省略WHERE子句
不使用WHERE子句,就会更新表中的所有行。
示例:
1 2 3
| UPDATE customers SET cust_email= '123@qq.com' WHERE cust_id=10007;
|
在UPDATE语句中使用子查询
1 2 3 4 5
| UPDATE custnew SET cust_email= (SELECT cust_email FROM customers WHERE cust_id=10004) WHERE cust_id=10107;
|
删除某列的值
可以将需要删除的列设置为NULL(假如表定义允许NULL值)。
1 2 3
| UPDATE customers SET cust_email= NULL WHERE cust_id=10005;
|
DELETE(删除数据)
不要省略WHERE子句
不使用WHERE子句,就会删除表中的所有行。
DELETE不需要列名或通配符。DELETE删除整行而不是删除列。
删除表的内容而不是表
DELETE语句从表中删除行,甚至是删除表中所有行,但是,DELETE不删除表本身。
更快的删除
如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句。它完成相同的工作,但速度更快(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。
示例:custnew是表名称