MySQL基础知识(三)——数据表记录读写操作

首先创建一个users表,后续我们都对这个表的数据进行操作。

// 创建users表。
// 包含字段编号id;用户名username;密码password;年龄age;薪水salary;性别sex,默认值为‘3’
CREATE TABLE IF NOT EXISTS users(id INT(2) UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20),pasword VARCHAR(60),age TINYINT UNSIGNED,salary FLOAT(9,2) UNSIGNED,sex ENUM('1','2','3') DEFAULT '3');

一.数据库写操作 

1.插入记录

(1)第一种方式:

语法:INSERT [INTO] tbl_name [col_name,...] {VALUES|VALUE} ({expr | DEFAULT},...),...

// 给所有字段赋值。
// 不写列名,则要给每个字段对应的值,id为自增字段,可以直接赋值为NULL。
INSERT users VALUES (NULL,'tian','123',18,9000000,'1');
// id为自增字段,也可以直接赋值为DEFAULT
INSERT users VALUES (DEFAULT,'kimtian','234',19,990000.00,'1');
// 有默认值的字段想使用默认值可以使用DEFAULT
INSERT users VALUES (DEFAULT,'tjj','345',21,880000.00,DEFAULT);
// 也可以使用数学表达式
INSERT users VALUES (DEFAULT,'pony','456',22,2000+3000+2300*2,'2');
// 一次插入多条数据
INSERT users VALUES (DEFAULT,'wiwi','567',23,50000,'1'),(DEFAULT,'messi',MD5('messi'),24,50000*1.5+3000,'1');

(2)第二种方式:

语法:INSERT [INTO] tbl_name SET col_name=({expr | DEFAULT},...

// 这种方式一次只能插入一条数据
INSERT users SET username='luqiong',password='678',age=30,salary=12000*1.2;

(2)第三种方式:

语法:INSERT [INTO] tbl_name [(col_name,...)] SELECT...

先创建另一张空表:

// 创建表名inserttest。包含字段编号id;用户名username
CREATE TABLE IF NOT EXISTS inserttest(id INT(2) UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(20));

将我们数据表users中的username插入新表 inserttest中。

// 与第一种方法的区别在于:这种方法可以使用子查询(SubQuery),可以将查询结果插入到指定数据表
// 只插入一个字段,要指定字段名称。在子查询加入WHERE条件,只将年龄大于20岁的username插入新表中
INSERT inserttest (username) SELECT username FROM users WHERE age>20;

2.更新记录

扫描二维码关注公众号,回复: 4725060 查看本文章

(1) 单表更新

语法:

UPADATE [LOW_PRIORITY][IGNORE] table_reference SET col_name1={expr | DEFAULT}[,col_name2={expr | DEFAULT}]...[WHERE where_condition]

// 如果不加WHERE条件,则将数据表内所有字段进行更新
UPDATE users SET salary = salary+id*200,sex = 3;
// 加WHERE条件,则根据WHERE条件进行更新
UPDATE users SET salary = salary+2000,sex = 1 WHERE id % 2 = 1;

(2)多表更新

语法:

UPDATE table_references SET col_name1={expr1|DEFAULT} [,col_name={expr2|DEFAULT] ... [WHERE where_condition]

// 使用内连接更新 tbl_goods 中的goods_cate字段
UPDATE tbl_goods INNER JOIN tbl_goods_cates ON goods_cate = cate_name SET goods_cate = cate_id;

3.删除记录

(1)单表删除

语法:DELETE FROM tbl_name [WHERE where_condition]

// 实际中删除表数据一定要加上WHERE条件,防止不小心把数据库中所有数据都删除掉
// 删除数据后,再增加数据不会补充删除的编号,而是在原有最大编号的基础上+1
DELETE FROM users WHERE id = 4; 

(2)多表删除 

语法:DELETE tbl_name[.*][,tbl_name[.*]]... FROM table_references [WHERE where_condition]

// 删除表中重复的数据,删除id大的,保留重复数据中id小的
DELETE goods 
FROM
	tbl_goods AS goods
	LEFT JOIN ( SELECT goods_id, goods_name FROM tbl_goods GROUP BY goods_name HAVING COUNT( goods_name ) >= 2 ) AS deletetable ON goods.goods_name = deletetable.goods_name 
WHERE
	goods.goods_id > deletetable.goods_id;

二.数据库读操作

1.基本查找

语法:

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 NOW();
// 多个列之间以英文逗号分隔, 查询表达式的顺序可以和表中字段的顺序不一致。查询表达式的顺序将影响查询结果的顺序。
SELECT username,id FROM users;
// 查寻所有列 
SELECT * FROM users;
// SELECT tbl_name.*可以表示查询命名表的所有列。使用多表连接查询的时候,有可能存在两张表中有相同的字段,加上表名.字段名,可以清晰分辨出字段属于哪张表
SELECT users.*,users.id FROM users;
// 查询表达式可以使用[AS]alias_name为其赋予别名,字段的别名也将影响结果集,一般最好加上AS。别名可用于GROUP BY,ORDER BY或HAVING子句。
SELECT id AS uid,username AS uname FROM users;
// 对记录进行过滤,如果没有指定WHERE语句,则显示所有记录。
SELECT id,username FROM users WHERE username='kimtian';
// 在WHERE表达式中,可以使用MySQL支持的函数或运算符
SELECT id,username FROM users WHERE id%3=2;

(1)GROUP BY 查询结果分组

语法:[GROUP BY{col_name | position}[ASC | DESC],...]

// 根据性别进行分组,ASC是升序,DESC是降序,默认为升序
SELECT sex FROM users GROUP BY sex DESC;
// 也可以GROUP BY num,表示SELECT语句根据第nun个出现的字段进行分组,但不建议这样使用,最好使用字段名称
SELECT username,id,age FROM users GROUP BY 2;

(2)HAVING 分组条件

语法:[HAVING where_condition]

// 要保证having后作为条件的字段必须出现在select语句中
SELECT id,sex,age from users GROUP BY id HAVING age >21;
// 或者使用聚合函数
SELECT sex from users GROUP BY sex HAVING count(id) >4;

(3)ORDER BY 对查询结果进行排序

语法:[ORDER BY{col_name | expr | position} [ASC|DESC],...]

// 根据年龄对结果进行排序
SELECT * FROM users ORDER BY age;
// 先根据年龄对结果进行排序,年龄重复的再根据id倒序排序
SELECT * FROM users ORDER BY age,id DESC;
// 先根据年龄对结果进行倒序排序,年龄重复的再根据id倒序排序
SELECT * FROM users ORDER BY age DESC,id DESC;

(3)LIMIT 限制查询结果返回的数量

语法:[LIMIT{[offset,]row_count | row_count OFFSET offset}]

// 只写一个数字,表示返回从头开始的前几条,如2表示返回前两条
SELECT * FROM users LIMIT 2;
// 想返回第2,3条数据,由于MySQL的select结果是从0开始的,所以offset偏移量为1开始,要写成1,2。
SELECT * FROM users LIMIT 1,2;
// LIMIT后面的限制条数只与结果集的顺序有关,与表中id值无任何关系。
// id倒序排序之后,再输出的两条数据变为了7,6这两条
SELECT * FROM users ORDER BY id DESC LIMIT 1,2;

猜你喜欢

转载自blog.csdn.net/third_/article/details/85207074