mysql表的增删改查操作指南

1.创建表:

mysql> create table MyClass(
-> id int(4) not null primary key auto_increment,
-> name char(20) not null,
-> sex int(4) not null default 0,
-> degree double(16,2));解析

各字段含义详解

字段名数据类型约束含义解释
idint(4)not null
primary key
auto_increment
• 学生ID,整型,显示宽度为4位
• 不能为空
• 设置为主键(唯一标识每一行)
• 自动递增(每新增一条记录,值自动+1)
namechar(20)not null• 学生姓名,固定长度20字符
• 不能为空
• 如果姓名不足20位,会用空格补齐
sexint(4)not null
default 0
• 性别,整型,显示宽度4位
• 不能为空
• 默认值为0(通常0表示女,1表示男)
degreedouble(16,2)• 分数/成绩,双精度浮点数
• 总共16位,其中小数点后保留2位

然后show tables; #确认一下创建是否成功

desc MyClass; #可以直接这样查询表的详情

增:

然后我以为id是自动递增,我就没加这个参数,然后出现了以下错误:

mysql> insert into MyClass values ('张三', 1, 88.5);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

两种正确的解决方法

方法一:指定要插入的字段(推荐)

明确告诉MySQL你要给哪些字段赋值,这样更清晰也更容易维护:

insert into MyClass (name, sex, degree) values ('张三', 1, 88.5);

为什么这样可行?

  • id 字段是 auto_increment,你不给它值,MySQL会自动生成
  • 你明确指定了要插入的3个字段,MySQL就知道怎么对应了

方法二:给所有字段提供值(包括id)

如果要用 values 不加字段名,就必须提供所有字段的值:

-- 方法A:id 给 NULL,MySQL会自动生成下一个编号
insert into MyClass values(NULL, '张三', 1, 88.5);

-- 方法B:id 给 0,也会自动生成(某些MySQL版本)
insert into MyClass values(0, '张三', 1, 88.5);

-- 方法C:id 给 DEFAULT 关键字
insert into MyClass values(DEFAULT, '张三', 1, 88.5);

对于 auto_increment 字段,通常用 NULL 或 DEFAULT 让MySQL自动处理。

完整示例

-- 插入多条数据
insert into MyClass (name, sex, degree) values 
    ('张三', 1, 88.5),
    ('李四', 0, 92.0),
    ('王五', 1, 76.5);

-- 查询验证
select * from MyClass;

-- 只查询特定列
select name, degree from MyClass;
-- 给列起别名(显示更友好)
select name as '姓名', degree as '成绩' from MyClass;
###条件查询###
-- 查询成绩大于80分的学生
select * from MyClass where degree > 80;

-- 查询男生(假设sex=1表示男)
select * from MyClass where sex = 1;

-- 查询女生且成绩大于90
select * from MyClass where sex = 0 and degree > 90;

-- 查询名字包含'张'的学生(模糊查询)
select * from MyClass where name like '%张%';
###排序查询###
-- 按成绩从高到低排序
select * from MyClass order by degree desc;

-- 按成绩从低到高排序
select * from MyClass order by degree asc;

-- 先按性别分组,再按成绩排序
select * from MyClass order by sex, degree desc;
###统计查询###
-- 统计总学生数
select count(*) as '总人数' from MyClass;

-- 统计男生和女生各多少人
select sex, count(*) as '人数' from MyClass group by sex;

-- 计算全班平均分
select avg(degree) as '平均分' from MyClass;

-- 最高分、最低分
select max(degree) as '最高分', min(degree) as '最低分' from MyClass;

-- 按性别统计平均分
select sex, avg(degree) as '平均分' from MyClass group by sex;

改:

修改表中数据
语法:update 表名 set 字段=新值,… where 条件
mysql> update MyClass set name=’Mary’ where id=1;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注