1 插入数据
1.1 数据插入
数据插入的方式有:插入完整的行、插入行的一部分、插入多行、插入某些查询的结果。
1.2 数据插入
将数据插入表中最简单的方法是使用INSERT
语法,其要求指定表名和被插入到新行中的值。命令示例如下:
INSERT INTO table1 VALUES('TN8', 8, '14723580', 'x', 9, 8.88, '2019-05-21');
结果如下:
从下图可以看出,TN8
已经插入到表中
上述语句中table1
表示要插入的表格,VALUSE
表示一行数据,这里是按列的顺序依次填充的,若数据与表格的格式不对应,则会报错。因此这样的SQL语句高度依赖表中列的定义次序,并且还依赖于其次序任意获得的信息。更加安全但稍微繁琐的方法是将列名一并列出来,示例如下:
INSERT INTO table1(name,id,phone,home,quantity,price,order_date) VALUES('TN8', 8, '14723580', 'x', 9, 8.88, '2019-05-21');
按照此方式,由于提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序。其优点是即使表的结构改变,此INSERT
语句仍然能正确工作。一般不要使用没有明确给出列的列表的INSERT语句
省略列: 若表的定义允许,这可以在INSERT
操作中省略某些列。其中省略的列必须满足以下某个条件:
- 该列定义为允许NULL值(无值或空值)
- 在表定义中给出默认值
在数据检索时可以通过在INSERT
和INTO
之间添加关键字LOW_PRIORITY
,指示MySQL降低INSERT
语句的优先级,示例如下:
INSERT LOW_PRIORITY INTO
这也适用于后面的UPDATE
和DELETE
语句。
1.3 插入多行
使用单条插入的方法,增加多个VALUES即可:
INSERT INTO table1(name, id, phone, home, quantity, price, order_date) VALUES('TN9', 9, '12367809', 'x', 8, 11, '2019-05-21'),('TN10', 10, '09751256', 'x', 7, 12, '2019-05-21');
其中单条INSERT语句有多组值,每组值用一对用逗号分隔,圆括号括起来。此方式可以提高数据库处理的性能,因为MySQL用单条INSERT
语句处理多个比使用多条INSERT
语句快。
1.4 插入检索出的数据
INSERT
还存在另一种形式,可以利用它将一条SELECT语句的结果插入表中,即INSERT SELECT
。若想从table1中合并某些数据到table2。不需要每次读取一行,然后再将它用INSERT
插入,可以进行如下操作:
INSERT INTO
table2(name,quantity,price,order_date)
SELECT name,quantity,price,order_date
FROM table1;
结果如下:
使用Navicat查看列表
操作前 | 操作后 |
---|---|
注意: 没有设置默认值的列一定要加上
2 更新和删除数据
2.1 更新数据
为了更新(修改)表中的数据,可使用UPDATE
语句,UPDATE
的两种使用方法:
- 更新表中的特定行
- 更新表中的所有行
基本的UPDATE
语句由三部分组成:
- 要更新的表
- 列名和其新值
- 确定要更新行的过滤条件
若要更新表中某一个phone的值:
UPDATE table1 SET phone = '11112222' WHERE id = 5;
结果如下:
这里要更新的表的名字为table1,SET
命令用来将新值赋给被更新的列;WHERE
命令来指示MySQL更新哪一行。若要修改多个值,则在SET
后面增加一个“列 = 值”对即可,每个“列 = 值”对之间用逗号分隔(最后一列之后不用逗号)
UPDATE table1 SET phone = '11112222', home = 's' WHERE id = 5;
为了删除某个列的值,可将其设置为NULL(假设表定义允许NULL值)。示例如下:
UPDATE table1 SET phone = NULL
WHERE id = 5;
2.2 删除数据
为了删除(去掉)表中的数据,可使用DELETE
语句,DELETE
的两种使用方法:
- 从表中删除特定行
- 从表中删除所有行
不要省略WHERE子句:在使用DELETE时一定要注意,因为稍不注意,就会错误地删除表中所有行,若要删除表中某一行:
DELETE FROM table1 WHERE id = 5;
结果如下:
DELETE
不需要列名或通配符。DELETE
删除整行而不是删除列。为了删除指定的列,需要使用UPDATE
语句。
更快的删除: 如果想从表中删除所有行,不要使用DELETE
。可使用TRUNCATE TABLE
语句,改语句可以完成相同的工作,且速度更快( TRUNCATE
实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。
2.3 更新和删除的指导原则
如果执行UPDATE
而不带WHERE
子句,则表中每个行都将用新值更新。类似地,如果执行DELETE
语句而不带WHERE
子句,表的所有数据都将被删除。使用UPDATE
或DELETE
时,一般遵循的原则:
- 除非打算更新或删除每一行,否则一定要使用带
WHERE
子句的UPDATE
或DELETE
语句 - 保证每个表都有主键,尽可能像
WHERE
子句那样使用它 - 在对
UPDATE
或DELETE
语句使用WHERE
子句前,应该先用SELECT
进行测试,保证它过滤的是正确的记录,以防编写的WHERE
子句不正确。