MySQL(4)操作数据表中的记录

时间:2022-06-11 18:44:51

插入记录INSERT
INSERT [INTO] tbl_name [(col_name,…)] {VALUES|VALUE} ({expr|DEFAULT},…),(…),…
举例:CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, age TINYINT NOT NULL DEFAULT 10, sex BOOLEAN);
INSERT users VALUE(NULL,’Tom’,’123’,25,1);
SELECT * FROM users;
INSERT users VALUE(NULL,’John’,’456’,25,1);
SELECT * FROM users;
INSERT users VALUE(DEFAULT,’Tom’,’123’,25,1);
SELECT * FROM users;
INSERT users VALUE(NULL,’John’,’456’,25);//报错
INSERT users VALUE(DEFAULT,’Tom’,’123’,3*7-5,1);//报错可以写成数学表达式
SELECT * FROM users;
INSERT users VALUE(DEFAULT,’Tom’,’123’,DEFAULT,1);//缺省
SELECT * FROM users;
//一次写入多条记录
INSERT users VALUES(DEFAULT,’Tom’,’123’,3*7-5,1),(NULL,’Rose’,md5(‘123’),DEFAULT,0);//md5是PHP函数,返回123的哈希值
SELECT * FROM users;

插入记录INSERT SET-SELECT
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},…
说明:与第一种方式的区别在于,此方法可使用子查询(SubQuery)
只能一次性插入一条记录
举例:
INSERT users SET username=’Ben’,password=’456’;
SELECT * FROM users;

插入记录INSERT SELECT
INSERT [INTO] tbl_name [(col_name)] SELECT…
说明:此方法可将查询结果插入到指定数据表。

单表更新记录UPDATE
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr|DEFAULT}[,col_name2={expr2|DEFAULT}]…[WHERE where_condition]
举例:
UPDATE users SET age=age+5;//单列全部更新
SELECT * FROM users;

UPDATE users SET age=age-id,SEX=0;//多列全部更新
SELECT * FROM users;

UPDATE users SET age=age+10 WHERE id%2=0;//单列部分更新
SELECT * FROM users;

单表删除记录DELETE
DELETE FROM tbl_name [WHERE where_condition]
举例:
DELETE FROM users WHERE id=6;
SELECT * FROM users;
INSERT users VALUE(NULL,’111’,’222’,33,1);//注意从最后添加
SELECT * FROM users;

查询表达式解析
SELECT
查找记录
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_expr
查询表达式
·每一个表达式表示想要的一列,必须有至少一个。
·多个列之间以英文逗号分隔。
·信号* 表示所有列。tbl_name.* 可以表示命名表的所有列。
·查询表达式可以使用[AS] alias_name 为其赋予别名。
·别名可用于GROUP BY,ORDER BY或HAVING子句。

举例:
SHOW COLUMNS FROM users;
//只查前两页
SELECT id, username FROM users;
SELECT username,id FROM users;//查找顺序影响结果顺序

SELECT users.id, users.username FROM users;//用于区分多表相同字段

别名
举例:
SELECT id AS userID,username AS uname FROM users;
SELECT id username FROM users;//注意没逗号,这个理解为username是id的别名,所以,要是用别名,最好加AS,避免混淆。

WHERE语句进行条件查询
where
条件表达式:
对记录进行过滤,若没有指定的WHERE子句,则显示所有记录。
在WHERE表达式中,可使用MySQL支持的函数或运算符。

group by语句对查询结果分组
GROUP BY
查询结果分组
[GROUP BY {col_name|position}[ASC|DESC],…]
分析:ASC升序,DESC降序
举例:
SELECT * FROM users;
SELECT sex FROM users GROUP BY sex;
SELECT sex FROM users GROUP BY 1;//SELECT 语句中第一个出现的字段

having语句设置分组条件
HAVING
分组条件
[HAVING where_condition]
选出部分数据
SELECT sex FROM users GROUP BY 1 HAVING age >35;//错误,在sex里找不到age,需修改:
SELECT sex,age FROM users GROUP BY 1 HAVING age >35;
或者:
SELECT sex FROM users GROUP BY 1 HAVING count(id) >=2;
分析:count(id)使用聚合函数,此时可以不改为SELECT sex,age

order by语句对查询结果排序
对查询结果排序
[ORDER BY{col_name|expr|position}[ASC|DESC],…]
举例:
SELECT * FROM users ORDER BY id DESC;
//以两个字段排序
SELECT * FROM users ORDER BY password DESC,id DESC;

limit限制语句查询数量
limit
限制查询结果返回的数量
[LIMIT{[offset,] row_count|row_count OFFSET offset}]
举例:
//只要前两条
SELECT * FROM users LIMIT 2;
//要第3 4
SELECT * FROM users LIMIT 2,2;//数据是从0开始数

SELECT * FROM users ORDER BY id DESC;
SELECT * FROM users ORDER BY id DESC LIMIT 2,2;

回头
插入记录INSERT SELECT
INSERT [INTO] tbl_name [(col_name)] SELECT…
说明:此方法可将查询结果插入到指定数据表。
举例:
CREATE TABLE test(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20));
SELECT * FROM test;
INSERT test(username) SELECT username FROM users WHERE age>=30;
SELECT * FROM test;