学习网址
点此跳转: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;
alter table tb_emp rename jd_emp;
show tables;
desc jd_emp;
第2关:修改字段名与字段数据类型
USE Company;
alter table tb_emp change Id prod_id int(11);
alter table tb_emp modify Name varchar(30);
DESCRIBE tb_emp;
第3关:添加与删除字段
USE Company;
alter table tb_emp add Country varchar(20) after Name;
alter table tb_emp drop Salary;
DESCRIBE tb_emp;
第4关:修改字段的排列位置
USE Company;
alter table tb_emp modify Name varchar(25) first;
alter table tb_emp modify DeptId int(11) after Salary;
DESCRIBE tb_emp;
第5关:删除表的外键约束
USE Company;
alter table tb_emp drop FOREIGN KEY emp_dept;
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;
insert into tb_emp (Id,Name,DeptId,Salary)
values(1,'Nancy',301,2300),(2,'Tod',303,5600),(3,'Carly',301,3200);
SELECT * FROM tb_emp;
第2关:更新数据
UPDATE Mall_products2
SET country_name = "Pakistan", country_id = 92
WHERE id = 2;
USE Company;
update tb_emp
set Name="Tracy",DeptId=302,Salary=4300.00
where Id = 3;
SELECT * FROM tb_emp;
注意:最后一句要加分号;其次,单双引号要注意区分
第3关:删除数据
对表操作,用drop 对行操作,用delete
4-4MySQL数据库 - 单表查询(一)
第1关:基本查询语句
第2关带 IN 关键字的查询
第3关带 BETWEEN AND 的范围查询
4-5MySQL数据库 - 单表查询(二)
第1关带 LIKE 的字符匹配查询
第2关查询空值与去除重复结果
USE Company;
select *
from tb_emp
where DeptId is null;
select distinct Name
from tb_emp;
第3关带 AND 与 OR 的多条件查询
USE Company;
select *
from tb_emp
where DeptId=301 and Salary>3000;
select *
from tb_emp
where DeptId in (301,303);
4-6MySQL数据库 - 单表查询(三)
第1关对查询结果进行排序
SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC[DESC]];
ASC 升序关键字
DESC 降序关键字
第2关分组查询
第3关使用 LIMIT 限制查询结果的数量
USE School;
select *
from tb_score
order by score desc
limit 1,4;
4-7MySQL数据库 - 使用聚合函数查询
第1关:COUNT( )函数
USE School;
select count(*)
from tb_class;
select classid,count(*)
from tb_class
where classid=367;
第2关SUM( )函数
USE School;
select sum(score)
from tb_class;
select course,sum(score)
from tb_class
where course="语文";
第3关AVG( )函数
第4关MAX( )函数
第5关MIN( )函数
4-8MySQL数据库 - 连接查询
第1关内连接查询
USE School;
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;
第2关外连接查询
USE School;
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;
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;
第3关复合条件连接查询
USE School;
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;
4-9MySQL数据库 - 子查询
第1关带比较运算符的子查询
USE Company;
select name,age
from tb_emp
where age>all(
select avg(age)
from tb_emp);
第2关关键字子查询
USE Company;
select position,salary
from tb_salary
where salary>all(
select max(salary)
from tb_salary
where position="Java"
);
select position,salary
from tb_salary
where salary>ANY(
select min(salary)
from tb_salary
where position="Java"
);
select position,salary
from tb_salary
where salary in (
select salary
from tb_salary
where position="Java"
);
4-10MySQL数据库 - 分组选择数据
第1关GROUP BY 与 聚合函数
USE School;
select gradeId,sex,count(*)
from student
where gradeId in(2,3,4)
group by gradeId,sex;
第2关使用 HAVING 与 ORDER BY
USE School;
select sno,count(*)
from tb_grade
where score>=90
group by sno
having count(*)>=2;
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;
4-11MySQL开发技巧 - 分页和索引
第1关MySQL 分页查询
USE Products;
select prod_id
from products
limit 5,5;
select prod_id
from products
where prod_id >=(
select prod_id
from products
limit 10,1
)
limit 5;
第2关索引(单列索引)
单列索引分类和创建 我们使用最常见的是单列索引,分为主键索引、普通索引和唯一索引。
USE Students;
CREATE TABLE student(
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
score int(10),
PRIMARY KEY (id)
);
CREATE unique INDEX name_index on `student`(`name`);
CREATE INDEX score_index on `student`(`score`);
SHOW INDEX FROM student;
第3关索引(组合索引)
4-12数据库设计 - 博客系统
CREATE DATABASE blog_db;
use blog_db;
CREATE TABLE t_user
(
userId BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
username VARCHAR(32) NOT NULL COMMENT'用户名',
password VARCHAR(32) NOT NULL COMMENT'密码',
user_sex VARCHAR(6) NOT NULL DEFAULT '0' COMMENT'性别0代表男 1代表女',
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)
);
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)
);
CREATE TABLE t_tag
(
tag_id INT(11) NOT NULL AUTO_INCREMENT,
tag_name VARCHAR(32) NOT NULL,
PRIMARY KEY(tag_id)
);
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;
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,'数学系');
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);
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,'必修');
SELECT * FROM student;
SELECT * FROM course;
SELECT * FROM dbsc;
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;
"
|