MySQL中插入、更新和删除记录
时间:2006-07-02 来源:LeeSharp
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都会跳过而不放弃全部操作。
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表。
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的表正在进行书屋处理,这个命令就会退出并产生错误信息。