问题:简历一个供应商,零件数的数据库;
供应

零碎的指令:
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 表名;

效果如下“学生”表:

修改mysqldblink 修改mysql的结束符_表名

“课程”表

select * from 课程;
select * from 学生课程关系;

如下:

修改mysqldblink 修改mysql的结束符_mysql_02


修改mysqldblink 修改mysql的结束符_数据库_03

下面是搜索就以这三个表为基础:
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 ;

修改mysqldblink 修改mysql的结束符_mysql_04

select Sname,avg(Grade) 
				from 学生,学生课程关系 
				where 学生.Sno = 学生课程关系.Sno 
				group by Sname 
				having avg(Grade)>85;

修改mysqldblink 修改mysql的结束符_数据库_05


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.全局约束:

  1. 检查子句
  2. 断言

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;