免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1135 | 回复: 0
打印 上一主题 下一主题

MySQL中插入、更新和删除记录 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-02 21:27 |只看该作者 |倒序浏览

1           插入、更新和删除记录
1.1            插入记录
Insert into table_name (field_name1, field_name2, …) values (value1, value2, …);
Insert into values (value1, value2, …);   //这种形式只能应用于值的顺序与字段顺序匹配的情况(可以通过调用describe命令来决定字段顺序)。
包含引用标志的值需要再引号’前面加上反斜线\                   //转义字符
注意:into 关键字是可选的
也可以同时插入多个值,用逗号分开
Eg:insert table_name values (value1, value2, …), (value3, value4, …);

还可以不使用insert… values格式,而使用类似update语句,它使用set子句分别为每一列设置值。
Insert into table_name set field_name1 = value1, field_name2 = value2,…;
使用default值
Create table table_name (field_name1 type default def_value not null,…);
Insert table_name values (default,…);   //default关键字只在4.0.3以及更高版本才支持
使用AUTOINCREMENT字段
自动产生下一个序号,该字段必须被设置为主键
使用UNIQUE字段
使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT、中断操作或者更新旧记录为新值。
INSERT IGNORE INTO TABLE_NAME (UNIQUE_FIELD, …) VALUES (REPEAT, …);
如果重复记录,则不会报告错误,也不会更新记录,数据库中的数据保持不变。

ON DUPLICATE KEY UPDATE和REPLACE区别:前者只把已命名的字段更新为新值,后者删除了旧记录,然后用新值完全替换。
Eg:insert into Menu value (null, ‘MySQL’, ‘www.mysql.com’) on duplicate key update label=’MS SQL’, url=’www.microsoft.com’;
在这种情况下,如果MySQL发现表中已经包含具有相同唯一键的记录,则会自动更新旧的记录为ON DUPLICATE KEY UPDATE从句中指定的新值。
当有很多insert语句需要被顺序执行时,IGNORE关键字就使操作变得很方便。这可以保证不管拿一个INSERT包含了重复值,MySQL都会跳过而不放弃全部操作。
1.2            更新记录
UPDATE TABLE_NAME SET FIELD_NAME=VALUE, SET FIELD_ANOTHER=VALUE_ANTOHER,…
WHERE …
如果省略了where子句,表中的每行都会收到update的影响而改变
精细操作:当执行INSERT或者UPDATE操作时,可以通过使用LOW_PRIORITY和DELAYED关键字使MySQL客户执行等待,知道成功完成操作或者排队等候服务器进行处理。
LOW_PRIORITY关键字阻止语句执行知道没有其他线程使用这个表,从而强制客户等待,知道语句完全被执行。在应用中可靠性是最终要的,添加这个关键字可以帮助提高SQL事务处理以及在它上面的业务逻辑的完整性。
DELAYED关键字和LOW_PRIORITY关键字相反,把要执行的语句放在一个对垒中(在server的存储器内)就立即让客户退出。当处理繁忙的数据库服务时,这一点在提高应用程序的性能方面尤其重要,意味它可以提高客户相应时间(但是比较冒险―――如果服务器崩溃,在服务器队列中的所有请求都会丢失)。
这两个关键字不适用与InnoDB表。
1.3            删除记录
MySQL允许使用delete和truncate语句删除数据。
DELETE语句可以允许从表中删除记录,支持where
DELETE FROM TABLE_NAME WHERE CONDITIONAL;
如果没有where子句,则删除表中所有数据。该操作不可逆转(除非使用的是InnoDB表且关掉了AUTOCOMMIT????)
使用truncate命令也可一删除表的所有记录
TRUNCATE TABLE TABLE_NAME;
该命令比delete执行速度要快,因为TRUNCATE删除了表,然后重建它。
注意:delete删除的是记录,并没有尝试去修改表。这也是为什么当向一个使用delete清空的表插入记录时,MySQL会记住前面产生的auto_increment序列,并且继续利用该字段的编号。而truncate后的表一直从1开始为auto_increment字段编号。
Truncate对于事务处理是不安全的。因此,如果想要执行truncate的表正在进行书屋处理,这个命令就会退出并产生错误信息。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15276/showart_135572.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP