七、MySQL插入、更新与删除数据
存储在系统中的数据是数据库管理系统(DBMS)的核心,数据库被设计用来管理数据的存储、访问和维护数据的完整性。MySQL中提供丰富的数据管理语句,包括插入数据的INSERT、更新数据的UPDATE以及删除数据的DELETE语句。
7.1、插入数据
为表的所有字段插入数据
使用基本的INSERT语句插入数据,要求指定表名称和插入到新纪录中的值,其基本语法为:
INSERTINTOtbl_name(column_list)VALUES(value_list)
在插入数据前,首先创建一张表:
mysql>CREATETABLEperson->(->idINTUNSIGNEDNOTNULLAUTO_INCREMENT,->nameCHAR(40)NOTNULLDEFAULT'',->ageINTNOTNULLDEFAULT0,->infoCHAR(50)NULL,->PRIMARYKEY(id)->);QueryOK,0rowsaffected(0.03sec)
在person表中,插入一条新记录,id值为1,name值为Green,age值为21,info值为Lawyer
mysql>INSERTINTOperson(id,name,age,info)->VALUES(1,'Green',21,'Lawyer');QueryOK,1rowaffected(0.02sec)mysql>SELECT*FROMperson;+----+-------+-----+--------+|id|name|age|info|+----+-------+-----+--------+|1|Green|21|Lawyer|+----+-------+-----+--------+1rowinset(0.00sec)
在person表中,插入一条新记录,id值为2,name值为Suse,age值为22,info值为dancer
mysql>INSERTINTOperson(age,name,id,info)->VALUES(22,'Suse',2,'dancer');QueryOK,1rowaffected(0.02sec)mysql>SELECT*FROMperson;+----+-------+-----+--------+|id|name|age|info|+----+-------+-----+--------+|1|Green|21|Lawyer||2|Suse|22|dancer|+----+-------+-----+--------+2rowsinset(0.00sec)
为表的指定字段插入数据
在person表中,插入一条新记录,name值为Willam,age值为20,info值为sports man
mysql>INSERTINTOperson(name,age,info)->VALUES('Willam',20,'sportsman');QueryOK,1rowaffected(0.02sec)mysql>SELECT*FROMperson;+----+--------+-----+------------+|id|name|age|info|+----+--------+-----+------------+|1|Green|21|Lawyer||2|Suse|22|dancer||3|Willam|20|sportsman|+----+--------+-----+------------+3rowsinset(0.00sec)
在person表中,插入一条新记录,name值为laura,age值为25
mysql>INSERTINTOperson(name,age)VALUES('Laura',25);QueryOK,1rowaffected(0.01sec)mysql>SELECT*FROMperson;+----+--------+-----+------------+|id|name|age|info|+----+--------+-----+------------+|1|Green|21|Lawyer||2|Suse|22|dancer||3|Willam|20|sportsman||4|Laura|25|NULL|+----+--------+-----+------------+4rowsinset(0.00sec)
可以发现id字段在插入数据后,没有赋值时自动增加,在这里id字段为表的主键,不能为空,紫铜会自动为字段插入自增的序列值。
同时插入多条记录
INSERT语句可以同时相数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开,基本语法为:
INSERTINTOtbl_name(column_list)VALUES(value_list1),(value_list2),(value_list3);
在person表中,在name、age和info字段指定插入值,同时插入3条新记录
mysql>INSERTINTOperson(name,age,info)->VALUES('Evans',27,'secretary'),->('Dale',22,'cook'),->('Edison',28,'singer');QueryOK,3rowsaffected(0.02sec)Records:3Duplicates:0Warnings:0mysql>SELECT*FROMperson;+----+--------+-----+------------+|id|name|age|info|+----+--------+-----+------------+|1|Green|21|Lawyer||2|Suse|22|dancer||3|Willam|20|sportsman||4|Laura|25|NULL||5|Evans|27|secretary||6|Dale|22|cook||7|Edison|28|singer|+----+--------+-----+------------+7rowsinset(0.00sec)
在person表中,不指定插入列表,同时插入2条新记录
mysql>INSERTINTOperson->VALUES(9,'Harry',21,'magician'),->(NULL,'Harriet',19,'pianist');QueryOK,2rowsaffected(0.02sec)Records:2Duplicates:0Warnings:0mysql>SELECT*FROMperson;+----+---------+-----+------------+|id|name|age|info|+----+---------+-----+------------+|1|Green|21|Lawyer||2|Suse|22|dancer||3|Willam|20|sportsman||4|Laura|25|NULL||5|Evans|27|secretary||6|Dale|22|cook||7|Edison|28|singer||9|Harry|21|magician||10|Harriet|19|pianist|+----+---------+-----+------------+9rowsinset(0.00sec)
将查询结果插入数据
INSERT语句用来给数据表插入记录时,指定插入记录的列值。INSERT还可以将SELECT语句查询的结果插入到列表中,其基本语法为:
INSERTINTOtbl_name1(column_list1)SELECT(column_list2)FROMtable_name2WHERE(condition)
从person_old表中查询所有的记录,并将其插入到person表中
首先,创建一个名为person_old的数据表,其表结构与person结构相同mysql>CREATETABLEperson_old->(->idINTUNSIGNEDNOTNULLAUTO_INCREMENT,->nameCHAR(40)NOTNULLDEFAULT'',->ageINTNOTNULLDEFAULT0,->infoCHAR(50)NULL,->PRIMARYKEY(id)->);QueryOK,0rowsaffected(0.11sec)向person_old表中添加两条记录mysql>INSERTINTOperson_old->VALUES(11,'Harry',20,'student'),(12,'Beckham',31,'police');QueryOK,2rowsaffected(0.20sec)Records:2Duplicates:0Warnings:0mysql>SELECT*FROMperson_old;+----+---------+-----+---------+|id|name|age|info|+----+---------+-----+---------+|11|Harry|20|student||12|Beckham|31|police|+----+---------+-----+---------+2rowsinset(0.00sec)插入数据到person表中mysql>INSERTINTOperson(id,name,age,info)->SELECTid,name,age,infoFROMperson_old;QueryOK,2rowsaffected(0.01sec)Records:2Duplicates:0Warnings:0mysql>SELECT*FROMperson;+----+---------+-----+------------+|id|name|age|info|+----+---------+-----+------------+|1|Green|21|Lawyer||2|Suse|22|dancer||3|Willam|20|sportsman||4|Laura|25|NULL||5|Evans|27|secretary||6|Dale|22|cook||7|Edison|28|singer||9|Harry|21|magician||10|Harriet|19|pianist||11|Harry|20|student||12|Beckham|31|police|+----+---------+-----+------------+11rowsinset(0.00sec)
7.2、更新数据
表中有数据之后,可以对数据进行更新,其基本语法为:
UPDATEtable_nameSETcol_name1=value1,col_name2=value2,...,WHEREwhere_condition
在person表中,更新id值为11的记录,将age字段值改为15,将name字段值改为LiMing
mysql>UPDATEpersonSETage=15,name='LiMing'WHEREid=11;QueryOK,1rowaffected(0.02sec)Rowsmatched:1Changed:1Warnings:0mysql>SELECT*FROMpersonWHEREid=11;+----+--------+-----+---------+|id|name|age|info|+----+--------+-----+---------+|11|LiMing|15|student|+----+--------+-----+---------+1rowinset(0.00sec)
在person表中,更新age值为19~22的记录,将info字段值都改为student
mysql>UPDATEpersonSETinfo='student'WHEREageBETWEEN19AND22;QueryOK,6rowsaffected(0.02sec)Rowsmatched:6Changed:6Warnings:0mysql>SELECT*FROMpersonWHEREageBETWEEN19AND22;+----+---------+-----+---------+|id|name|age|info|+----+---------+-----+---------+|1|Green|21|student||2|Suse|22|student||3|Willam|20|student||6|Dale|22|student||9|Harry|21|student||10|Harriet|19|student|+----+---------+-----+---------+6rowsinset(0.00sec)
7.3、删除数据
从数据表中删除数据使用DELETE语句,其基本语法为:
DELETEFROMNtable_name[WHERE<condition>]
在person表中,删除id等于11的记录
执行删除操作前,使用SELECT语句查看当前id=11的记录mysql>SELECT*FROMpersonWHEREid=11;+----+--------+-----+---------+|id|name|age|info|+----+--------+-----+---------+|11|LiMing|15|student|+----+--------+-----+---------+1rowinset(0.00sec)使用DELETE语句删除该记录mysql>DELETEFROMpersonWHEREid=11;QueryOK,1rowaffected(0.02sec)语句执行完毕,查看执行结果:mysql>SELECT*FROMpersonWHEREid=11;Emptyset(0.00sec)
在person表中,使用DELETE语句同时删除多条记录,删除age字段在19-22的记录
执行删除操作前,使用SELECT语句查看当前的数据mysql>SELECT*FROMpersonWHEREageBETWEEN19AND22;+----+---------+-----+---------+|id|name|age|info|+----+---------+-----+---------+|1|Green|21|student||2|Suse|22|student||3|Willam|20|student||6|Dale|22|student||9|Harry|21|student||10|Harriet|19|student|+----+---------+-----+---------+6rowsinset(0.00sec)DELETE删除这些记录mysql>DELETEFROMpersonWHEREageBETWEEN19AND22;QueryOK,6rowsaffected(0.01sec)查看执行结果mysql>SELECT*FROMpersonWHEREageBETWEEN19AND22;Emptyset(0.00sec)
删除person表中所有记录,SQL语句如下
执行删除操作前,使用SELECT语句查看当前的数据:mysql>SELECT*FROMperson;+----+---------+-----+-----------+|id|name|age|info|+----+---------+-----+-----------+|4|Laura|25|NULL||5|Evans|27|secretary||7|Edison|28|singer||12|Beckham|31|police|+----+---------+-----+-----------+4rowsinset(0.00sec)执行DELETE语句删除这4条记录mysql>DELETEFROMperson;QueryOK,4rowsaffected(0.01sec)查看执行结果:mysql>SELECT*FROMperson;Emptyset(0.00sec)
如果想删除表中的所有记录,还可以使用TRUNCATE TABLE语句,TRUNCATE将直接删除原来的表并重新创建一个表,其语法结构为TRUNCATE TABLE table_name。TRUNCATE直接删除表而不是删除记录,因此执行速度比DELETE快。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。