600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > MYSQL基础01(新增 修改 删除)【MySQL】

MYSQL基础01(新增 修改 删除)【MySQL】

时间:2020-05-17 23:47:13

相关推荐

MYSQL基础01(新增 修改 删除)【MySQL】

数据库|mysql教程

基础

数据库-mysql教程

INSERT

社群运营源码,qt5.0 ubuntu,tomcat默认线程池数量,爬虫进阶答案,php水解技术,十堰seo关键词推广排名lzw

1.插入一条记录 ,很简单的标准sql

java制作电影网站源码,ubuntu网页加载慢,宝塔面板tomcat怎么进,网址爬虫采集,php自动上传图片,徐水seolzw

insert into mytable(col1,col2,col3) values(‘val1′,’val2’,4);

asp建站源码,vscode 安装不了,ubuntu挂载硬盘无法启动,nginx搭建tomcat,sqlite3 ld,微X红包小号插件,前端开发小程序框架,世界有骷髅爬虫,图书管理 php,seo如何提高收录,淘站么网站源码,如何把网页的静态页下载下来,站长之家 仿站 模板,登录页面源代码网站,二维码生成管理系统源码,婚恋网站程序模板lzw

说明:请留意最后的分号; 用惯了mssql ,最不适应的地方就是,mysql中每条sql语句必须用分号间开,否则如果想一次执行多条语句,就会报错.

另外,如果使用自增ID,插入时也可以设置自增ID的值,而不报错; 这对于数据迁移是一大方便.

2.复制表的数据,这跟mssql是一样的

insert into mytable(col1,col2,col3)

select col1,col2,col3 from copytable;

3.新增表并同时复制数据,这个跟mssql不同 (ms:select * into newtable from copytable)

CREATE TABLE newtable SELECT * FROM copytable WHERE 1=2;

说明:跟mssql一样,只是单纯复制表结构,索引什么的并不会复制过来; 去掉where 条件将会复制所有数据

4.批量插入,mysql的特点,有点似链式写法 (相当好用!)

insert into mytable (col1,col2,col3) values (‘A’,’VAL1′,1),(‘B’,’VAL2′,2),(‘C’,’VAL3′,3);

说明:执行效率相当高,同时插入数万记录也只是10秒以内;而且对于项目中的处理字符,实现批量插入相当轻松,我特别喜欢这个语句.

UPDATE

1.标准sql

UPDATE mytable SET col1=’A’,col2=’val1′,col3=1 where id=’0001′;

2.表连接更新,同时更新多列,部分跟mssql一致

UPDATE newtable a,oldtable b set a.col1=b.col1,a.col2=b.col2 where a.id=b.id;

说明:mssql的写法更加灵活,支持该写法: update newtable set col1=oldtabel.col1,col2=oldtabel.col2 from oldtabel where newtable.id=oldtabel.id

3.批量更新

REPLACE INTO mytable (id,name)VALUES (’01’,’hello’),(’02’,’haha’);

说明:跟批量插入的格式是一样的, 当values后面的数据插入到mytable中不会引起主键冲突或唯一索引冲突时,那么就会直接新增数据, 否则就会修改数据.简单点说就是,如果记录存在则更新,如果记录不存在则插入; 上例中,如果执行插入操作,受影响行数为2, 如果执行修改操作,受影响行数为4; 所以执行修改操作的本质是先delete,然后再插入.所以如果更新的字段不齐,其它字段将变为默认值 下面是该功能的增强版

INSERT INTO mytable(id,name,col)VALUES (78,’456′,’55’),(88,’456′,’d’) ON DUPLICATE KEY UPDATE name=VALUES(name),col=VALUES(col);

INSERT INTO mytable(id,name,col)VALUES (78,’456′,’55’),(88,’456′,’d’) ON DUPLICATE KEY UPDATE name=VALUES(name); –只更新name

说明:跟replace 是一样的,唯一不同的是可以选择更新的列, 其它的列的值并不会受影响.

DELETE

1.标准sql

delete from mytable where id=’001′;

2.清空表, 跟mssql是一样的

truncate table mytable;

说明:执行后,自增ID也会从1开始编号.

处理数据时注意事项

1.对日期类型的列插入数据时,如果插入的值不符合日期格式,mysql 并不会报错,但是会保存为’0000-00-00 00:00:00’的格式, 一般的程序并不会承认,所以你会发现后台读取数据没有问题,而应用程序读取数据时会报错. 这个我被坑惨了.

下面是网上找到的解决办法,并没有实际测试

给jdbc url加上 zeroDateTimeBehavior参数:

datasource.url=jdbc:mysql://localhost:3306/testdbuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true

zeroDateTimeBehavior=round是为了指定MySql中的DateTime字段默认值查询时的处理方式;默认是抛出异常,

对于值为0000-00-00 00:00:00(默认值)的纪录,如下两种配置,会返回不同的结果:

zeroDateTimeBehavior=round //结果: 0001-01-01 00:00:00.0

zeroDateTimeBehavior=convertToNull //结果 null

目前关于mysql的新增更新删除就是以上内容,遇到新情况再补充吧

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。