问题:简历一个供应商,零件数的数据库;
供应
零碎的指令:
delimiter 可以临时定义mysql的结束符为其他符号例如:
delimiter // #临时定义mysql的结束符为//
创建表
create table s(Sno char(5) not null unique,
Sname char(20) unique,
State char(20),
primary key(Sno));
create table p(Pno char(6),Pname char(30) not null,
Color char(8),
Weight numeric(6,2),
City char(20),
primary key(Pno));
'''
建立关系模型
'''
create table ps(Pno char(6),
Sno char(5),
State char(20),
Qty numeric(9),
primary key(Pno,Sno),
foreign key(Sno) references s(Sno),
foreign key(Pno) references p(Pno));
修改表:
添加属性:
#向表s添加一列属性:City char(20)
alter table s add City char(20);
修改属性的基本域类型:
#将表s的City属性的基本域更改成int;
alter table s modify City int;
删除表:
#删除表s:
drop table s;
向表内插入数据
insert into 表名(字段1,字段2) vlaues(数据1,数据2;) #非完全插入
insert into 表名 vlaues(数据); #完全插入
更改数据:
update
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
搜索:
遍历表内所有内容:
select * from 表名;
效果如下“学生”表:
“课程”表
select * from 课程;
select * from 学生课程关系;
如下:
下面是搜索就以这三个表为基础:
1.简单查询:
select Sno from 学生 where addr = 1;
2.多表联合查询(联合查询):
select Sname,Cname,Grade
from 学生,学生课程关系,课程
where 学生.Sno = 学生课程关系.Sno and 课程.Cno = 学生课程关系.Cno and 学生.Sno = 1;
3.1子查询:
select Sname
from 学生
where Sno in (
select Sno
from 学生课程关系
where Cno = '21' and Grade > 85);
3.2聚集函数:
MIN();最小值
MAX();最大值
AVG();平均值
COUNT();计数
SUM();相加
4分组查询:
4.1group by 子句:
select Sno,avg(Grade) from 学生课程关系 group by Sno;
4.2having子句:
distinct()去除重复的内容;
having 条件;使得不需要的分组为空;
select Sname,avg(Grade)
from 学生,学生课程关系
where 学生.Sno = 学生课程关系.Sno
group by Sname ;
select Sname,avg(Grade)
from 学生,学生课程关系
where 学生.Sno = 学生课程关系.Sno
group by Sname
having avg(Grade)>85;
5.更名操作:
旧的名字 as 新的名字;
6.集合操作:
union:∪(与select不同,不显示重复的元素)
(select Sname,avg(Grade) from 学生,学生课程关系 where 学生.Sno = 学生课程关系.Sno group by Sname having avg(Grade)>85)
union
(select Sname,avg(Grade) from 学生,学生课程关系 where 学生.Sno = 学生课程关系.Sno group by Sname having avg(Grade)<85);
intersect:∩
(select Sname,avg(Grade) from 学生,学生课程关系 where 学生.Sno = 学生课程关系.Sno group by Sname having avg(Grade)>85)
intersect
(select Sname,avg(Grade) from 学生,学生课程关系 where 学生.Sno = 学生课程关系.Sno group by Sname having avg(Grade)<85);
expect:—
7.视图:
我理解的视图,类似一种excel的筛选,去除不要的属性,留下有用的属相,视图里面的数据来源与源表格,视图只是调用了的源表格的数据而已。
建立视图如下:
create view 视图名
as select 源表格的属性
from 源表格的名字
where 条件
约束;
with语句(可以创建暂时的视图)
8.全局约束:
- 检查子句
- 断言
9.触发器 创建触发器结构:
create trigger 触发器名字
after|before
监督的动作(insert|delete|update)
on 监督的表名
begin
发送的动作(mysql指令);
end;
10.存储过程(github文档)
创建储藏过程
create procedure 过程名([in|out|inout] 传入的参数名 参数类型,)
begin
mysql命令指令
end;
'''
例如下面的代码:
'''
create procedure update_emp(in i char(20),in p char(20))
begin
update employee set phone = p where id = i;
end;