mysql-操作表

本文围绕 MySQL 展开,介绍了新建表、写入、删除、更新等操作。着重讲解了查询相关内容,如 WHERE 语句用于限制操作,SELECT 命令读取记录,还介绍了 GROUP BY、HAVING、ORDER BY 和 LIMIT 等语句的使用,帮助读者掌握 MySQL 基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建表

CREATE TABLE users (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
    username VARCHAR(20) NOT NULL COMMENT '用户名',
    sex TINYINT DEFAULT 0 COMMENT '用户性别',
    age TINYINT UNSIGNED COMMENT '用户年龄'  
);

写入

// 单条插入
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
// 如果数据是字符型,必须使用引号,如:"value" 或 'value'。
// table_name 后不加字段的话,VALUES必须写入全部字段的值 如:
INSERT INTO users VALUES (NULL,'小明',0,20);
// 在AUTO_INCREMENT列中,写null或defaul会自增
// 选择字段写入
INSERT INTO users (username,age) VALUES ('阿喵',20);

// 查询结果 SELECT * FROM users;
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  1 | 小明     |    0 |   20 |
|  2 | 阿喵     |    0 |   20 |
+----+----------+------+------+

// 多条插入
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ),( value1, value2,...valueN )...;

// 例
INSERT INTO users VALUES (NULL,'小海',0,20),(NULL,'小红',0,20),(NULL,'小蚂',0,20);

// 查询 
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  1 | 小明     |    0 |   20 |
|  2 | 阿喵     |    0 |   20 |
|  3 | 小海     |    0 |   20 |
|  4 | 小红     |    0 |   20 |
|  5 | 小蚂     |    0 |   20 |
+----+----------+------+------+

where

WHERE语句用于限制查询、更新或删除

操作符描述实例
=等号,检测两个值是否相等,如果相等返回true(A = B) 返回false。
<>, !=不等于,检测两个值是否相等,如果不相等返回true(A != B) 返回 true。
>大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true(A > B) 返回false。
<小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true(A < B) 返回 true。
>=大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true(A >= B) 返回false。
<=小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true(A <= B) 返回 true。
// 查找id 为4的用户
SELECT * FROM users WHERE id = 4;
// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  4 | 小红     |    0 |   20 |
+----+----------+------+------+


// 具体使用在删除章节,更新章节,查询章节可找到,这里不再详述

 

删除

DELETE FROM table_name [WHERE Clause]

DELETE FROM 命令用来删除 MySQL 数据表中的记录。

如果没有指定 WHERE 条件,MySQL 表中的所有记录将被删除。

// 删除id 大于等于 5的数据
DELETE FROM users WHERE id >= 5;
// 不加WHERE将会删除所有用户
// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  1 | 小明     |    0 |   20 |
|  2 | 阿喵     |    0 |   20 |
|  3 | 小海     |    0 |   20 |
|  4 | 小红     |    0 |   20 |
+----+----------+------+------+

// 删除小明的数据
DELETE FROM users WHERE username = '小明';

// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  2 | 阿喵     |    0 |   20 |
|  3 | 小海     |    0 |   20 |
|  4 | 小红     |    0 |   20 |
+----+----------+------+------+

更新

UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
// 更新所有用户性别为 1
UPDATE users SET sex = 1;
//结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  2 | 阿喵     |    1 |   20 |
|  3 | 小海     |    1 |   20 |
|  4 | 小红     |    1 |   20 |
+----+----------+------+------+

// 也可写表达式 :// id = 2 的用户年龄加 1
UPDATE users SET age = age + 1 WHERE id = 2;
// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  2 | 阿喵     |    1 |   21 |
|  3 | 小海     |    1 |   20 |
|  4 | 小红     |    1 |   20 |
+----+----------+------+------+

查询

SELECT column_name,column_name FROM table_name [WHERE Clause]

查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。

SELECT 命令可以读取一条或者多条记录。

你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

你可以使用 WHERE 语句来包含任何条件。

你可以使用 LIMIT 属性来设定返回的记录数。

具体使用看下文,这里详述

写入查询

INSERT INTO table_name () SELECT field1,field2... FROM other_table_name;

// 新建一个新表
CREATE TABLE `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(20) NOT NULL,
  `user_age` tinyint(3) unsigned DEFAULT NULL,
  `user_sex` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
);
//现在把年龄 20 的用户写入新表
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  2 | 阿喵     |    1 |   21 |
|  3 | 小海     |    1 |   20 |
|  4 | 小红     |    1 |   20 |
+----+----------+------+------+

INSERT INTO user (user_name,user_sex,user_age) SELECT username,sex,age FROM users WHERE age = 20;

//现在新表就有了年龄 = 20 的用户
+---------+-----------+----------+----------+
| user_id | user_name | user_age | user_sex |
+---------+-----------+----------+----------+
|       1 | 小海      |       20 |        1 |
|       2 | 小红      |       20 |        1 |
+---------+-----------+----------+----------+

 

group by

GROUP BY 语句根据一个或多个列对结果集进行分组。

// 先写入几个用户
INSERT INTO users VALUES (NULL,'大航',0,22),(NULL,'悟空',1,35),(NULL,'杰克',0,25),(NULL,'伏羲',1,80),(NULL,'后羿',0,20);
//查询结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  2 | 阿喵     |    1 |   21 |
|  3 | 小海     |    1 |   20 |
|  4 | 小红     |    1 |   20 |
|  6 | 大航     |    0 |   22 |
|  7 | 悟空     |    1 |   35 |
|  8 | 杰克     |    0 |   25 |
|  9 | 伏羲     |    1 |   80 |
| 10 | 后羿     |    0 |   20 |
+----+----------+------+------+

// 根据性别分组 查看各个性别用户数量
SELECT sex,count(sex) AS count FROM users GROUP BY sex;
// count() 为MySQL聚合函数,对表中记录数进行计数.
// AS 为给count(sex) 起别名
// 结果
+------+-------+
| sex  | count |
+------+-------+
|    0 |     3 |
|    1 |     5 |
+------+-------+

 

having

HAVING用于给GROUP BY 增加条件

//having 条件字段一定要在select语句字段中出现过
// 统计用户年龄

SELECT sex,age,COUNT(age) FROM users GROUP BY age;

// 结果
+------+------------+
| age  | count(age) |
+------+------------+
|   20 |          3 |
|   21 |          1 |
|   22 |          1 |
|   25 |          1 |
|   35 |          1 |
|   80 |          1 |
+------+------------+

// 显示年龄大于 22 小于 65 的用户数

SELECT age,count(age) FROM users GROUP BY age HAVING age > 20 && age <65 ;

// 结果
+------+------------+
| age  | count(age) |
+------+------------+
|   21 |          1 |
|   22 |          1 |
|   25 |          1 |
|   35 |          1 |
+------+------------+
 

 

order by

对查询结果进行排序

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]

你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列

// id 倒叙
SELECT * FROM users ORDER BY id DESC ;

// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
| 10 | 后羿     |    0 |   20 |
|  9 | 伏羲     |    1 |   80 |
|  8 | 杰克     |    0 |   25 |
|  7 | 悟空     |    1 |   35 |
|  6 | 大航     |    0 |   22 |
|  4 | 小红     |    1 |   20 |
|  3 | 小海     |    1 |   20 |
|  2 | 阿喵     |    1 |   21 |
+----+----------+------+------+

// 年龄倒叙
SELECT * FROM users ORDER BY age DESC ;
// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  9 | 伏羲     |    1 |   80 |
|  7 | 悟空     |    1 |   35 |
|  8 | 杰克     |    0 |   25 |
|  6 | 大航     |    0 |   22 |
|  2 | 阿喵     |    1 |   21 |
|  3 | 小海     |    1 |   20 |
|  4 | 小红     |    1 |   20 |
| 10 | 后羿     |    0 |   20 |
+----+----------+------+------+

// 年龄一样可以在追加条件
SELECT * FROM users ORDER BY age DESC,id DESC ;

// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  9 | 伏羲     |    1 |   80 |
|  7 | 悟空     |    1 |   35 |
|  8 | 杰克     |    0 |   25 |
|  6 | 大航     |    0 |   22 |
|  2 | 阿喵     |    1 |   21 |
| 10 | 后羿     |    0 |   20 |
|  4 | 小红     |    1 |   20 |
|  3 | 小海     |    1 |   20 |
+----+----------+------+------+

 

limit

limit子句用于限制查询结果返回的数量

SELECT * FROM tableName LIMIT start,end
limit 5 等同于 limit 0,5

 

# 返会前5条
SELECT * FROM users LIMIT 5;

// 结果

+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  2 | 阿喵     |    1 |   21 |
|  3 | 小海     |    1 |   20 |
|  4 | 小红     |    1 |   20 |
|  6 | 大航     |    0 |   22 |
|  7 | 悟空     |    1 |   35 |
+----+----------+------+------+

// 返回第3条和第4条
 SELECT * FROM users LIMIT 2,2;
// 结果
+----+----------+------+------+
| id | username | sex  | age  |
+----+----------+------+------+
|  4 | 小红     |    1 |   20 |
|  6 | 大航     |    0 |   22 |
+----+----------+------+------+

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值