MySQL小测试(2)
2、创建一个stu表,字段有:自增主键id,不为空姓名,默认值性别(枚举类型),无限制身高
create table stu(
id int primary key auto_increment,
name char not null,
gender enum('男','女') default '男',
height float
);
3、为stu表依次插入以下三条数据
i)插入一条包含id,name,gender,height四个信息的数据
insert into stu values('0','nick','男','176')
ii)插入一条name,gender,height三个信息的数据
insert into stu(name,gender,height) values('nick','男','176')
iii)插入一条只有name信息的数据
insert into stu(name) values('nick')
4、创建一张有姓名、年龄的teacher表,在最后添加工资字段,在姓名后添加id主键字段
create table teacher(
name char not null,
id int primary key auto_increment,
age int,
salary float
);
5、思考:将4中id字段移到到表的最前方,形成最终字段顺序为id、姓名、年龄、工资
alter table 表名
change name name char not null default 0 alter id;
6、完成 学生表 与 国家表 的 多对一 表关系的创建,并完成数据测试
create table country(
id int primary key auto_increment,
countryname varchar(64) not null,
);
create table stu(
id int primary key auto_increment,
name char not null,
gender enum('男','女') default '男',
height float
stu_id int, # 一对多的外键不能设置唯一
foreign key(stu_id) references country(id)
on update cascade
on delete cascade,
);
# 增:先增加被关联表(country)的数据,再增加关联表(stu)的数据
mysql>: insert into country(name) values('中国'),('美国'),('德国');
mysql>: insert into stu(name, height, stu_id) values
('西游哥', 172.0, 1),
('东游哥', 186.1, 1),
('python小弟', 194.9, 2),
('轮回大哥', 166.4, 3);
# 更新:直接更新被关联表的(country) 主键,关联表(stu) 外键 会级联更新
mysql>: update country set id=10 where id=1;
# 更新:直接更新关联表的(stu) 外键,修改的值对应被关联表(country) 主键 如果存在,可以更新成功,反之失败
mysql>: update stu set stu_id=2 where id=3; # 成功
mysql>: update stu set stu_id=1 where id=4; # 失败
# 删被关联表,关联表会被级联删除
mysql>: delete from country where id = 2;
# 删关联表,被关联表不会发生变化
mysql>: delete from stu where stu_id = 3;
7、完成 学生表 与 课程表 的 多对多 表关系的创建,并完成数据测试
create table course(
id int primary key auto_increment,
name char not null,
course_time int unsigned default 0 # 课时
);
create table stu(
id int primary key auto_increment,
name char not null,
age int unsigned default 0
);
# 作者与出版社关系表:id, author_id, publish_id
create table stu_course(
id int primary key auto_increment,
# 关系表一定有多个外键,关联着多张表
stu_id int,
foreign key(stu_id) references stu(id)
on update cascade
on delete cascade,
course_id int,
foreign key(course_id) references course(id)
on update cascade
on delete cascade,
# 建立两个字段的联合唯一
unique(stu_id, course_id)
);
# 注:关系表 关联着 stu 和 course 两张表,在表结构上 stu 与 course 两表键没有任何关系
# 增:两张被关联表,没有前后关系,但关系表必须在两个表都提供数据后才能进行 关系匹配
mysql>: insert into course(name, course_time) values('python', 67),('java', 76),('go',3);
mysql>: insert into stu(name, age) values('nick', 20),('tank', 19);
# 操作关系表:
mysql>: insert into stu_course(stu_id, course_id) values(1,1),(1,2),(2,1),(2,2),(3,1);
# 关系表操作:增、删、改,只要两张被关系表有提供对应的操作数据,都可以操作成功,且对两张被关系表没有影响
# 操作两张被关系表:
# 增:不会影响关系表
mysql>: insert into course(name, course_time) values('PHP', 60);
# 改:关系表都会级联更新
mysql>: update course set id=10 where id=1;
# 删:关系表都会级联删除
mysql>: delete from stu where name='tank';
8、完成 学生表 与 学生简介表 的 一对一 表关系的创建,并完成数据测试
create table stu_detail(
id int primary key auto_increment,
info varchar(256),
info_address varchar(256)
);
create table stu(
id int primary key auto_increment,
name varchar(64) not null,
mobile char(11) unique not null,
sex enum('男', '女') default '男',
age int default 0,
detail_id int unique not null,
foreign key(detail_id) references stu_detail(id)
on update cascade
on delete cascade,
);
# 必须先创建被关联表数据,有关联表外键关联的记录后,关联表才可以创建数据
mysql>: insert into stu_detail(info,info_address) values('Tom_info','Tom_address');
mysql>: insert into author(name,mobile,detail_id) values('Tom','13344556677', 1);
mysql>: insert into author_detail(info,info_address) values('Bob_info','Bob_address');
mysql>: insert into author(name,mobile,detail_id) values('Bob','15666882233', 2);
# 修改关联表 author
mysql>: update stu set detail_id=3 where detail_id=2; # 失败,3详情不存在
mysql>: update stu set detail_id=1 where detail_id=2; # 失败,1详情已被关联
mysql>: insert into stu_detail(info,info_address) values('Tom_info_sup','Tom_address_sup');
mysql>: update stu set detail_id=3 where detail_id=2; # 有未被其他数据关联的数据,就可以修改
# 删除关联表 author
mysql>: delete from stu where detail_id=3; # 直接删除
# 修改被关联表 author_detail
mysql>: update stu_detail set id=10 where id=1; # 级联修改,同步关系关联表外键
# 删除被关联表 stu_detail
mysql>: delete from stu where detail_id=10; # 可以删除对被关联表无影响
mysql>: insert into stu(name,mobile,detail_id) values('Tom','13344556677', 10);
mysql>: delete from stu_detail where id=10; # 可以删除,将关联表的记录级联删除掉
9、将 学生表、国家表、课程表、学生简介表 四个表放在一起考虑表关系,并完成数据的增删测试
create table country(
id int primary key auto_increment,
countryname varchar(64) not null,
);
create table stu_detail(
id int primary key auto_increment,
info varchar(256),
info_address varchar(256)
);
create table course(
id int primary key auto_increment,
name char not null,
course_time int unsigned default 0
);
create table stu(
id int primary key auto_increment,
name char not null,
stu_id int,
foreign key(stu_id) references country(id)
on update cascade
on delete cascade,
detail_id int unique not null,
foreign key(detail_id) references stu_detail(id)
on update cascade
on delete cascade,
);
create table stu_course(
id int primary key auto_increment,
stu_id int,
foreign key(stu_id) references stu(id)
on update cascade
on delete cascade,
course_id int,
foreign key(course_id) references course(id)
on update cascade
on delete cascade,
unique(stu_id, course_id)
);
日考
第9题
9、将 学生表、国家表、课程表、学生简介表 四个表放在一起考虑表关系,并完成数据的增删测试
MySQL小测试(2)的更多相关文章
- MySQL小测试
<> 2.创建一个字符集为utf8的数据库,将数据库字符集修改为gbk create database db1 charset='utf8'; alter database db1 cha ...
- mysql基础测试
mysql基础测试 测试原因 为什么需要做性能测试 模拟比当前系统更高的负载,找出性能瓶颈 重现线上异常 测试不同硬件软件配置 规划未来的业务增长 测试分类 性能测试的分类 设备层的测试 ...
- PHP中使用PDO操作事务的一些小测试
关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...
- Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试
CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...
- paip.提升性能---mysql 性能 测试以及 参数调整.txt
paip.提升性能---mysql 性能 测试以及 参数调整.txt 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://b ...
- MySQL Router 测试使用 转
MySQL Router 测试使用 . 特性 MySQL Router 并没有包括一些特别新的特性, 总体上看中规中矩, 不过 first-available 和插件两个特性挺有意思, 后续会进行讲解 ...
- 使用mysqlslap进行MySQL压力测试
使用mysqlslap进行MySQL压力测试发表于236 天前 ? MySQL ? 暂无评论 MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来 ...
- mysql 通过测试'for update',深入了解行锁、表锁、索引
mysql 通过测试'for update',深入了解行锁.表锁.索引 条件 FOR UPDATE 仅适用于InnoDB存储引擎,且必须在事务区块(BEGIN/COMMIT)中才能生效. mysql默 ...
- LINUX系统下MySQL 压力测试工具super smack
摘要:1.源文件下载地址:http://vegan.net/tony/supersmack/2.安装:注意在编译时,可以先把对应的libmysqlclient.so.*拷贝到/usr/lib3.测试: ...
随机推荐
- CF1217E Sum Queries? (线段树)
完了,前几天才说 edu 的 DEF 都不会,现在打脸了吧 qwq 其实在刚说完这句话 1min 就会了 D,3min 就会了 E 发现,对于大小 \(\ge 3\) 的不平衡集合,它至少有一个大小为 ...
- [LeetCode] 464. Can I Win 我能赢吗
In the "100 game," two players take turns adding, to a running total, any integer from 1.. ...
- [LeetCode] 347. Top K Frequent Elements 前K个高频元素
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
- axios详解
一.说明 Axios是一个基于Promise(ES6中用于处理异步的)的HTTP库(HTTP客户端),用于浏览器和node.js中,API. 浏览器中创建XMLHttpRequests 从node.j ...
- (十五)golang--init函数
每一个源文件都会包含一个init函数,这个函数会在执行main()执行之前被调用,相当于python中的__init__ 注意细节:(1)如果一个文件同时包含全局变量定义,init函数和main函数, ...
- Qt 编写串口调试助手
一.成品图展示 成品图如下所示: 二.串口通讯步骤 1.在工程文件(.pro)中添加串口通信相关运行库:QT += serialport 2.在头文件中添加: #include <QSerial ...
- 论文阅读: Building a 3-D Line-Based Map Using Stereo SLAM
Abstract 一个把直线用作feature的SLAM系统. 跟点相比, 直线对于环境的结构提供了更丰富的信息, 也让其鞥有可能推断地图的空间语义. 使用了Plucker line coordian ...
- [转帖]PG的时间函数使用整理如下
PG的时间函数使用整理如下 https://blog.csdn.net/dahuzix/article/details/48576945 1.获取系统时间函数 -- :: -- :: -- :: 2. ...
- pytest_demo_实战2_fixture应用
1.py文件所在文件夹下创建 __init__.py 文件 2.文件夹目录下:创建conftest.py import pytest # @pytest.fixture() 里面没有参数,那么默认sc ...
- golang学习笔记----并发
并发模型 并发目前来看比较主流的就三种: 多线程:每个线程一次处理一个请求,线程越多可并发处理的请求数就越多,但是在高并发下,多线程开销会比较大. 协程:无需抢占式的调度,开销小,可以有效的提高线程的 ...