​数据管理是指对数据的新增、修改和删除操作,本小节将介绍如何使用SQL语句进行数据管理。需要强调:SQL语句不区分大小写。

17.5.1向表中插入数据

为方便演示数据管理的操作效果,读者需先在数据库中建立一张表示QQ游戏玩家的Uers表,表的结构如图17-34所示。​

第十七章《MySQL数据库及SQL语言简介》第5节:数据管理_修改数据

图17-34 Uers表结构​

可以看出:Users表有5个列,它们分别是USER_QQ(用户QQ号)、USER_NAME(用户昵称)、USER_SEX(用户性别)、USER_BIRTHDAY(用户生日)以及USER_PHONE(用户手机号)。本小节就以对Users表的数据管理为例进行讲解。​

向表中插入数据的常用格式有3种,第一种格式为:​

INSERT [INTO] TABLE_NAME VALUES (V1,V2…Vn)

在这个语法格式中,“INSERT”是一个关键字,表示“插入”操作,格式中“[INTO]”的“[]”表示可选,也就说语句中可以写也可以不写INTO关键字,“TABLE_NAME”是表名称,向哪一个数据表中插入数据就写哪一个数据表的名称,“VALUES”也是一个关键字,它表示插入的数据值,而“VALUES”后面的“(V1,V2…Vn)”则表示要插入的真实数据值。需要注意:V1、V2这些值的顺序要与数据表中的各个列的顺序对应,并且要求有多少个列,就写多少个真实的数据值。在书写这些真实的数据值时,如果是非数值类型的数据值要用单引号引起来。下面的【例17_01】能够向Users表中插入一条数据。​

【例17_01插入数据1】

Exam17_01.sql​

INSERT INTO USERS VALUES ('20020101', '周天', '男', '1999-02-01', '13811112222')

在Workbench中运行SQL语句的步骤是:首先双击数据库名称,这样做的目的是通知MySQL服务器现在要操作的是哪一个数据库。之后在“File”菜单中单击“New Query Tab”菜单项,这样就能打开一个文本编辑窗口,在文本编辑窗口中输入SQL语句,然后单击工具栏中的执行按钮即可,如图17-35所示。​

第十七章《MySQL数据库及SQL语言简介》第5节:数据管理_修改数据_02

图17-35 运行SQL语句​

向表中插入数据的第二种格式为:​

INSERT [ INTO] TABLE_NAME (COL1,COL2…COLn) VALUES (V1,V2…Vn)

在这种书写格式中,COL1,COL2…COLn代表了列的名称,后面的数据值V1,V2…Vn要与前面出现的列名称一一对应,而不是与数据表中列的名称一一对应。此外,如果某个列被设计为允许为空,那么这个列的名称可以不出现在语句中,而对应的数据值也不应出现在语句中。下面的【例17_02】展示了这种插入数据的方式。​

【例17_02插入数据2】

Exam17_02.sql​

INSERT INTO USERS (USER_QQ,USER_NAME,USER_SEX,USER_BIRTHDAY,USER_PHONE)
VALUES ('20020102', '周天', '男', '1999-02-01', '13811112222');

INSERT INTO USERS (USER_NAME,USER_QQ ,USER_SEX,USER_BIRTHDAY,USER_PHONE)
VALUES ('周地', '20020103', '男', '1998-02-01', '13811112223');

INSERT INTO USERS (USER_QQ,USER_NAME,USER_SEX,USER_PHONE)
VALUES ('20020104', '周人', '男', '1997-02-01', '13811112224');

【例17_02】中展示了3条插入数据的SQL语句,第一条语句中,列名称的顺序与数据表中列的实际顺序完全相同。第二条语句中,列名称的顺序与数据表中列的实际顺序不相同,语句中先出现USER_NAME列后出现,USER_QQ列,而数据表中实际先出现的是USER_QQ列后出现的是USER_NAME列,这种情况是允许的,在这种情况下,数据值的出现顺序要与语句中列名称出现的顺序对应,这样各个数据值就能准确的插入对应的列。第三条语句中没有出现USER_BIRTHDAY列,对应的后面VALUES中也不出现它的值。但需要注意,只有那些允许为空值的列才可以不出现在插入语句中。​

向表中插入数据的第三种格式为:​

INSERT [ INTO] TABLE_NAME [ (COL1,COL2…COLn) ]

VALUES (V11,V12…V1n),

(V21,V22…V2n),

(V31,V32…V3n)

这种格式是前两种格式的“加强版”,它可以一次性插入多条数据。​

17.5.2更新表中数据

更新表中数据的格式是:​

UPDATE TABLE_NAME

SET {COL_NAME=EXPRESSION}[ ,...n ]

[WHERE CONDITION_EXPRESSION]

在这个格式中,“UPDATE”是一个关键字,表示更新数据。“TABLE_NAME”表示表的名称,“SET”也是一个关键字,表示把列COL_NAME的值设置为EXPRESSION,这个设置子句可以出现多次,这样的话就能用一条语句同时修改多个列上的值。需要注意:格式中的“EXPRESSION”意为表达式,这个表达式可以是一个运行的结果,还可以直接是一个固定的值。在语句的最后是“[WHERE CONDITION_EXPRESSION]”,前面讲过“[]”表示可选,也就是说最后的字句可以有也可以没有。“[WHERE CONDITION_EXPRESSION]”表示一个条件,其中“WHERE”是一个关键字,如果添加条件就必须写这个关键字。如果更新数据的SQL语句中包含“[WHERE CONDITION_EXPRESSION]”,则表示只更新符合条件的数据,而如果不包含则表示更新所有数据。下面的【例17_03】能够把Users表中所有的玩家性别都改成男性。​

【例17_03更新数据1】

Exam17_03.sql​

UPDATE USERS SET USER_SEX='男'

下面的【例17_04】能够把Users表中所有的玩家性别都改成男性并且同时把玩家的生日改成1999年6月1日​

【例17_04更新数据2】

Exam17_04.sql​

UPDATE USERS SET USER_SEX='男',USER_BIRTHDAY='1999-06-01'

下面的【例17_05】能够把Users表中QQ号为12302的玩家性别改为女性。​

【例17_05更新数据3】

Exam17_05.sql​

UPDATE USERS SET USER_SEX='女' WHERE USER_QQ='12302'

17.5.3删除表中数据

删除表中数据的格式有两种,第一种是:​

DELETE [FROM] TABLE_NAME [WHERE CONDITION_EXPRESSION]

TABLE_NAME是要删除数据的表的名字。WHERE CONDITION_EXPRESSION是删除数据的条件,如果DELETE语句中没有WHERE子句限制,表中的所有数据都将被删除。​

下面的【例17_06】能够把Users表中性别为女的玩家信息全部删掉。​

【例17_06删除数据1】

Exam17_06.sql​

DELETE FROM USERS WHERE USER_SEX='女'

删除表中数据的第二种格式是:​

TRUNCATE TABLE TABLE_NAME

TABLE_NAME是要删除数据的表的名字,需要注意:这种格式的语句不能加WHERE字句,它一次性删除表中的全部数据。TRUNCATE TABLE语句不记录日志,只记录整个数据页的释放操作,而DELETE语句对每一行修改都记录日志,所以TRUNCATE TABLE语句总比没有指定条件的DELETE语句快。因为TRUNCATE TABLE操作是不进行日志记录的,所以建议在TRUNCATE TABLE语句之前用先对数据库作备份。下面的【例17_07】能够把Users表中所有数据全部删除。​

【例17_07删除数据2】

Exam17_07.sql​

TRUNCATE TABLE USERS

本文字版教程还配有更详细的视频讲解,小伙伴们可以点击这里观看。