crud mysql_MySQL 超新手入门(6) CRUD 与资料维护

2.1 基础新增叙述

新增资料到资料库的表格中使用「INSERT」叙述,下列是这个叙述的基本语法:

5528f05a0fcb9775ba373dfa8981e2d4.png

使用这个语法新增纪录的时候,要特别注意表格的栏位个数与顺序,下列的新增叙述会新增一笔部门的纪录到「cmdev.dept」表格中:

1568cb6a252dfd4acadbdb62a4104e80.png

除了明确的指定新增纪录的每一个栏位资料外,你也可以使用「DEFAULT」关键字,让MySQL为你写入在设计表格的时候,为栏位指定的预设值。下列的新增叙述同样会新增一笔部门的纪录到「cmdev.dept」表格中,不过部门的所在位置(location)栏位值指定为使用预设值:

8ed36a1d03384acaaf0d440c4cdb3e76.png

使用这种语法新增纪录的时候,如果资料个数与栏位个数不一样的话,就会发生错误:

1d83f07dae0ba39ceabf20c1fdfb7137.png

资料个数虽然没有错,顺序却不对了,也有可能会造成错误:

e2eb3735978372b3a36220c37a0a725d.png

新增叙述的另外一种语法,就提供比较灵活的新增纪录方式,你可以自己指定新增纪录的栏位个数和顺序:

13cad7aea0d46c14801271cc6b6005e7.png

在你额外为这个新增叙述指定栏位以后,指定储存资料的时候就要依照自己指定的栏位个数与顺序:

491364bcc60c13a21116c0f889656bb5.png

如果没有依照自己指定的栏位个数与顺序,就会发生错误:

dcd56e6a5bcd449262e39d9e1479ee49.png

因为这种新增叙述的语法可以自己指定栏位的个数与顺序,所以你只要指定写入栏位的资料就可以了。不过要特别注意下列两种语法的差异:

63227be38084d0c143ed8eeb823674d2.png

也因为这样的规定,所以下列这个新增叙述在语法上虽然没有错误,如果违反表格设计上的规定,同样会造成错误:

01f0abc03268d6fb5c46e301a9387b9c.png

这种新增叙述的语法还有一个比较特别的用法,如果你要新增的纪录,所有栏位的值都要使用预设值,就可以使用下列的写法。不过要特别注意下列的新增叙述执行以后会造成错误,因为「deptno」与「dname」栏位的预设值是「NULL」,可是它们又不能储存「NULL」:

1d8b4896000fa184e019fc01e2e85453.png

下列是新增叙述的第三种语法:

1453d0e69d254ff166e0dabca1143757.png

这种语法只是提供你另外一种新增纪录的写法,下列两个新增叙述的效果是一样的:

60fc511dd1b452e8314b49e7763e545d.png

2.2 同时新增多笔纪录

上列讨论的新增叙述执行以后,都是一个叙述新增一笔纪录,如果需要的话,你也可以在一个新增叙述新增多笔纪录,差异只有在「VALUES」子句后面新增资料的指定:

40174c3d325230a8ebb4597cecf7e27f.png

如果你要新增下列三个员工资料到「cmdev.emp」表格中:

----------- ----------- ------------ ------------- -------------- ------------ ---------- ------------

**empno** **ename** **job** **manager** **hiredate** **salary** **comm** **deptno**

8001 SIMON MANAGER 7369 2001-02-03 3300 NULL 50

8002 JOHN PROGRAMMER 8001 2002-01-01 2300 NULL 50

8003 GREEN ENGINEER 8001 2003-05-01 2000 NULL 50

----------- ----------- ------------ ------------- -------------- ------------ ---------- ------------

你当然可以分别执行三个新增叙述将三个员工资料新增到「cmdev.emp」表格中;你也可以使用下列一个新增叙述,这个叙述执行以后,同样会新增三笔纪录:

d2f470a39312a61d4f2eb7e382f2f005.png

2.3 索引值

在设计表格的时候,通常会视需要指定表格中的某一个栏位为「主索引」栏位:

4b3a0032d7fb602d0ccdbc45338b7810.png

注:一个表格除了可以设定「主索引」栏位外,资料库还提供其它几种不同的「索引」,索引的应用与设定会在后面「第八章、表格与索引」中详细讨论。

如果一个表格设定了某一个栏位为主索引以后,你在新增纪录时就不可以违反主索引的规定,否则会产生错误:

00d7e4b9923878555d16d93f1493e633.png

你可以在使用「INSERT」叙述的时候,加入「IGNORE」关键字,它可以在执行一个违反主索引规定的新增叙述时,自动忽略新增的动作,这样就不会产生错误讯息了:

781225be2ab2352057185323f33d2d00.png

2.4 索引值与ON DUPLICATE KEY UPDATE

使用「INSERT」叙述新增纪录的时候,还可以视需要在最后搭配一串关键字「ON DUPLICATE KEY UPDATE」,它可以用来指定在违反重复索引值的规定时要执行的修改:

0b2916ef14113dfeb00a1d5dbf3ec76b.png

需要为「INSERT」叙述搭配「ON DUPLICATE KEY UPDATE」的情况会比较特殊一些,所以接下来会使用「cmdev.travel」这个表格来讨论它的用法,「cmdev.travel」是员工资料库中用来储存出差资料的表格,每一个员工到某个地方出差的资料,都会储存在这个表格中:

493bdeb2acc69a372b12e15d8575f8f0.png

因为这个表格的设计方式,所以如果要处理编号「7900」的员工到「BOSTON」出差资料的话,你就要执行下列的动作:

d44981bb06ec201bd3cd4fb2ec87770c.png

注:修改叙述「UPDATE」在下一节讨论。

你会发现要处理员工出差资料会是一件不算简单的工作,搭配「ON DUPLICATE KEY UPDATE」的「INSERT」叙述,可以让处理这类需求的叙述比较简单一些:

5d46c65d25f0729115161bb92f262e67.png

这个「INSERT」叙述执行以后,资料库会帮你执行需要的检查,根据检查的结果执行不同的动作:

ed61ffc09d68a29d79869361a1c9e629.png

2.5 「REPLACE」叙述

除了使用「INSERT」叙述新增纪录外,「REPLACE」叙述同样可以新增纪录,它们的语法几乎相同:

7ca39bb09908455d46f359720086fd70.png

「INSERT」叙述的另一种写法也可以套用给「REPLACE」叙述:

41585adea8b323ee0b65c0d899cf71f5.png

会使用「REPLACE」叙述新增纪录的原因,主要还是考虑索引值的情况,「REPLACE」叙述在没有违反索引值的规定时,效果跟「INSERT」叙述一样,同样会新增纪录到表格中。

在发生重复索引值的时候,「INSERT」叙述会发生错误:

dc0adcc57b333251c11e20e9b6bb0a9b.png

「INSERT」叙述搭配「IGNORE」关键字的时候:

7b78ad087c98f05921ea78b48ba0d056.png

同样的情况改用「REPLACE」叙述的话,它会执行修改纪录的动作:

2fb810358eeb51efbdf4a20b4f4704b6.png

3 修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值