修改字段名:alter table 表名 change 旧字段名 新字段名 新数据类型;
--- 主键 ----------------------------------------------------------
-- 修改表结构 添加主键
alter table user4 add primary key(id);
-- 如何删除
alter table user4 drop primary key;
-- 使用modify修改字段,添加约束
alter table 表名 modify id int primary key;

--- 唯一约束 ----------------------------------------------------------
-- 第一种方式
create table user5(
id int,
name varchar(20),
unique(name)
);
-- 两个键在一起不重复就行
create table user5(
id int,
name varchar(20),
unique(id,name)
);
-- 后面补唯一键
alter table user5 add unique(name);
-- 删除唯一键约束
alter table user5 drop index name;
-- 通过modify添加
alter table 表名 modify name varchar(20) unique;

--- 外键约束 ----------------------------------------------------------
-- 设计两个表:父表,子表
-- 班级表
create classes(
id int primary key,
name varchar(20)
);
-- 学生表
create table students(
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id)
);
--注意:主表(父表) classes中没有的数据值,在副表(子表)中是不可以使用的
--2.主表中的记录被副表引用,是不可以被删除的

-- 数据库的三大设计范式.sql-----------------------------------------------
-- 1.第一范式
-- 1NF
-- 数据表中的所有字段都是不可分割的原子值
create table student2(
id int primary key,
name varchar(20),
address varchar(20)
);
insert into student2 values(1,'张三','中国河南省新乡市获嘉县中和镇');
insert into student2 values(2,'李四','中国河南省郑州市获嘉县中和镇');
insert into student2 values(3,'王五','中国河南省三门峡市获嘉县中和镇');

-- 字段值还可以继续拆分的,就不满足第一范式
-- 2.第二范式
-- 必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖与主键
-- 如果要出现不完全依赖,只可能发生在联合主键的情况下

-- 3.第三范式
-- 3NF
-- 必须先满足第二范式,除开主键列的其他列之间不能有传递依赖关系

-- mysql查询练习 --------------------------------------------------------
--学生表
Student
学号
姓名
性别
出生年月日
所在班级
create table student(
sno varchar(20) primary key comment '学生学号',
sname varchar(20) not null comment '学生姓名',
ssex varchar(10) not null comment '学生性别',
sbirthday datetime comment '学生出生年月日',
class varchar(20) comment '学生所在班级'
) comment '学生表';

--课程表
Course
课程号
课程名称
教师编号
create table course(
cno varchar(20) primary key comment '课程号',
cname varchar(20) not null comment '课程名称',
tno varchar(20) not null comment '教师编号',
foreign key(tno) references teacher(tno)
) comment '课程表';

--成绩表
Score
学号
课程号
成绩
create table score(
sno varchar(20) primary key comment '学号',
cno varchar(20) not null comment '课程号',
degree decimal comment '成绩',
foreign key(sno) references student(sno),
foreign key(cno) references course(cno)
)comment '成绩表';

--教师表
Teacher
教师编号
教师名字
教师性别
出生年月日
职称
所在部门
create table teacher(
tno varchar(20) primary key comment '教师编号',
tname varchar(20) not null comment '教室名字',
tsex varchar(10) not null comment '教师性别',
tbirthday datetime comment '教师出生年月日',
prof varchar(20) not null comment '教师职称',
depart varchar(20) not null comment '教师所在部门'
) comment '教师表';

-- 往数据表中添加数据
#添加学生信息
insert into student values('101','曾华','男','1977-09-01','95033');
insert into student values('102','匡明','男','1975-10-02','95031');
insert into student values('103','王丽','女','1976-01-23','95033');
insert into student values('104','李军','男','1976-02-20','95033');
insert into student values('105','王芳','女','1975-02-10','95031');
insert into student values('106','陆君','男','1974-06-03','95031');
insert into student values('107','王尼玛','男','1976-02-20','95033');
insert into student values('108','张全蛋','男','1975-02-10','95031');
insert into student values('109','赵铁柱','男','1974-06-03','95031');
#添加教师表
insert into teacher values('804','李诚','男','1958-12-02','副教授','计算机系');
insert into teacher values('856','张旭','男','1969-03-12','讲师','电子工程系');
insert into teacher values('825','王萍','女','1972-05-05','助教','计算机系');
insert into teacher values('831','刘冰','女','1958-08-14','助教','电子工程系');
#添加课程表
insert into course values('3-105','计算机导论','825');
insert into course values('3-245','操作系统','804');
insert into course values('6-166','数字电路','856');
insert into course values('9-888','高等数学','831');
#添加成绩表
insert into score values('103','3-105','92');
insert into score values('103','3-245','86');
insert into score values('103','6-166','85');
insert into score values('105','3-105','88');
insert into score values('105','3-245','75');
insert into score values('105','6-166','79');
insert into score values('109','3-105','76');
insert into score values('109','3-245','68');
insert into score values('109','6-166','81');

-- 查询练习:
-- 1. 查询student表的所有记录
#select * from student;
-- 2. 查询student表中的所有记录的sname,ssex和class列
#select sname,ssex,class from student;
-- 3. 查询教师所有的单位即不重复的depart列
#select distinct depart from teacher;
-- 4. 查询score表中成绩在60到80之间的所有记录
-- 查询区间 between ... and ...
#select * from score where degree between 60 and 80;
-- 直接运算符比较
#select * from score where degree > 60 and degree < 80;
-- 5. 查询score表中成绩为85,86或88的记录
-- 表示 或者关系的查询 in
#select * from score where degree in(85,86,88);
-- 6. 查询student表中"95031"班或性别为"女"的同学记录
#select * from student where class='95031' or ssex='女';
-- 7. 以class降序查询student表的所有记录
-- 升序,降序 默认顺序是升序 所以不写asc也可以
#select * from student order by class desc;
#select * from student order by class [asc];
-- 8. 以cno升序,degree降序查询score表的所有记录
#select * from score order by cno asc,degree desc;
-- 9. 查询"95031"班的学生人数
-- 统计 count
#select count(*) from student where class='95031';
-- 10. 查询score表中的最高分的学生学号和课程号.(子查询或者排序)
-- 子查询的做法
#select sno,cno from score where degree=(select max(degree) from score);
分解理解:
-- 1. 找到最高分
select max(degree) from score;
-- 2. 找最高分的sno和cno
select sno,cno from score where degree=(select max(degree) from score);
-- 排序的做法
select sno,cno,degree from score order by degree desc limit 0,1;
-- 11. 查询每门课的平均成绩
-- avg()
#select cno,avg(degree) from score group by cno;
-- 12. 查询score表中至少有2名学生选修的并以3开头的课程的平均分数
#select cno,avg(degree),count(*) from score group by cno having count(cno)>=2 and cno like '3%';
-- 13. 查询分时大于70,小于90的sno列
#select sno,degree from score where degree>70 and degree<90;
#select sno,degree from score where degree between 70 and 90;
-- 14. 查询所有学生的sname,cno和degree列 -- (多表查询)
#select sname,cno,degree from student,score where student.sno = score.sno;
-- 15. 查询所有学生的sno,cname和degree列
#select sno,cname,degree from course,score where course.cno = score.cno;
-- 16. 查询所有学生的sname,cname和degree列 -- (三表关联查询) --共同字段的相等
#select sname,cname,degree from student,course,score where student.sno=score.sno and course.cno=score.cno;

Mysql基础练习--实例的更多相关文章

  1. MYSQL基础语句

    参考书籍< MySQL数据库基础与实例教程> --孔祥盛 SQL(structured query language)结构化查询语言,应用最为广泛的关系型数据库语言. MYSQL属于关系型 ...

  2. MySQL基础操作命令

    MySQL基础操作命令 1. 查看MySQL进程 ps -ef|grep mysql |grep -v grep 2. 查看MySQL端口 ss -lnt | grep 3306 3. MySQL的启 ...

  3. MYSQL:基础—存储过程

    MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...

  4. 服务管理之mysql基础

    目录 mysql基础 1. 关系型数据库介绍 1.1 数据结构模型 1.2 RDBMS专业名词 2. mysql安装与配置 2.1 mysql安装 2.2 mysql配置 3. mysql的程序组成 ...

  5. Mysql 之多实例 安装以及配置

    MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...

  6. (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)

    (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb) 关键词:mysql日志文件,mysqldumpslow分析工具 目录:日志文件的分类 1. ...

  7. (3.11)mysql基础深入——mysql文件分类与配置文件管理

    (3.11)mysql基础深入——mysql文件分类与管理 关键词:mysql配置文件,mysql参数文件,mysql中的my.cnf 目录:mysql数据库文件分类: [1]参数文件:my.cnf ...

  8. (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析

    (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 [1]变量初始化部分 [2]函数声明部分 [3]具体执行部分 #!/bin/sh # ...

  9. Linux系统——MySQL基础(二)

    # MySQL数据库完全备份与恢复## 数据库备份的分类1. 从物理与逻辑的角度,备份可以分为物理备份和逻辑备份.(1)物理备份:对数据库操作系统的物理文件(数据文件.日志文件)的备份.物理备份又可分 ...

随机推荐

  1. AJAX完全解读

    本文讲AJAX相关的知识全部讲解了一遍.要想入门,选择这篇文章完全够用 本文的知识图谱: AJAX的用处: ​ 在没有AJAX之前,每次从服务端获取数据都要刷新页面(也就是同步请求),这十分的麻烦.比 ...

  2. coding++:高并发解决方案限流技术--计数器--demo

    1.它是限流算法中最简单最容易的一种算法 计数器实现限流 每分钟只允许10个请求 第一个请求进去的时间为startTime,在startTime + 60s内只允许10个请求 当60s内超过十个请求后 ...

  3. C# 便捷实现可迭代对象间的赋值

    目录 都是迭代,为啥我一定要用foreach 如果换成是字典呢? 关于 foreach 都是迭代,为啥我一定要用foreach ​ 问题起源于本人的一个练手的扑克牌程序:洗完牌之后要发给场上的三人. ...

  4. async和await是如何实现异步编程?

    目录 异步编程样例 样例解析 浅谈Promise如何实现异步执行 参考 1.异步编程样例 样例: // 等待执行函数 function sleep(timeout) { return new Prom ...

  5. java对象clone

    java克隆 为什么需要克隆 我们在很多时候需要使用一个对象去记录另外一个对象的当前状态,对象中可能会有很多属性,如果我们一个一个去设置,不仅不方便,而且效率很低,我们看一个初学者可能遇到的问题 cl ...

  6. Reface.NPI 方法名称解析规则详解

    在上次的文章中简单介绍了 Reface.NPI 中的功能. 本期,将对这方法名称解析规则进行详细的解释和说明, 以便开发者可以完整的使用 Reface.NPI 中的各种功能. 基本规则 方法名称以 I ...

  7. Mybatis中的# 与 $

    我们说MyBatis有两种注入参数的方式, - 一种是#{} - 另一种是${} 这两种从使用功能来看差距不大,那为什么会强推使用#? ${}使用的是拼接字符串,#{}使用的是占位符的方法,经过了处理 ...

  8. 3NF的无损连接和保持函数依赖的分解、BCNF的无损连接的分解

    首先,需要了解3NF.BCNF范式的要求. 3NF:不存在非主属性对码的传递函数依赖或部分函数依赖. 如AB-C,A->C  码为(A,B),A,B是主属性,C是非主属性,C部分函数依赖于码,即 ...

  9. Java学习笔记--Comparable & Comparator

    一.    Comparable<T>: Comparable是类内部的比较器,用于创建类的时候实现此接口,同时实现比较方法:对于不能修改源码的类则无法应用此方式进行比较排序等. 源码为: ...

  10. 浅谈Java参数传递机制

    Java参数传递 ​ 才疏学浅,今天才知道Java中方法的参数是可以传递对象引用进去的. ​ Java的参数传递机制很简单,其实就是值传递. ​ 所谓值传递,也就是我们在给方法传递一个参数的时,传递的 ...