1.主键约束
- 关键字 : primary key
格式一:在创建表时,在写字段的时候进行设置
- 只能设置一个主键
- 不能重复插入主键
- 插入的主键不能为null
CREATE TABLE pk01( id INT PRIMARY KEY , `name` VARCHAR(32) );
格式二:在创建表。声明在列后,声明主键约束
- 特点:可以将多个列声明成一个主键(联合主键)
CREATE TABLE pk02( id INT, `name` VARCHAR(20), CONSTRAINT PRIMARY KEY(id) );
格式三:在创建表之后,修改表结构,将列声明成主键
CREATE TABLE pk01( id INT , `name` VARCHAR(32) ); ALTER TABLE pk03 ADD CONSTRAINT PRIMARY KEY(id);
2 .唯一约束
- 关键字:unique
格式一:在创建表时,在写字段的时候进行设置
* 设置唯一约束的列不可重复插入
* 设置唯一约束的列允许为null值
CREATE TABLE pk01( id INT UNIQUE , `name` VARCHAR(32) );
格式二 : 在创建表。声明在列后,声明主键约束
CREATE TABLE pk02( id INT, `name` VARCHAR(20), CONSTRAINT UNIQUE(id) );
格式三:在创建表之后,修改表结构,将列声明成主键
CREATE TABLE pk01( id INT , `name` VARCHAR(32) ); ALTER TABLE pk03 ADD CONSTRAINT UNIQUE(id);
3 非空约束
- 关键字:not null
- 特点:
- 被设置的列可以重复插入数据
- 不允许为null
CREATE TABLE pk01( id VARCHAR(20) NOT NULL , `name` VARCHAR(32) );
4 mysql 特有 自动增长列
关键字: auto_increment
特点:
被自动增长列修饰的列,将自动累加,自己维护列中的数据
限定条件:
被修饰的列的类型,必须是数字类型(int,float,douoble)
必须被键key修饰(主键primary key , 唯一约束 unique)
CREATE TABLE ai01(){ id INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(20) }
5 补充-----截取小数点 truncate
作业中遇到 ----截取小数点
关键字:truncate(要截取的数,要截取几位);
SELECT cno `课程`, TRUNCATE(AVG(degree),2) `平均成绩` FROM score GROUP BY cno ;
6 访问查询多个表
- 语法: select * | name from b表1 表1的别名,表2 表1的别名 where 条件;
- 可通过条件将两表相连
-- 20、查询所有学生的Sname、Cno和Degree列(两表连接)。 SELECT sname,cno,degree FROM student s , score c WHERE s.sno = c.sno ;
7 where 字段 in(多个条件)
- 可在where 字段后 in括号中写多个查询条件
1. -- 5、 查询Score表中成绩为85,86或88的记录。 2. SELECT * FROM score WHERE degree IN(85,86) OR degree = 88 ;
8 like 模糊查询
- 字段1 like '%字段2%' : 字段1包含中包含字段2
- 字段1 like '字段2%' : 字段1以字段2 开始
- 字段1 like '%字段2' :字段1以字段2 结束
-- 16、查询Student表中不姓“王”的同学记录。 SELECT * FROM student WHERE sname NOT LIKE '王%'; - 通过标题(模糊查询)和价格查询书籍 SELECT * FROM book WHERE title LIKE '%二%' AND price = 100 ;
9 分页
- 关键字:limit 起始索引,每页页数
- 公式:起始索引 = (页数-1)*每页页数
# 语法 select * from 表名 limit startIndex, pageSize; # 参数1:startIndex开始索引,从0开始 # 参数2:pageSize 每页个数 # 第一页,每页2条 SELECT * FROM person LIMIT 0,2 ; # 第二页 SELECT * FROM person LIMIT 2,2 ; # 第三页 SELECT * FROM person LIMIT 4,2 ; # 第 pageNum 页 , startIndex = (pageNum-1) * pageSize # 第二页,每页3条 SELECT * FROM person LIMIT 3,3 ; # 第6页,每页5条 SELECT * FROM person LIMIT 25,5 ;
10 难点一 【聚合avg+count+分组+截取小数点】
分析:
select cname 要查询的课程
TRUNCATE(AVG(degree),2) 对该列进行 计算平均分并截取小数点
FROM score s , course c 要查询的表,并写明表的别名
WHERE s.cno = c.cno 条件查询,将两个表根据对应的外键进行两表相连
GROUP BY cname 对课程名进行分组,平均分就可计算分组后的课程单 列平均分
HAVING COUNT(degree) >= 5 对其分组后进行条件约束,只对其满足条件的分组进行计数单列平均分
-- 19、查询Score表中至少有5个成绩记录的课程的平均分数。 SELECT cname , TRUNCATE(AVG(degree),2) FROM score s , course c WHERE s.cno = c.cno GROUP BY cname HAVING COUNT(degree) >= 5 ;