MySQL数据库之更新语句精解[MySQL防范]
本文“MySQL数据库之更新语句精解[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
用于操作数据库的SQL普通分为两种,一种是查询语句,也就是我们所说的SELECT语句,别的一种就是更新语句,也叫做数据操作语句.言外之意,就是对数据举行改正.在尺度的SQL中有3个语句,它们是INSERT、UPDATE以及DELETE.在MySQL中又多了一个REPLACE语句,因此,本文以MySQL为后台来谈论若何使有SQL中的更新语句.
1、INSERT和REPLACE
INSERT和REPLACE语句的功效都是向表中插入新的数据.这两条语句的语法近似.它们的主要辨别是若何处理反复的数据.
1. INSERT的普通用法
MySQL中的INSERT语句和尺度的INSERT不太一样,在尺度的SQL语句中,一次插入一条记录的INSERT语句只有一种情势.
INSERT INTO tablename(列名…) VALUES(列值);
而在MySQL中还有别的一种情势.
INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…;
第一种办法将列名和列值脱离了,在利用时,列名必须和列值的数一致.以下面的语句向users表中插入了一条记录:
INSERT INTO users(id, name, age) VALUES(123, '姚明', 25);
第二种办法答应列名和列值成对呈现和利用,以下面的语句将产生中样的效果.
INSERT INTO users SET id = 123, name = '姚明', age = 25;
假如利用了SET方法,必须至少为一列赋值.假如某一个字段利用了省缺值(如默许或自增值),这两种办法都可以省略这些字段.如id字段上利用了自增值,上面两条语句可以写成以下情势:
INSERT INTO users (name, age) VALUES('姚明',25);
INSERT INTO uses SET name = '姚明', age = 25;
MySQL在VALUES上也做了些改变.假如VALUES中什么都不写,那MySQL将利用表中每一列的默许值来插入新记录.
INSERT INTO users () VALUES();
假如表名后什么都不写,就表示向表中全部的字段赋值.利用这种方法,不但在VALUES中的值要和列数一致,并且次序不能倒置. INSERT INTO users VALUES(123, '姚明', 25);
假如将INSERT语句写成以下情势MySQL将会报错.
INSERT INTO users VALUES('姚明',25);
2. 利用INSERT插入多条记录
看到这个标题大概大家会问,这有什么好说的,调用多次INSERT语句不便可以插入多条记录了吗!但利用这种办法要增添服务器的负荷,因为,履行每一次SQL服务器都要一样对SQL举行解析、优化等操作.好在MySQL供应了另一种办理筹划,就是利用一条INSERT语句来插入多条记录.这并非尺度的SQL语法,因此只能在MySQL中利用.
INSERT INTO users(name, age) VALUES('姚明', 25), ('比尔.盖茨', 50), ('火星人', 600);
上面的INSERT 语句向users表中持续插入了3条记录.值得注意的是,上面的INSERT语句中的VALUES后必须每一条记录的值放到一对(…)中,中间利用","分割.假定有一个表table1
CREATE TABLE table1(n INT);
假如要向table1中插入5条记录,下面写法是错误的:
INSERT INTO table1 (i) VALUES(1,2,3,4,5);
MySQL将会抛出下面的错误
ERROR 1136: Column count doesn't match value count at row 1
而精确的写法应当是这样:
INSERT INTO table1(i) VALUES(1),(2),(3),(4),(5);
当然,这种写法也可以省略列名,这样每一对括号里的值的数目必须一致,并且这个数目必须和列数一致.如:
INSERT INTO table1 VALUES(1),(2),(3),(4),(5);
3. REPLACE语句
我们在利用数据库时大概会常常碰到这种情形.假如一个表在一个字段上成立了唯一索引,当我们再向这个表中利用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误.当然,我们大概想用新记录的值来覆盖本来的记录值.假如利用传统的做法,必须先利用 DELETE语句删除原先的记录,然后再利用INSERT插入新的记录.而在MySQL中为我们供应了一种新的办理筹划,这就是REPLACE语句.利用 REPLACE插入一条记录时,假如不反复,REPLACE就和INSERT的功效一样,假若有反复记录,REPLACE就利用新记录的值来替换本来的记录值.
利用REPLACE的最大好处就是可以将DELETE和INSERT合二为一,形成一个原子操作.这样便可以没必要考虑在同时利用DELETE和INSERT时增添事件等复杂操作了.
在利用REPLACE时,表中必须有唯一索引,并且这个索引所在的字段不能答应空值,不然REPLACE就和INSERT完好一样的.
在履行REPLACE后,系统返回了所影响的行数,假如返回1,阐明在表中并没有反复的记录,假如返回2,阐明有一条反复记录,系统自动先调用了 DELETE删除这条记录,然后再记录用INSERT来插入这条记录.假如返回的值大于2,那阐明有多个唯一索引,有多条记录被删除和插入.
REPLACE的语法和INSERT非常的类似,以下面的REPLACE语句是插入或更新一条记录.
REPLACE INTO users (id,name,age) VALUES(123, '赵本山', 50);
插入多条记录:
REPLACE INTO users(id, name, age) VALUES(123, '赵本山', 50), (134,'Mary',15);
REPLACE也可以利用SET语句
REPLACE INTO users SET id = 123, name = '赵本山', age = 50;
上面曾提到REPLACE大概影响3条以上的记录,这是因为在表中有超越一个的唯一索引.在这种情形下,REPLACE将考虑每一个唯一索引,并对每一个索引对应的反复记录都删除,然后插入这条新记录.假定有一个table1表,有3个字段a, b, c.它们都有一个唯一索引.
CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE);
假定table1中已经有了3条记录
a b c
1 1 1
2 2 2
3 3 3
下面我们利用REPLACE语句向table1中插入一条记录.
REPLACE INTO table1(a, b, c) VALUES(1,2,3);
返回的后果以下
Query OK, 4 rows affected (0.00 sec)
在table1中的记录以下
a b c
1 2 3
我们可以看到,REPLACE将原先的3条记录都删除了,然后将(1, 2, 3)插入.
以上是“MySQL数据库之更新语句精解[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |