INSERT语句
INSERT INTO tbl_name [(col_name,...)]
VALUES (expression,...)
INSERT把新行插入到一个存在的表中,INSERT ... VALUES形式的语句基于明确指定的值插入行,INSERT ... SELECT形式插入从其他表选择的行,有多个值表的INSERT ... VALUES的形式在MySQL 3.22.5或以后版本中支持,col_name=expression语法在MySQL 3.22.10或以后版本中支持。
tbl_name是行应该被插入其中的表。列名表或SET子句指出语句为那一列指定值。
如果你为INSERT ... VALUES或INSERT ... SELECT不指定列表,所有列的值必须在VALUES()表或由SELECT提供。如果你不知道表中列的顺序,使用DESCRIBE tbl_name来找出。
任何没有明确地给出值的列被设置为它的缺省值。例如,如果你指定一个列表并没命名表中所有列,未命名的列被设置为它们的缺省值。缺省值赋值在7.7 CREATE TABLE句法中描述。
一个expression可以引用在一个值表先前设置的任何列。例如,你能这样:
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2)
但不能这样:
INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15)
DELETE语句
DELETE [LOW_PRIORITY] FROM tbl_name
[WHERE where_definition]
DELETE从tbl_name表中删除满足由where_definition给出的条件的行,并且返回删除记录的个数。
如果你发出一个没有WHERE子句的DELETE,所有行都被删除。MySQL通过创建一个空表来完成,它比删除每行要快。在这种情况下,DELETE返回零作为受影响记录的数目。(MySQL不能返回实际上被删除的行数,因为进行再创建而不是打开数据文件。只要表定义文件“tbl_name.frm”是有效的,表才能这样被再创建,即使数据或索引文件破坏了)。
如果你确实想要知道在你正在删除所有行时究竟有对少记录被删除,并且愿意承受速度上的惩罚,你可以这种形式的一个ELETE语句:
DELETE FROM tbl_name WHERE 1>0
注意这比没有WHERE子句的DELETE FROM tbl_name慢的多了,因为它一次删除一行。
UPDATE语句
UPDATE [LOW_PRIORITY] tbl_name SET
col_name1=expr1,col_name2=expr2,...
[WHERE where_definition]
UPDATE用新值更新现存表中行的列,SET子句指出哪个列要修改和他们应该被给定的值,WHERE子句,如果给出,指定哪个行应该被更新,否则所有行被更新。
如果你指定关键词LOW_PRIORITY,执行UPDATE被推迟到没有其他客户正在读取表时。
如果你从一个表达式的tbl_name存取列,UPDATE使用列的当前值。例如,下列语句设置age为它的当前值加1:
UPDATE persondata SET age=age+1
UPDATE赋值是从左到右计算。例如,下列语句两倍age列,然后加1:
UPDATE persondata SET age=age*2, age=age+1