一、插入数据
1、插入
本章节介绍如何利用SQL地INSERT语句将数据插入表中。
插入可以用几种方式使用:
插入完整的行插入行的一部分插入多行插入某些查询的结果
2、插入完整的行
INSERT语句要求指定表名和被插入到新行中的值。
MariaDB [course]> INSERT INTO customers-> VALUES(NULL,'Kobe Bryant','Staples Center','Los Angeles','California','90046','USA','Mamba',NULL);Query OK, 1 row affected, 1 warning (0.00 sec)
存储到表列中的数据在VALUES子句中给出,对每个列必须提供一个值,没有则使用NULL。每个列必须以它们在表定义中出现的次填充。
上面的语法应尽量避免使用,因为其高度依赖于表中列的定义次序。编写依赖于特定列次序的SQL语句是很不安全的。
MariaDB [course]> INSERT INTO customers(cust_name,-> cust_address,-> cust_city,-> cust_state,-> cust_zip,-> cust_country,-> cust_contact,-> cust_email)-> VALUES('Lebron Jame','Staples Center','Los Angeles','California','90046','USA','KING','NULL');Query OK, 1 row affected, 1 warning (0.01 sec)
此例在表后的括号里明确的给出了列名,在插入行时,将利用VALUES列表中的相应值填入列表中的对应项。即使表的结构改变,该INSERT语句仍然能正常工作。
使用明确列插入的语法,还可以省略列(cust_id),可以只给某些列提供值,给省略的列不用提供值。
省略列必须满足以下的条件其一:
该列 定义为允许NULL值在表定义中给出默认值,如果不给出值则使用默认的值。
3、插入多个行
INSERT可以插入一行到一个表中,可以使用多条INSERT语句去插入多个行。甚至一次提交,每条语句用一个分号结束。
INSERT INTO customers(cust_name,-> cust_address,-> cust_city,-> cust_state,-> cust_zip,-> cust_country,-> cust_contact,-> cust_email)-> VALUES('Lebron Jame','Staples Center','Los Angeles','California','90046','USA','KING',NULL),('Kobe Bryant','Staples Center','Los Angeles','California','90046','USA','Mamba',NULL);
其中单条INSERT语句有多组值,每组值用一对圆括号括起来,用括号分隔。
MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。
4、插入检索出的数据
INSERT还可以将一条SELECT语句的结果插入表中,即INSERT SELECT
假如需要从另一张表中合并客户列表到你的customers表,这两个表的结构应该是一样的,以确保对应值插入时不会报错。
INSERT INTO customers(cust_name,-> cust_address,-> cust_city,-> cust_state,-> cust_zip,-> cust_country,-> cust_contact,-> cust_email)SELECT cust_name,-> cust_address,-> cust_city,-> cust_state,-> cust_zip,-> cust_country,-> cust_contact,-> cust_emailFROM custnew;
SELECT语句从custnew检索出要插入的值,而不是列出它们,SELECT中列出的每个列对应于customers表后所跟的列表中的每个列。
INSERT SELECT
中SELECT语句
可包含WHERE子句
以过滤插入的数据。
二、更新和删除数据
本章节介绍利用UPDATE和DELETE语句进一步操作表数据。
1、更新数据
为了更新表中的数据,可使用UPDATE语句,可采用两种方式:
更新表中的特定行更新表中的所有行
在使用UPDATE时不要省略WHERE子句,如果不适用就会更新表中的所有行。
UPDATE语句由3部分组成,要更新的表,列名和它们的新值,确定要更新行的过滤条件。
MariaDB [course]> UPDATE customers-> SET cust_email = 'elmer@'-> WHERE cust_id = 10005;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0
UPDATE语句总是要更新的表的名字开始,SET命令来将新值赋予被更新的列。
UPDATE语句以WHERE子句结束 ,它告诉MySQL更新哪一行,没有WHERE子句,将会更新customers表中的所有行,这一点需要牢牢记住。
更新多个列:
MariaDB [course]> UPDATE customers-> SET cust_name = 'The Fudds',->cust_email='fudd@'-> WHERE cust_id = 10005;Query OK, 1 row affected (0.01 sec)Rows matched: 1 Changed: 1 Warnings: 0
在更新多个列时,只需要使用单个SET命令,每个列值对之间用逗号分隔。
IGNORE关键字,如果使用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出现一个错误,则整个UPDATE操作被取消。即使是发生错误,也要继续进行更新可使用IGNORE 关键字。 UPDATE IGNORE customers …
2、删除数据
为了从一个表中删除数据,使用DELETE语句,可以使用两种方法:
从表中删除特定的行从表中删除所有行
不要省略WHERE子句:在使用DELETE一定要注意细心,如果忘记使用WHERE则会删除整张表的所有数据。
下面的语句删除custoemrs表的一行:
DELETE FROM customersWHERE cust_id = 10006;
DELETE不需要列名或通配符,DELETE删除整行而不是删除列,为了删除指定的列,请使用UPDATE语句。
DELETE语句删除表的内容而不是表,其从表中删除行但是不删除表本身。
如果项从表中删除所有行,可使用TRUNCATE TABLE语句,它完成相同的工作,但是速度更快。