目录
成功创建数据库和数据表之后,就可以针对表中 的数据进行各种交互式的操作,这些操作可以有效地使用、维护和管理数据库中的数据,其中常用的操作包括:增加、删除、修改操作。
以下为下面示例所使用的数据表的创建:
CREATE DATABASE db_database08 CHARACTER SET utf8 COLLATE utf8_general_ci;
USE db_database08;
CREATE TABLE IF NOT EXISTS tb_admin(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
USER VARCHAR(30) NOT NULL,
PASSWORD VARCHAR(30) NOT NULL,
createtime DATETIME NULL
);
DESC db_database08.`tb_admin`;
插入数据
通过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 字段名=表达式,......]
参数说明如下:
[ low_priority | delayed | high_priority | ignore ]:可选项,
①low_priority 是insert、update和delete语句都支持的一种可选修饰符,通常用在多用户访问数据库的情况下,用于指示MySQL降低insert、update和delete操作执行的优先级;
②delayed是insert语句支持的一种可选修饰符,用于指定MySQL服务器把插入的行数据放到一个缓冲器中,直到待插数据的表空闲时,才真正在表中插入数据行;
③high_priority是insert和select语句支持的一种可选修饰符,用于指定insert和select操作优先执行的;
④ignore:可选项,表示在执行insert语句时,所有出现错误都会被当做警告处理;
[ into ] 数据表名:可选项,用于指定被操作的数据表
[ (字段名,......) ]:可选项,当不指定该选项时,表示要向表中所有列插入数据,否则表示向指定列插入数据
values ( { 值 | default },....... ),(......),......:必选项,用于指定需要插入的数据清单,顺序必须和字段的顺序相对应;数据类型要与对应的字段类型相匹配;也可以使用default关键字,表示插入默认值,但是前提是指定了默认值,否则会报错
[on duplicate key update 字段名=表达式,......]:可选项,用于指定向表中插入行时,如果导致unique key或primary key 出现重复值,系统会根据update后面的语句修改表中原有行数据
insert.......values语句在使用时,通常有以下3种方式。
插入完整数据
通过不指定字段可以插入完整的数据记录
INSERT INTO tb_admin VALUES(1,'mr','mrsoft',NOW());
SELECT *FROM tb_admin;
插入数据记录的一部分
指定插入表的一行种的某几个字段的值
INSERT INTO tb_admin(USER,PASSWORD) VALUES('rjkflm','111');
SELECT *FROM tb_admin;
插入多条记录
通过insert.......values语句可以实现一次性插入多条数据记录,使用该方法批量插入数据,比使用多条单行的insert语句效率要高
INSERT INTO tb_admin(USER,PASSWORD ,createtime) VALUES('mrbccd','111','2014-09-05 10:35:26')
,('mingri','111','2014-09-05 10:45:27')
,('mingrisoft','111','2014-09-05 10:55:28');
SELECT *FROM tb_admin;
使用insert.....set语句插入数据
这种语法格式用于通过直接给表中的某些字段指定对应的值来实现插入指定数据,对于未指定的字段将采用默认值进行添加。语法格式如下:
insert [ low_priority | delayed | high_priority | ignore ]
[ into ] 数据表名
set 字段名={ 值 | default },......
[on duplicate key update 字段名=表达式,......]
参数说明:
set 字段名={ 值 | default },......:用于指定字段要插入的值
INSERT INTO tb_admin SET USER='mrbccd',PASSWORD='111',createtime=NOW();
SELECT * FROM tb_admin;
使用insert.....select语句插入数据
使用insert.....set语句将查询结果插入到指定的数据表中,语法格式如下:
insert [ low_priority | delayed | high_priority | ignore ]
[ into ] 数据表名 [ (字段名,...... ) ]
select ......
[on duplicate key update 字段名=表达式,......]
参数说明如下:
select ......:用于快速从一个或多个表中取出数据,并将这些数据作为行数据插入到目标数字据表中。注意:select子句返回的结果集中的字段数,字段类型必须与目标数据表完全一致。
CREATE TABLE IF NOT EXISTS tb_mrbook(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
USER VARCHAR(40) NULL,
pass VARCHAR(20) NULL,
bookname VARCHAR(50) NULL,
TYPE VARCHAR(20) NULL,
price VARCHAR(20) NULL
);
DESC db_database08.`tb_mrbook`;
INSERT INTO tb_mrbook VALUES(1,'zhang','111','java开发实战宝典','PHP','86')
,(2,'LIU','111','PHP开发实战宝典','JAVA','79')
,(3,'ZHAO','123','PHP编程词典','PHP','298')
,(4,'mr','111','MySQL入门与实践','MySQL','89');
SELECT *FROM tb_mrbook;
INSERT INTO db_database08.`tb_admin`(USER,PASSWORD) SELECT USER,pass FROM tb_mrbook;
SELECT*FROM db_database08.`tb_admin`;
修改数据
要执行修改的操作可以使用update语句,语法格式如下:
update [ low_priority ] [ ignore ] 数据表名
set 字段1=值1 [ ,字段2=值2 ......]
[where 条件表达式]
[ order by .....]
[ limit 行数]
参数说明如下:
set 字段1=值1 [ ,字段2=值2 ......]:必选项,用于指定要修改的字段名及字段值,值可以是表达式,也可以是默认值default
[where 条件表达式]:可选项,用于限定表中要修改的行,如果不指定该子句,那么将会更新表中的所有行
[ order by .....]:可选项,用于限定表中的行被修改的次序
[ limit 行数]:可选项,用于限定被修改的行数
UPDATE db_database08.`tb_admin` SET PASSWORD='123' WHERE USER='mrbccd';
SELECT *FROM db_database08.`tb_admin` WHERE USER='mrbccd';
删除数据
在数据库中,使用delete或则truncate table删除表中的一行或多行数据
通过delete语句删除数据
通过通过delete语句删除数据,语法格式如下:
delete[ low_priority ] [quick] [ ignore ] from 数据表名
[where 条件表达式]
[ order by .....]
[ limit 行数]
参数说明如下:
[quick] :用于加快部分种类的删除操作速度
※注意
在该语句执行的过程中,如果没有指定where条件,将删除所有的记录;如果指定了where条件,将按照指定的条件进行删除。
在实际的应用中,执行删除操作时,执行删除的条件一般应该为数据的id,而不是具体某个字段值,这样可以避免一些错误发生。
DELETE FROM tb_admin WHERE USER='mr';
通过truncate table 语句删除数据
在删除数据时,从表中删除所有的行 ,语法格式如下:
truncate [table] 数据表名
※注意:
由于truncate table语句会删除数据表中的所有数据,并且无法恢复,因此使用truncate table语句时一定要十分小心。
delete语句和truncate table语句的区别
使用truncate table语句后,表中的auto_increment计数器将被重新设置为该列的初始值。
对于参与了索引和视图的表,不能使用truncate table语句来删除数据,而应用使用delete语句。
truncate table操作与delete操作使用的系统和事务日志资源少。delete语句每删除一行都会在事务日志中添加一行记录,而truncate table语句是通过释放存储表数据所用的数据页来删除数据的,因此只在事务日志中记录页的释放。