操作数据表中的记录
插入操作
INSERT第一种
INSERT [INTO] tb_name [col_name,....] VALUES(...,...)[,(...,...),...] 多行多个相对插入
expr--算数表达式or函数表达式;
default--创建表结构定义的值;
如果表结构中有主建primary key auto_increment,插入时对应值可以用NULL或default;
INSERT第二种(与第一种方式的区别在于,此方式可以使用子查询(SubQuery))
INSERT [INTO] tb_name SET col_name={expr|DEFAULT},col_name2={expr|DEFAULT},....单行多个插入
插入记录方法三
INSERT [INTO] tbl_name [(col_name, ... )] SELECT ...
SELECT--查找的结果
单表更新
单表更新:UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition];
当缺少WHERE时,所有记录都会更新。
LOW_PRIORITY:UPDATE的执行被延迟了,直到没有其它的客户端从表中读取为止。
IGNORE:即使在更新过程中出现错误,更新语句也不会中断。
举例:UPDATE users SET age=age+1; //整张表发生改变
UPDATE users SET age=age+id,sex=0; //多个字段用逗号隔开。
UPDATE users SET sex=1 WHERE id%2=0; //id为偶数的sex值设为1。求余为0即偶数
单表删除
DELETE FROM tbl_name [WHERE where_condition]
若不添加WHERE则删除全部记录
删除某条记录后,再插入一条新的记录,自动编号不会补到删除记录的编号上,而是基于原有记录最大编号继续增加
查询记录
SELECT select_expr[,select_expr...]
[
FROM table_references
[WHERE where_condition]
[GROUP BY{col_name|position} [ASC|DESC],..]
[HAVING where_condition]
[ORDER BY{col_name | expr | position}[ASC|DESC],...]
[LIMIT{[offset,]row_count|row_count OFFSET offset}]
]
select 查询的两个影响
1、字段出现的前后顺序会影响结果集的顺序
2、字段的别名会影响结果集的名字。
每一个表达式表示想要的一列,必须有至少一个。
多个列直接以英文逗号分隔。
星号(*)表示所有列。tabl_name.*可以表示命名表的所有列
查询表达式可以使用[AS]alias_name为其赋予别名。
别名可用于GROUP BY, ORDER BY 或者HAVING子句。
例子:SELECT id,username FROM users;
表示查询users表的id,username 字段的记录,左边数据是id,右边是username
SELECT username,id FROM users;则是左边是username,右边是id
SELECT id as userid,username as uname FROM users;
则左边名字是userid实则是id ,右边名为uname实则是username;
若SELECT id username FROM users;
则显示名为username的别名,但是实则记录是ID的记录。相当于省略AS
where 条件表达式:
where 后各种根据条件(>、=、<=、!=、<>、IS NOT NULL),
根据逻辑(and,or),
根据结合方式left join、right join等,
根据模式匹配(IN、NOT IN、like、not like、regexp),使用各种MySQL函数和表达式,从表集合中筛选记录。
查询结果分组 GROUP BY
[GROUP BY {col_name|position} [ASC|DESC],...]
ASC:升序,默认
DESC:降序
position:SELECT语句中列的序号
eg. SELECT sex FROM users GROUP BY sex;对users中的sex按sex进行分组
eg. SELECT * FROM users GROUP BY 1;