Mysql学习05 之 SQL 配套语句

外键

创建外键

create table my_foreign1(
id int primary key auto_increment,
name varchar(20) not null comment “学生姓名”,
c_id int comment “班级id” – 普通字段
– 增加外键
foreign key(c_id ) references my_class(id)
)charset utf8;

创建一个表

create table if not exists my_foreign2(
id int primary key auto_increment,
name varchar(20) not null comment “学生姓名”,
c_id int comment “班级id” – 普通字段
)charset utf8;

增加外键

alter table my_foreign2 add
– 指定外键名
constraint student_class_1
– 指定外键字段
foreign key(c_id)
– 引用父表主键
references my_class(id);

删除外键

alter table my_foreign1 drop foreign key my_foreign1_ibfk_1;

– 插入数据: 外键字段在父表中不存在
insert into my_foreign2 values (null, ‘张总’,4); – 实际没有四班
insert into my_foreign2 values (null, ‘刘德华’,1);
insert into my_foreign2 values (null, ‘晁盖’,2);
insert into my_foreign2 values (null, ‘郭德明’,2);

– 更新父表记录
update my_class set id = 4 where id = 1; – 失败: id = 1 的记录已经被学生引用
update my_class set id = 4 where id = 3; – 可以: 没有引用

– 插入数据
insert into my_foreign1 values(null,’王宝庆’,5);

– 增加外键
alter table my_foreign1 add foreign key c_id references my_class(id);

外键约束

– 创建外键: 指定模式: 删除置空, 更新级联
create table if not exists my_foreign3(
id int primary key auto_increment,
name varchar(20) not null,
c_id int,
– 增加外键
foreign key(c_id)
– 引用表
references my_class(id)
– 指定删除模式
on delete set null
– 指定更新模式
on update cascade
)charset utf8;

– 插入数据
insert into my_foreign3 values(null,’刘备’,1),
(null,’曹操’,1),
(null,’杨阳’,1),
(null,’牛牛’,2),
(null,’周瑜’,2);

– 更新父表主键
update my_class set id = 3 where id = 1;

– 删除父表主键
delete from my_class where id = 2;

联合查询

– 联合查询
select * from my_class
union – 默认去重
select * from my_class;

– 联合查询
select * from my_class
union all – 不去重
select * from my_class;

– 联合查询
select id, c_name,room from my_class
union all – 不去重
select name, number,id from my_student;

– 需求: 那声升序, 女生降序(年龄)
(select * from my_student where sex = ‘男’ order by age asc limit 9999999)
union
(select * from my_student where sex = ‘女’ order by age desc limit 9999999);

子查询:

标量子查询

– 标量子查询
select * from my_student where c_id =
(select id from my_class where c_name = ‘java0001’);

列子查询

select * from my_student where c_id in(select id from my_class);

– any ,some ,all 肯定结果
select * from my_student where c_id =any(select id from my_class);
select * from my_student where c_id =some(select id from my_class);
select * from my_student where c_id =all(select id from my_class);

– any, some, all 否定结果
select * from my_student where c_id !=any(select id from my_class); – 所有结果 (null除外)
select * from my_student where c_id !=some(select id from my_class); – 所有结果 (null除外)
select * from my_student where c_id !=all(select id from my_class); – 2 (null除外)

行子查询

select * from my_student where
– (age,height) 称之为行元素 (构造行元素)
(age,height) = (select max(age),max(height) from my_student);

表子查询

select * from my_student group by c_id order by height desc;
select * from (select * from my_student order by height desc)
as student group by c_id;

exists 子查询:

select * from my_student where
exists(select * from my_class where id = 1);

exists 子查询:

select * from my_student where
exists(select * from my_class where id = 6);

视图

创建视图

– 视图: 单表 + 多表
create view my_v1 as
select * from my_student;

create view my_v2 as
select * from my_class;

– 多表视图
create view my_v3 as
select s.*,c.c_name,c.room from my_student as s
left join my_class c on s.c_id = c.id;

查看视图创建语句

show create view my_v3;

视图使用

– 视图使用
select * from my_v1;
select * from my_v2;
select * from my_v3;

修改视图

– 修改视图
alter view my_v1 as
select id,name,age, sex,height, c_id from my_student;

删除视图

– 删除视图
drop view my_v4;

视图数据操作

视图数据新增.

– 新增数据.(单表视图: 视图不包含所有不允许为空的字段(学号)).
insert into my_v1 values(null,’杨阳’,150,’男’,180,1);

– 插入my_v2 数据.
insert into my_v2 values (null,’java0005’,’D101’);

视图删除数据

– 单表视图删除数据.
delete from my_v2 where id = 5;

多表数据更新数据

– 更新数据
update my_v3 set c_id = 4 where id =6;

– 视图: 年龄age 字段限制更新
create view my_v4 as
select * from my_student where age > 30 with check option;
– 表示视图的数据来源都是大于 30 岁: where age> 30 决定
– with check option: 决定通过视图更新的时候, 不能将已经得到的数据age>30 的改成 小于30 的.

– 将视图可以查到的数据改成 小于 30
update my_v4 set age = 20 where id = 7;

– 可以修改数据(修改之后成为让视图可以查到的数据)让视图可以查到的
– 可以改但是无效果:
update my_v4 set age = 20 where id = 6;

– 获取所有班级中最高的一个学生
create view my_v5 as
select * from my_student order by height desc;

select * from my_v5 group by c_id;

视图算法:

– 指定算法为临时表
create algorithm = temptable view my_v6 as
select * from my_student order by height desc;

select * from my_v6 group by c_id;

数据备份与还原:

数据表备份:

– 创建myisam表
create table if not exists my_myisam(
id int
)charset utf8 engine = myisam;

– 单表数据备份.
select * into outfile ‘C:/SQLbeifen/student.txt’
from my_student;

– 指定备份处理方式
select * into outfile ‘c:/SQLbeifen/student.txt2’
– 字段处理
fields
enclosed by ‘”’ – 数据使用双引号包裹
terminated by ‘|’ – 使用竖线分割字段数据
– 行处理
lines
starting by ‘START:’
from my_student;

还原数据

– 还原数据
load data infile ‘c:/SQLbeifen/student.txt2’
into table my_student
– 字段处理
fields
enclosed by ‘”’ – 数据使用双引号包裹
terminated by ‘|’ – 使用竖线分割字段数据
– 行处理
lines
starting by ‘START:’;

SQL备份 (注意: 在 mysqldump 客户端里是不支持注释的, 语句最后也不加分号).

– 单表备份
mysqldump -uroot -proot mydatabase my_student > c:/SQLbeifen/student.sql

– 整库备份
mysqldump -uroot -proot mydatabase > c:/SQLbeifen/mydatabase.sql

– 还原数据: mysql客户还原
mysql.exe -uroot -proot mydatabase < c:/SQLbeifen/student.sql

– sql指令还原sql备份
source c:/SQLbeifen/student.sql ;

猜你喜欢

转载自blog.csdn.net/yangyang_A/article/details/80355244