首页 >数据库 >mysql教程 >MYSQL基础01(新增,修改,删除)_MySQL

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

WBOY
WBOY原创
2016-05-30 17:10:591217浏览

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的新增更新删除就是以上内容,遇到新情况再补充吧

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn