MySQL(九)插入、更新和删除
常用的SQL语句,除了select用于查询,还有insert、update、delete等。
一、insert
insert:用来插入(或添加)行到数据库中,常见方式有以下几种:
①插入完整的行;
②插入行的一部分;
③插入多行;
④插入某些查询的结果;
1、插入完整的行
例如:insert into usertable
values(null,
'zhangsan',
'25',
'1992-05-20',
null,
null);
这条SQL语句插入一条新的个人信息到usertable表,存储在每个表列中的数据在values中给出,对每个列必须提供一个值,如果某个列没有值,应使用null(假定表允许对该项指定空值);
各个列必须以它们在表定义中出现的次序填充;缺点在于;高度依赖表中列的定义次序,如果表结构出现变动,难免出现问题。
更安全的方法如下(相对比较麻烦):
例如:insert into usertable(user_id,
user_name,
user_year,
user_birthday,
user_address,
user_email)
values(null,
'zhangsan',
'25',
'1992-05-20',
null,
null);
这条SQL语句与上面的SQL语句完成同样的工作,但给出了列名,valuse必须以指定的次序匹配指定的列名,不一定按照列出现在表中的实际次序;优点是:即使表结构改变,此insert语句仍然正确工作。
insert使用注意事项:
①无论使用哪种insert语法,都必须给出values的正确数目,如果不提供列名,则必须给每个表列提供一个值;如果提供列名,则必须对每个列出的列给出一个值;
②如果表定义允许,则可以在insert操作中省略某些列,列必须满足这两个条件(1.改列定义为允许null值;2.在表定义中给出默认值【如果不给出值,则使用默认值】);
③数据库被多个用户访问,一般检索是最重要的,可以通过在insert和into中间添加关键字low priority,指示MySQL降低insert语句的优先级(同样适用于update和delete语句);
2、插入多个行
例如:insert into usertable(user_id,
user_name,
user_year,
user_birthday,
user_address,
user_email)
values(null,
'zhangsan',
'25',
'1992-05-20',
null,
null);
或者只要每条insert语句中的列名(和次序)相同,可以只在insert语句后面输入一次列名就可以(单个insert语句由多组值,每组值用一堆圆括号包含,用逗号隔开)
PS:MYSQL用单条insert语句处理多个插入比使用多个insert语句快。
3、插入检索出的数据
例如:insert into usertable(user_id,
user_name,
user_year,
user_birthday,
user_address,
user_email)
select user_id,
user_name,
user_year,
user_birthday,
user_adress,
user_email
from newtablebase;
这条SQL语句中,select从newtablebase表中检索出要插入的数据,select列出的每个列对应tablebase表名后所跟的列表中的每个列。
PS:insert select语句中,不一定要求列名匹配,实际上select中的第一列将用来填充表列中指定的第一列;insert select语句中select语句可包含where子句过滤插入的数据。
二、更新数据
如果要更新(修改)表中的数据,可以使用update语句,有以下两种方法:
①更新表中特定行;
②更新表中所有行;
update语句由三部分构成:
①要更新的表;
②列名和它们的新值;
③确定要更新行的过滤条件;
例如:update usertable
set user_email = '3033310371@qq.com'
where user_id = '10086';
这条SQL语句中,要更新的表名为usertable,set命令用来将新值赋给被更新的列user_email;
PS:update语句总是以要更新的表的名字开始,以where子句结束,它告诉MySQL更新哪一行。
更新多个列:update usertable
set user_name = 'zhangsan',
user_email = '3033310371@qq.com'
where user_id = '10086';
更新多个列时,只需要使用单个set命令,每个“列=值”对之间用逗号分隔(最后一列不用逗号)。
PS:如果用update更新多个行,且更新中一行或多行出现错误,则update操作将被取消(错误发生前执行的动作将被回滚到最初状态。即已更新的被恢复原来的值);
如果希望出错误,更新继续执行,可以使用ignore关键字:update ignore tablebase......
如果希望删除一个值,可以将它设置为null(如果表定义允许null值),例子如下:
update usertable
set user_email = null
where user_id = '10086';
三、删除数据
从一个表汇总删除数据,使用delete语句;有以下两种方式:
①从表中删除特定行;
②从表中删除所有行;
例如:delete from usertable where user_id = '10086';
这条SQL语句中,delete from要求指定从中删除数据的表名,where子句过滤要删除的行。
PS:delete不需要列名或者通配符,delete删除整行而不是整列,为了删除指定的列,可使用update语句(delete从表中删除行甚至表中所有行,但不删除表本身);
如果想删除表中所有行,可使用truncate table语句,它的执行效率比delete更快(truncate实际上是删除原来表并重新新建一个表,而不是逐行删除表中数据)。
更新和删除规则:
①除非确实打算更新或删除每一行,否则决不能使用不带where子句的update或delete语句;
②保证每个表都有主键,尽可能像where子句那样使用;
③对update和delete语句使用where子句前,最好先select进行测试,保证过滤的数据是正确的;
④使用强制实施引用完整性的数据库(这样MySQL将不允许删除具有与其他表相关联的数据的行)。
MySQL(九)插入、更新和删除的更多相关文章
- SQL.Cookbook 读书笔记4 插入更新和删除
第四章 插入更新和删除 4.1 插入数据 ,'PROGRA','NEW YOURK'); 4.2 从一个表向另一个表中复制 insert into dept_east(deptno,dname,loc ...
- MySQL<添加、更新与删除数据>
添加.更新与删除数据 添加数据 为表中所有字段添加数据 INSERT INTO 表名(字段名1,字段名2,……) VALUES(值1,值2,……); insert into 表名 values(值1, ...
- mySQL 插入,更新和删除数据
插入数据: 语法: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如 ...
- mySQL 教程 第5章 插入 更新与删除数据
使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不 ...
- MySQL入门很简单: 9 插入 更新与删除数据
1. 插入数据:INSERT 1)为表的所有字段插入数据 第一种: 不指定具体的字段名 INSERT INTO 表名 VALUES(值1,值2,...,值n): 第二种:INSERT语句中列出所有字段 ...
- MySQL笔记(三)之数据插入更新与删除
INSERT INTO INSERT INTO 语句用于向表格中插入新的行. 语法: INSERT INTO 表 VALUES (值1, 值2,....) # 列数必须和值的个数匹配 INSERT I ...
- MySQL datetime的更新,删除网上的一些老概念
网上的老概念 第一点:是以前的MySQL的datetime的最小值是:'1000-01-01 00:00:00'(貌似),但是最新的MySQL测试datetime的最小值可以是:'0000-00-00 ...
- Mysql高效插入/更新数据
从tushare抓取到的财务数据,最开始只是想存下来,用的办法想简单点,是:插入--报错-update 但发现这个方法太蠢,异常会导致大量无效连接,改为: for idx,row in d2.iter ...
- mysql批量插入更新操作
//添加关联赠品(确定) public function addGiveGoods($ids,$child,$parent_sku_no){ $license=new LicenseModel(); ...
随机推荐
- Raspberrypi 3B+ 安装 php+sqlite
按照网上的命令都为安装php5-fpm 和 php5-sqlite, 但是发现无法找到软件,可能是系统版本比较高的缘故,原来的版本已经不支持了. 经过努力华找到如下安装方法 sudo apt-get ...
- CSS中你知道的display的值有多少?用了多少?
它的语法如下: display:none | inline | block | list-item | inline-block | table | inline-table | table-capt ...
- 【代码笔记】Web-ionic-安装及第一个app
一,下载ionic v1.0.1版本,下载地址为:ionic-v1.0.1.zip. ionic 最新版本下载地址:http://ionicframework.com/docs/overview/#d ...
- 【读书笔记】iOS-设置应用的硬件需求
如果你的应用需要一些特定的硬件设备才能运行,你可以在应用的Info.plist文件中添加应用运行所需的硬件列表.如果设备上没有这些硬件的话,你的应用将不会启动. 如图,找到Info.Plist---& ...
- 【备忘】SQL语句增加字段、修改字段、修改类型、修改默认值
一.修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名 ...
- 关于CSS的一些基础内容
最近用到了CSS,刚好学学.CSS(Cascading Style Sheet)中文名层叠样式表,用于为html文档添加样式控制,也是一种计算机语言. 一.CSS语法a)CSS规则由选择器和声明组成, ...
- Fiddler抓包使用教程-模拟低速网络环境
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73467267 本文出自[赵彦军的博客] 在无线测试中,网络测试是必不可少的环节,通 ...
- Django 使用模型的API
进入项目目录 python3运行 import os os.environ['DJANGO_SETTINGS_MODULE']= '项目.settings' import django django. ...
- 在 Azure Resource Manager 模板中使用托管磁盘
本文介绍使用 Azure Resource Manager 模板预配虚拟机时托管与非托管磁盘之间的差异. 这有助于将现有模板从使用非托管磁盘更新为使用托管磁盘. 我们将使用 101-vm-simple ...
- 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
最近玩MySQL,发现了一个很不错的工具,可以把MySQL慢查询可视化,方便我们去找出和分析慢询语句,搭建的步骤不多,但网上详细教程比较少,说得也不够详细,一不小心,估计得蛋痛一会,哈哈 Percon ...