SQL语句

来源:互联网 发布:不公平 知乎 编辑:程序博客网 时间:2024/05/26 19:16

 

一、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 ... VALUESINSERT ... 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]

DELETEtbl_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