一. 数据库约束
1. 约束类型
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- DEFAULT - 规定没有给列赋值时的默认值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句
2. 案例
以student表为例:
-- 学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY, --PRIMARY KEY:主键约束
sn INT UNIQUE, --UNIQUE 约束
address VARCHAR(20) NOT NULL, --NULL约束
name VARCHAR(20) DEFAULT 'unkown', --DEFAULT:默认值约束
qq_mail VARCHAR(20),
sex varchar(1),
check (sex ='男' or sex='女') --check约束
);
FOREIGN KEY:外键约束
外键用于关联其他表的主键
或
唯一键
,语法:
foreign key (字段名) references 主表(列)
案例:创建student 表和 class表
-- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
id INT PRIMARY KEY auto_increment,
name VARCHAR(20),
`desc` VARCHAR(100)
);
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);
二:聚合查询
1.聚合函数
常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有

1.1 案列
--COUNT
--统计班级共有多少同学
SELECT COUNT(*) FROM student;
SELECT COUNT(0) FROM student;
-- 统计班级收集的 qq_mail 有多少个,qq_mail 为 NULL 的数据不会计入结果
SELECT COUNT(qq_mail) FROM student;
--SUM
-- 统计数学成绩总分
SELECT SUM(math) FROM exam_result;
-- 不及格 < 60 的总分,没有结果,返回 NULL
SELECT SUM(math) FROM exam_result WHERE math < 60;
--AVG
-- 统计平均总分
SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;
--MAX
-- 返回英语最高分
SELECT MAX(english) FROM exam_result;
--MIN
-- 返回 > 70 分以上的数学最低分
SELECT MIN(math) FROM exam_result WHERE math > 70;
2. GROUP BY子句
SELECT 中使用
GROUP BY
子句可以对指定列进行分组查询。需要满足:使用
GROUP BY
进行分组查 询时,SELECT
指定的字段必须是
“
分组依据字段
”
,其他字段若想出现在
SELECT
中则必须包含在聚合函 数中。
select column1, sum(column2), .. from table group by column1,column3;
--查询每个角色的最高工资、最低工资和平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role;
3. HAVING
GROUP BY
子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用
WHERE
语句,而需要用 HAVING
--显示平均工资低于1500的角色和它的平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role
having avg(salary)<1500;