从表里删除数据
DELETE 命令用于从表里删除整行数据。它不能删除某一列的数据,而是删除行里全部字段的数据。使用 DELETE 语句一定要谨慎,因为它一向很有效。
一、删除数据操作
语法:DELETE FROM 表名 WHERE 删除条件;
叙述:此语句删除表中的行,如果不带 WHERE 子句,则删除整个表中的记录,但是表不被删除。
注意:我们几乎不会使用没有 WHERE 子句的 DELETE 语句。
例1:删除student表中的所有年龄小于18岁的记录:
delete from student where sage<18;
例2:将 Store_Information 表里有关 Los Angeles 的资料全部去除:
DELETE FROM Store_Information WHERE store_name = "Los Angeles"
现在 Store_Information 表的内容变成:
store_name Sales Date
San Diego $250 Jan-07-1999
Boston $700 Jan-08-1999
例3:删除 stu 表中所有 score 字段小于60的记录:
DELETE FROM stu WHERE score<60;
如果没有指定条件,即 WHERE score<60,那么将会删除数据库中所有记录:DELETE FROM stu;
这时候 stu 表将变成空白的一张表。
二、清空数据表
有时候我们会需要清除一个表格中的所有资料。要达到这个目的,一种方式是我们在上一页看到的 DROP TABLE 指令。不过这样整个表格就消失,而无法再被用了。另一种方式就是运用 TRUNCATE TABLE 的指令。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。
语法: TRUNCATE TABLE 表名;
例:清除顾客信息表里的全部数据:
TRUNCATE TABLE customer;
三、SQL脚本的导入导出
1、导入 SQL 脚本
1)Mysql 导入数据库
创建用户 : GRANT ALL PRIVILEGES ON *.* TO '用户名'@'localhost' IDENTIFIED BY '用户名' WITH GRANT OPTION;
创建数据库 : create database 数据库名;
导入数据库 : mysql -u用户名 -p密码 数据库名 < 文件名.sql
2)Navicat for MySQL 导入数据库
在软件 Navicat for MySQL 中创建一个新的 database,右键点击此 database,从 menu 中选择“运行SQL文件”(如下图所示),输入脚本文件的路径,导入SQL脚本。
2、导出 SQL 脚本
1)Mysql 导出数据库
导出数据库 :mysql -u用户名 -p密码 数据库名 > 文件名.sql
2)Navicat for MySQL 导出数据库
选中要导出的 database,点击右键,从 menu 中选择“转储SQL文件”(如下图所示),输入脚本文件的存储路径,导出SQL脚本。
【参考资料】
W3school 在线SQL教程 http://www.w3school.com.cn/sql/sql_delete.asp SQL DELETE 语句
课后练习:
1. 在前面创建的 PLAYERS 表里,把 Ron Hammer 的记录删除,用 Al Knotgood 替换他。
2. 在前面创建的员工表 employee 表里:
1)删除表里名称为'zs'的记录;
2)删除表里所有记录;
3)使用 truncate 删除表中记录。
3. 使用具有如下结构的表 EMPLOYEE_TBL:
Column data type not null
Last_name varchar2(20) not null
First_name varchar2(20) not null
Ssn char(9) not null
Phone number(10) null
LAST_NAME FIRST_NAME SSN PHONE
SMITH JOHN 312456788 3174549923
ROBERTS LISA 232118857 3175452321
SMITH SUE 443221989 3178398712
PIERCE BILLY 310239856 3176763990
下列语句运行后会有什么结果?
a.
insert into employee_tbl
('JACKSON' , 'STEVE' , '313546078' , '3178523443');
b.
insert into employee_tbl values
('JACKSON' , 'STEVE' , '313546078' , '3178523443');
c.
insert into employee_tbl values
('MILLER' , "DANIEL , '230980012' , NULL);
d.
insert into employee_tbl values
('TAYLOR' , NULL , '445761212' , '3179221331');
e.
delete from employee_tbl ;
f.
delete from employee_tbl
where last_name='SMITH';
g.
delete from employee_tbl
where last_name='SMITH'
and first_name='JOHN';
h.
update employee_tbl
set last_name='CONRAD';
i.
update employee_tbl
set last_name='CONRAD'
where last_name='SMITH';
j.
update employee_tbl
set last_name='CONRAD',
first_name='LARRY';
k.
update employee_tbl
set last_name='CONRAD',
first_name='LARRY'
where ssn='313546078';
4. 创建 pet 表:
CREATE TABLE pet
(name CHAR(30),
owner CHAR(30),
species CHAR(10),
sex ENUM("M","F") NOT NULL,
birth DATE,
death DATE );
填充表里数据如下:
Fluffy Harold cat F 1993-02-04 NULL
Claws Gwen cat M 1994-03-17 NULL
Buffy Harold dog F 1989-05-13 NULL
Chirpy Gwen bird F 1998-09-11 NULL
Fang Benny dog M 1990-08-27 NULL
Bowser Diane dog M 1990-08-31 1995-07-29
Whistler Gwen bird NULL 1997-12-09 NULL
Slim Benny snake M 1996-04-29 NULL
Puffball Diane hamster F 1999-03-30 NULL
要求:
1)将 Whistler 的 sex 改为 M;
2)将 Fang 的 death 改为 2002-05-28;
3)删除 cat Claws 的记录;
4)删除 Benny 的宠物的记录;
5)删除所有 snake 的记录;
6)清空 pet 表。
5. 导入练习脚本 learnsql.sql,使用其中的表 PRODUCTS_TBL 进行下面的练习。
向产品表添加如下产品:
PROD_ID PROD_DESC COST
301 FIREMAN COSTUME 24.99
302 POLISEMAN COSTUME 24.99
303 KIDDIE GRAB BAG 4.99
要求:1)修改所添加的前两种服装的价格,它们应该与witch costume 同价。
2)现在要缩减产品线,首先对新产品下手。删除刚刚添加的3种产品。
3)在执行DELETE语句之前,有什么办法可以用来确定所删除的数据准确无误呢?
6. 写出 SQL语句的格式 : 插入,更新,删除;
创建表 User 并填充数据如下:
Name Tel Content Date
-----------------------------------------------------------
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
完成下面的练习:
1) 有一新记录(小王 13254748547 高中毕业 2007-05-06),请用SQL语句新增至表中。
2) 把张三的时间更新成为当前系统时间。
3) 删除名为张四的全部记录。