问题:简历一个供应商,零件数的数据库;
供应
零碎的指令:
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;



