您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

MYSQL基础01(新增,修改,删除)_MySQL

2025/10/26 5:50:11发布20次查看
insert
1.插入一条记录 ,很简单的标准sql
insert into mytable(col1,col2,col3) values('val1','val2',4);
说明:请留意最后的分号; 用惯了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的新增更新删除就是以上内容,遇到新情况再补充吧
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product