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));解析

各字段含义详解
| 字段名 | 数据类型 | 约束 | 含义解释 |
|---|---|---|---|
| id | int(4) | not nullprimary keyauto_increment | • 学生ID,整型,显示宽度为4位 • 不能为空 • 设置为主键(唯一标识每一行) • 自动递增(每新增一条记录,值自动+1) |
| name | char(20) | not null | • 学生姓名,固定长度20字符 • 不能为空 • 如果姓名不足20位,会用空格补齐 |
| sex | int(4) | not nulldefault 0 | • 性别,整型,显示宽度4位 • 不能为空 • 默认值为0(通常0表示女,1表示男) |
| degree | double(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;

发表回复