数据插入
INSERT是用来插入或者添加行到数据库表的,插入可以分为几种方法
- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查询的结果
插入完整的行
mysql> INSERT INTO customers VALUES(NULL, 'zhangsan', 'shandong', NULL, NULL, NULL, NULL, '15053631234', '155053631234@qq.com');
Query OK, 1 row affected (0.01 sec)
此例子插入一个新客户到customers表,存储到每个表列中的数据在VALUES语句中给出,对每个列必须提供一个值
虽然这种语法很简单,但并不安全,应该尽量避免使用
在这个例子中高度依赖特定的次序信息,如果这样做,有时难免出问题
mysql> INSERT INTO customers(
-> cust_name,
-> cust_address,
-> cust_contact,
-> cust_email
-> )
-> VALUES(
-> 'lisi',
-> 'shandong',
-> '15053631235',
-> '15053631235@qq.com');
Query OK, 1 row affected (0.01 sec)
- 此例子完成了与前一个INSERT语句完全相同的工作
- 因为提供了列名,VALUES必须按照其指定的次序匹配指定的列名,不一定按照各个列出现在实际表中的次序,
- 优点是即使表的结构改变,此INSERT语句依然能够正确的执行工作
不管使用哪种INSERT语法,都必须给出CALUES的正确数目
使用指定列名和值这种语法,还可以省略列。这表示可以只给某些列提供值,给其他列不提供值
省略列必须满足的条件
- 该列定义为允许null值
- 在表定义中给出默认值(如果不给出值,将使用默认值)
插入多个行
mysql> INSERT INTO customers( cust_name, cust_address, cust_contact, cust_email ) VALUES( 'lisi', 'shandong', '15053631235', '15053631235@qq.com'),('wangwu', 'shandong', '15053631236', '15053631236@qq.com');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
其中单条INSERT语句有多组值,每组值用一对圆括号括起来,用逗号分隔
更新和删除数据
更新列
为了更新(修改)表中的数据,可使用UPDATE语句,可采用两种方式使用UPDATE
- 更新表中特定行
- 更新表中所有行
UPDATE语句非常容易使用,基本的UPDATE语句由三部分组成
- 要更改的表
- 列名和他们的新值
- 确定要更新行的过滤条件
客户cust_id为1现在有了新的电子邮件地址,因此他的记录需要更新,
mysql> UPDATE customers
-> SET cust_email='15053631234@163.com'
-> WHERE cust_id=1;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
- UPDATE语句总是以要更新的表的名字开始.
- 需要更新表的名字是customers,
- SET子语句用来将新值赋值给被更新的列
- WHERE子语句用来确定更新哪一行.如果没有WHERE语句,会将该邮件地址更新到所有行中,这不是我们希望看到的
更新多个列
mysql> UPDATE customers SET cust_name='zhangsan1',cust_email='15053631234@163.com' WHERE cust_id=1;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
在更新多个列时,只需要使用单个SET命令,每个"列=值"对之前的使用逗号分隔,最后一列之后不用逗号
删除数据
为了从一个表中删除数据,使用DELETE语句,可以使用两种方式
- 从表中删除特定的行
- 从表中删除所有行
前面说过,UPDATE非常容易使用,而DELETE更容易使用
下面的语句从customers表中删除一行
mysql> DELETE FROM customers
-> WHERE cust_id=3;
Query OK, 1 row affected (0.03 sec)
这条语句很容易理解.DELETE FROM要求制定从中删除数据的表名,WHERE字句过滤要删除的行,
在这个例子中,只删除客户id为3,如果省略了WHERE子句,他将删除表中每个客户