当前位置:网站首页>第4阶段 Mysql数据库
第4阶段 Mysql数据库
2022-07-06 09:15:00 【@小蜗牛】
目录
学习网址
点此跳转:https://www.educoder.net/shixuns/rx56kula/challenges
4-1MySQL数据库 - 初识MySQL
输入命令:mysql -u用户名 -p密码
在平台上连接数据库还需要加上一句-h127.0.0.1。
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
注意别忘了末尾的分号;
第2关:创建表
数据库中的数据是存放在一张一张的表中的。
你可以想象数据库就像一个文件夹,而表你可以理解为一个excel表格,其实他们本来就挺像。
mysql -uroot -p123123 -h127.0.0.1
create database TestDb;
show databases;
use TestDb;
create table t_emp (
id Int,
name VARCHAR(32),
deptId Int,
salary FLOAT
);
desc t_emp;
第3关:使用主键约束
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
use MyDb;
create table t_user1 (
userId Int PRIMARY KEY,
name VARCHAR(32),
password VARCHAR(11),
phone VARCHAR(11),
email VARCHAR(32)
);
desc t_user1;
create table t_user2 (
name VARCHAR(32),
phone VARCHAR(11),
email VARCHAR(32),
PRIMARY KEY(name,phone)
);
desc t_user2;
第4关:外键约束
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
use MyDb;
create table t_class(
id Int PRIMARY KEY,
name VARCHAR(22)
);
desc t_class;
create table t_student(
id Int PRIMARY KEY,
name VARCHAR(22),
classId Int,
CONSTRAINT fk_stu_class1 FOREIGN KEY(classId) REFERENCES t_class(Id)
);
desc t_student;
第5关:添加常用约束
设置表的属性值自动增加 AUTO_INCREMENT
mysql -uroot -p123123 -h127.0.0.1
create database MyDb;
show databases;
use MyDb;
create table t_user(
id Int PRIMARY KEY auto_increment,
username VARCHAR(32) not null unique,
sex VARCHAR(4) default '男'
)DEFAULT CHARSET=utf8;
4-2MySQL数据库 - 数据库和表的基本操作(一)
第1关:查看表结构与修改表名
语法规则为:DESCRIBE 表名;
大小写不敏感哟!
再告诉大家一个小诀窍,是不是觉得返回的结果排版有点乱。我们加上\G后效果就会有所改善哟,来看看!
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## modify the table name ##########
alter table tb_emp rename jd_emp;
########## show tables in this database ##########
show tables;
########## describe the table ##########
desc jd_emp;
########## End ##########
第2关:修改字段名与字段数据类型
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## change the column name ##########
alter table tb_emp change Id prod_id int(11);
########## change the data type of column ##########
alter table tb_emp modify Name varchar(30);
########## End ##########
DESCRIBE tb_emp;
第3关:添加与删除字段
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## add the column ##########
alter table tb_emp add Country varchar(20) after Name;
########## delete the column ##########
alter table tb_emp drop Salary;
########## End ##########
DESCRIBE tb_emp;
第4关:修改字段的排列位置
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## modify the column to top ##########
alter table tb_emp modify Name varchar(25) first;
########## modify the column to the rear of another column ##########
alter table tb_emp modify DeptId int(11) after Salary;
########## End ##########
DESCRIBE tb_emp;
第5关:删除表的外键约束
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## delete the foreign key ##########
alter table tb_emp drop FOREIGN KEY emp_dept;
########## End ##########
SHOW CREATE TABLE tb_emp \G;
4-3MySQL数据库 - 数据库和表的基本操作(二)
第1关:插入数据
插入一列
ERROR 1062 (23000) at line 8: Duplicate entry ‘0’ for key ‘PRIMARY’
原因:主键字段有两条为0的记录,冲突。(设置主键自增解决)( duplicate重复)
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## bundle insert the value ##########
insert into tb_emp (Id,Name,DeptId,Salary)
values(1,'Nancy',301,2300),(2,'Tod',303,5600),(3,'Carly',301,3200);
########## End ##########
SELECT * FROM tb_emp;
第2关:更新数据
UPDATE Mall_products2
SET country_name = "Pakistan", country_id = 92
WHERE id = 2;
USE Company;
#请在此处添加实现代码
########## Begin ##########
########## update the value ##########
update tb_emp
set Name="Tracy",DeptId=302,Salary=4300.00
where Id = 3;
########## End ##########
SELECT * FROM tb_emp;
注意:最后一句要加分号;其次,单双引号要注意区分
第3关:删除数据
对表操作,用drop
对行操作,用delete
4-4MySQL数据库 - 单表查询(一)
第1关:基本查询语句
第2关带 IN 关键字的查询
第3关带 BETWEEN AND 的范围查询
4-5MySQL数据库 - 单表查询(二)
第1关带 LIKE 的字符匹配查询
第2关查询空值与去除重复结果
USE Company;
######### Begin #########
select *
from tb_emp
where DeptId is null;
######### End #########
######### Begin #########
select distinct Name
from tb_emp;
######### End #########
第3关带 AND 与 OR 的多条件查询
USE Company;
######### Begin #########
#使用关键字AND返回数据表中字段DeptId为301并且薪水大于3000的所有字段的内容,
select *
from tb_emp
where DeptId=301 and Salary>3000;
######### End #########
######### Begin #########
#使用关键字IN返回数据表中字段DeptId为301和303的所有字段的内容。
select *
from tb_emp
where DeptId in (301,303);
######### End #########
4-6MySQL数据库 - 单表查询(三)
第1关对查询结果进行排序
SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC[DESC]];
ASC 升序关键字
DESC 降序关键字
第2关分组查询
第3关使用 LIMIT 限制查询结果的数量
USE School;
#请在此处添加实现代码
########## Begin ##########
########## 查询班级中第2名到第5名的学生信息 ##########
select *
from tb_score
order by score desc
limit 1,4;#从第二条记录开始往后查看4条数据(不包含第一条):
########## End ##########
4-7MySQL数据库 - 使用聚合函数查询
第1关:COUNT( )函数
USE School;
#请在此处添加实现代码
########## Begin ##########
########## 查询该表中一共有多少条数据 ##########
select count(*)
from tb_class;
########## 查询此表中367班有多少位学生 ##########
select classid,count(*)
from tb_class
where classid=367;
########## End ##########
第2关SUM( )函数
USE School;
#请在此处添加实现代码
########## Begin ##########
########## 查询所有学生总分数 ##########
select sum(score)
from tb_class;
########## 查询学生语文科目的总分数 ##########
select course,sum(score)
from tb_class
where course="语文";
########## End ##########
第3关AVG( )函数
第4关MAX( )函数
第5关MIN( )函数
4-8MySQL数据库 - 连接查询
第1关内连接查询
USE School;
########## 查询数据表中学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, tb_class.name as className
from tb_student join tb_class
on tb_student.class_id=tb_class.id;
########## End ##########
第2关外连接查询
USE School;
########## 使用左外连接查询所有学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, tb_class.name as className
from tb_student left join tb_class
on tb_student.class_id=tb_class.id;
########## End ##########
########## 使用右外连接查询所有学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, tb_class.name as className
from tb_student right join tb_class
on tb_student.class_id=tb_class.id;
########## End ##########
第3关复合条件连接查询
USE School;
########## 查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select tb_student.name as studentName, score,tb_class.name as className
from tb_student left join tb_class
on tb_student.class_id=tb_class.id
where score>90
order by score desc;
########## End ##########
4-9MySQL数据库 - 子查询
第1关带比较运算符的子查询
USE Company;
#请在此处添加实现代码
########## Begin ##########
#1.查询大于所有平均年龄的员工姓名与年龄
select name,age
from tb_emp
where age>all(
select avg(age)
from tb_emp);
########## End ##########
第2关关键字子查询
USE Company;
#请在此处添加实现代码
########## Begin ##########
#1.使用 ALL 关键字进行查询
select position,salary
from tb_salary
where salary>all(
select max(salary)
from tb_salary
where position="Java"
);
#2.使用 ANY 关键字进行查询
select position,salary
from tb_salary
where salary>ANY(
select min(salary)
from tb_salary
where position="Java"
);
#3.使用 IN 关键字进行查询
select position,salary
from tb_salary
where salary in (
select salary
from tb_salary
where position="Java"
);
########## End ##########
4-10MySQL数据库 - 分组选择数据
第1关GROUP BY 与 聚合函数
USE School;
#请在此处添加实现代码
########## Begin ##########
#1.查询表中2,3,4年级中分别男女的总人数
select gradeId,sex,count(*)
from student
where gradeId in(2,3,4)
group by gradeId,sex;
########## End ##########
第2关使用 HAVING 与 ORDER BY
USE School;
#请在此处添加实现代码
########## Begin ##########
#1.查询表中至少有两门课程在90分以上的学生信息
select sno,count(*)
from tb_grade
where score>=90
group by sno
having count(*)>=2;
#2.查询表中平均成绩大于90分且语文课在95分以上的学生信息
select sno,avg(score)
from tb_grade
where sno in(
select distinct sno
from tb_grade
where pno="语文" and score>=95)
group by sno
having avg(score)>=90;
########## End ##########
4-11MySQL开发技巧 - 分页和索引
第1关MySQL 分页查询
USE Products;
#请在此处添加实现代码
########## Begin ##########
#1.分页查询
select prod_id
from products
limit 5,5;
#2.用子查询优化分页查询语句
select prod_id
from products
where prod_id >=(
select prod_id
from products
limit 10,1
)
limit 5;
########## End ##########
第2关索引(单列索引)
单列索引分类和创建
我们使用最常见的是单列索引,分为主键索引、普通索引和唯一索引。
USE Students;
#请在此处添加实现代码
########## Begin ##########
#1.创建student表结构并且设置id为主键索引
CREATE TABLE student(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
score int(10),
PRIMARY KEY (id)
);
#2.对name建立唯一索引
CREATE unique INDEX name_index on `student`(`name`);
#3.对score建立普通索引
CREATE INDEX score_index on `student`(`score`);
SHOW INDEX FROM student;
########## End ##########
第3关索引(组合索引)
4-12数据库设计 - 博客系统
--创建数据库
CREATE DATABASE blog_db;
use blog_db;
--在blog_db库中创建t_user表
--用户信息表
CREATE TABLE t_user
(
userId BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',--低版本编程环境不能识别AUTO_INCREMENT,换成IDENTITY(1,1)
username VARCHAR(32) NOT NULL COMMENT'用户名',--COMMENT 备注
password VARCHAR(32) NOT NULL COMMENT'密码',
user_sex VARCHAR(6) NOT NULL DEFAULT '0' COMMENT'性别0代表男 1代表女',--设置默认值 DEFAULT
email VARCHAR(64) COMMENT'邮箱',
phone VARCHAR(11) NOT NULL COMMENT'手机号码',
firstname VARCHAR(6) COMMENT'姓',
lastname VARCHAR(12) COMMENT'名',
avatar VARCHAR(255) COMMENT'头像地址',
is_superuser INT(11) NOT NULL DEFAULT 0 COMMENT'是否是管理员 0代表不是 1代表是',
last_login DATETIME COMMENT'上一次登录时间',
user_register_time DATETIME COMMENT'上一次登录时间',
PRIMARY KEY (userId)--主键
);
/*创建blog_type、t_blog、t_comment表,并建立表之间的关系博客类型表和博客信息表是一对多的关系, 博客评论表和博客信息表是多对一的关系,用户信息表与博客信息表、博客评论表是一对多的关系。*/
--博客类型表
CREATE TABLE blog_type
(
type_id INT NOT NULL AUTO_INCREMENT COMMENT'类型id',
type_name VARCHAR(32) NOT NULL COMMENT'类型名称',
PRIMARY KEY(type_id)
);
--博客信息表
CREATE TABLE t_blog
(
blog_id BIGINT NOT NULL AUTO_INCREMENT COMMENT'博客id',
blog_title VARCHAR(100) NOT NULL COMMENT'博客标题',
blog_content LONGTEXT NOT NULL COMMENT'博客内容',
userid BIGINT COMMENT'创建人id',
type_id INT COMMENT'类型id',
blog_status INT NOT NULL DEFAULT '0' COMMENT'博客状态 1为发布 0为草稿',
create_time DATETIME NOT NULL COMMENT'创建时间',
update_time DATETIME NOT NULL COMMENT'更新时间',
cover_image VARCHAR(255) COMMENT'封面图片',
PRIMARY KEY(blog_id),
CONSTRAINT FK_user_id FOREIGN KEY (userid) REFERENCES t_user(userId),--重命名外键
CONSTRAINT FK_type_id FOREIGN KEY (type_id) REFERENCES blog_type(type_id)
);
--博客评论表
CREATE TABLE t_comment
(
comment_id BIGINT NOT NULL AUTO_INCREMENT COMMENT'评论id',
comment_content VARCHAR(500) NOT NULL COMMENT'评论内容',
blog_id BIGINT NOT NULL COMMENT'评论内容',
createtime DATETIME NOT NULL COMMENT'评论时间',
userid BIGINT NOT NULL COMMENT'评论人ID',
replyid INT NOT NULL COMMENT'评论回复人ID',
PRIMARY KEY(comment_id),
CONSTRAINT FK_comment_user_id FOREIGN KEY(userid) REFERENCES t_user(userId),
CONSTRAINT FK_comment_blog_id FOREIGN KEY(blog_id) REFERENCES t_blog(blog_id)
);
--创建博客标签表(t_tag),并建立表之间的关系
CREATE TABLE t_tag
(
tag_id INT(11) NOT NULL AUTO_INCREMENT,
tag_name VARCHAR(32) NOT NULL,
PRIMARY KEY(tag_id)
);
/*设计了一个中间表,分别与博客信息表和博客标签表是一对多的关系, 这样博客标签表(t_tag)就和博客信息表(t_blog)是多对多的关系了。*/
CREATE TABLE t_tag_blog
(
tag_id INT(11),
blog_id BIGINT(20),
FOREIGN KEY(tag_id) REFERENCES t_tag(tag_id),
FOREIGN KEY(blog_id) REFERENCES t_blog(blog_id)
);
4-13数据库查询 - 选课系统
USE School;
#请在此添加实现代码
########## Begin ##########
########## 插入学生表(Student)相应数据 ##########
insert into student(Sno,Sname,Ssex,Sage,Sdept)
values('9512101','李勇','男',19,'计算机系'),
('9512102','刘晨','男',20,'计算机系'),
('9512103','王敏','女',20,'计算机系'),
('9521101','张立','男',22,'信息系'),
('9521102','吴宾','女',21,'信息系'),
('9521103','张海','男',20,'信息系'),
('9531101','钱小平','女',18,'数学系'),
('9531102','王大力','男',19,'数学系');
########## 插入课程表(Course)相应数据 ##########
insert into course(Cno,Cname,Ccredit,Semster,Period)
values('C01','计算机文化学',3,1,41),
('C02','VB',2,3,61),
('C03','计算机网络',4,7,14),
('C04','数据库基础',6,6,24),
('C05','高等数学',8,2,19),
('C06','数据结构',5,4,55);
########## 插入学生选课表(DBSC)相应数据 ##########
insert into dbsc(ScID,Sno,Cno,Grade,isTec)
values(1,9512101,'c01',90,'必修'),
(2,9512101,'c02',86,'选修'),
(3,9512101,'c06',45,'必修'),
(4,9512102,'c02',78,'选修'),
(5,9512102,'c04',66,'必修'),
(6,9521102,'c01',82,'选修'),
(7,9521102,'c02',75,'选修'),
(8,9521102,'c04',92,'必修'),
(9,9521102,'c05',50,'必修'),
(10,9521103,'c02',68,'选修'),
(11,9521103,'c06',56,'必修'),
(12,9531101,'c01',80,'选修'),
(13,9531101,'c05',95,'必修'),
(14,9531102,'c05',85,'必修');
########## End ##########
########## 查询表数据 ##########
SELECT * FROM student;
SELECT * FROM course;
SELECT * FROM dbsc;
#********* Begin *********#
echo " select Sname,Sdept from student where Sdept='计算机系'; select Sno from dbsc where Grade<60; select Sname,Sdept,Sage from student where Sage between 20 and 23 and Sdept='信息系'; select Sno,Grade from dbsc where Cno='c02' order by Grade desc; select count(*) from student; "
#********* End *********#
第3关:进阶查询
#********* Begin *********#
echo " select student.* from student where Sname like '张%'; select Sname,Ssex,Sdept from student where Sdept in ('计算机系','信息系','数学系'); select Cno, count(*) from dbsc where isTec='选修' group by Cno; select Sno from dbsc group by Sno Having count(*)>3; select Sname, Cno, Grade from student,dbsc where student.Sno=dbsc.Sno and Sdept='计算机系'; "
#********* End *********#
也不能再echo中加入#注释
第4关:复杂查询
#********* Begin *********#
echo " select distinct student.Sno,student.Sname from dbsc,student where student.Sno=dbsc.Sno and isTec='选修'; select Sname,count(*),avg(Grade) from dbsc,student where student.Sno=dbsc.Sno group by dbsc.Sno Having avg(Grade); select avg(Grade),count(*) from dbsc group by Sno having count(*)>=4; select student.Sname, dbsc.Cno, dbsc.Grade from student left join dbsc on student.Sno=dbsc.Sno where student.Sdept='信息系' and dbsc.isTec='选修' and Cno='C02'; update dbsc set Grade = Grade+5 where Grade<60; "
#********* End *********#
边栏推荐
- UDS learning notes on fault codes (0x19 and 0x14 services)
- Julia 1.6 1.7 common problem solving
- 【CDH】CDH/CDP 环境修改 cloudera manager默认端口7180
- 小L的试卷
- 机器学习笔记-Week02-卷积神经网络
- Aborted connection 1055898 to db:
- What does BSP mean
- Deoldify project problem - omp:error 15:initializing libiomp5md dll,but found libiomp5md. dll already initialized.
- error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead
- ImportError: libmysqlclient. so. 20: Cannot open shared object file: no such file or directory solution
猜你喜欢
QT creator design user interface
安装numpy问题总结
[Blue Bridge Cup 2017 preliminary] grid division
机器学习笔记-Week02-卷积神经网络
Rhcsa certification exam exercise (configured on the first host)
Reading BMP file with C language
vs2019 第一个MFC应用程序
Cookie setting three-day secret free login (run tutorial)
C语言读取BMP文件
[download app for free]ineukernel OCR image data recognition and acquisition principle and product application
随机推荐
Image recognition - pyteseract TesseractNotFoundError: tesseract is not installed or it‘s not in your path
AcWing 242. A simple integer problem (tree array + difference)
库函数--(持续更新)
02 staff information management after the actual project
Windows下安装MongDB教程、Redis教程
Punctual atom stm32f103zet6 download serial port pin
Attention apply personal understanding to images
Codeforces Round #753 (Div. 3)
软件测试与质量学习笔记3--白盒测试
Software I2C based on Hal Library
[蓝桥杯2020初赛] 平面切分
Software testing and quality learning notes 3 -- white box testing
When using lambda to pass parameters in a loop, the parameters are always the same value
2019腾讯暑期实习生正式笔试
Integration test practice (1) theoretical basis
{一周总结}带你走进js知识的海洋
Picture coloring project - deoldify
AcWing 1298. Solution to Cao Chong's pig raising problem
wangeditor富文本组件-复制可用
数数字游戏