插入数据
在建立一个空的数据库和数据表时,首先需要考虑的是如何向数据表中添加数据,该操作可以使用INSERT语句来完成。使用INSERT语句可以向一个已有数据表插一个新行,也就插入一行新记录。
在MySQL中,INSERT语句有3种语法格式,分别是INSERT... VALUES语句、INSERT... SET语句和INSERT... SELECT语句。
使用INSERT... VALUES语句插入数据
使用INSERT... VALUES语句插入数据,是INSERT语句的最常用的语法格式。
语法格式如下:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] 数据表名 [(字段名,...)]
VALUES ({值 | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE 字段名=表达式, ... ]
例子:
create database test; #创建库
use test; #进入库
create table info (id int not null,name char(16),score decimal(5,2),age int(8)); #创建表
插入测试数据
insert into info (id,name,score,age)values(1,'san',88,33);
insert into info (id,name,score,age)values(2,'lisi',48,31);
insert into info (id,name,score,age)values(3,'wwu',68,27);
insert into info (id,name,score,age)values(4,'pw',98,25);
insert into info (id,name,score,age)values(5,'wlk',19,37);
insert into info (id,name,score,age)values(3,'lihua',58,23);
SELECT * FROM info;
使用INSERT... SET语句插入数据
在MySQL中,除了使用INSERT... VALUES语句可以插入数据外,还可以使用INSERT... SET语句插入数据。这种语法格式用于通过直接给表中的某些字段指定对应的值来实现插入指定数据,对于未指定值的字段将采用默认值进行添加。
INSERT... SET语句的语法格式如下:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] 数据表名
SET 字段名={值 | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE 字段名=表达式, ... ]
例子:
insert into info SET id =8, name='xiaohong',score=88,age=56;
SELECT * FROM info;
插入查询结果
在MySQL中,支持将查询结果插入到指定的数据表中,这可以通过>INSERT...SELECT语句来实现。
语法如下:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] 数据表名 [(字段名,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE 字段名=表达式, ... ]
例子:
insert into info(id,name,score,age)SELECT * from info where id=4;
SELECT * FROM info;
修改数据
要执行修改的操作可以使用UPDATE语句,
语法如下:
UPDATE [LOW_PRIORITY] [IGNORE] 数据表名
SET 字段1=值1 [, 字段2=值2 ...]
[WHERE 条件表达式]
[ORDER BY ...]
[LIMIT 行数]
例子:
UPDATE info set score=77 where age <=30;
SELECT * FROM info;
删除数据
在数据库中,有些数据已经失去意义或者错误时就需要将它们删除,在MySQL中,可以使用DELETE语句或者TRUNCATE TABLE语句删除表中的一行或多行数据.
通过DELETE语句删除数据
通过DELETE语句删除数据的基本语法格式如下:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM 数据表名
[WHERE 条件表达式]
[ORDER BY ...]
[LIMIT 行数]
例子:
DELETE FROM info;
DELETE from info WHERE id=4;
SELECT * FROM info;
通过TRUNCATE TABLE语句删除数据
在删除数据时,如果要从表中删除所有的行,那么不必使用通过TRUNCATE
TABLE语句删除数据的基本语法格式如下:
TRUNCATE [TABLE] 数据表名
例子:
TRUNCATE table info;
Drop,Truncate,Delete区别
1.drop (删除表):删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
2.truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。
注意:truncate 不能删除行数据,要删就要把表清空。
3.delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存。以便进行进行回滚操作。truncate与不带where的delete :只删除数据,而不删除表的结构(定义)
4.runcate table 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用delete如果要删除表定义及其数据,请使用 drop table 语句。
5.对于由foreign key约束引用的表,不能使用truncate table ,而应使用不带where子句的delete语句。由于truncate table 记录在日志中,所以它不能激活触发器。
6.执行速度,一般来说: drop> truncate > delete。
7.delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
8.truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger
来源:51CTO
作者:低调的男孩
链接:https://blog.51cto.com/13760351/2473841