MOOCMySQL

本文内容大多从 14 ALTER 命令修改表_MySQL 入门教程-慕课网转载

端口号概念

所谓的端口,就好像是门牌号一样,客户端可以通过 ip 地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号

第一设计范式

第一设计范式要求表中字段都是不可再分的,如果实体中的某个属性有多个值时,必须拆分为不同的属性 。通俗理解即一个字段只存储一项信息

.第二设计范式

第二设计范式要求表中必须存在业务主键,并且全部非主键依赖于业务主键。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)

第三设计范式

即满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。 通俗解释就是一张表最多只存两层同类型信息、

反范式化设计

没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于 DML 的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。

修改数据表名称

命令 : ALTER TABLE 旧的表名 RENAME TO 新的表名;
查看建表SQL语句

 命令 : SHOW CREATE table_name;
ALTER TABLE `new_student` 
MODIFY COLUMN `name` char(50) CHARACTER 
SET utf8 COLLATE utf8_general_ci 
NOT NULL DEFAULT '无名' AFTER `id`;
 

其中 “CHARACTER SET utf8 COLLATE utf8_general_ci” 为新字段类型的字符集和编排方式,默认值为 “无名”,"AFTER id" 表示跟在 id 字段后面。

新增表字段

 ALTER TABLE `new_student` 
ADD COLUMN `sex` tinyint(2) UNSIGNED NOT NULL DEFAULT 1 COMMENT '性别 : 1:男 2:女' AFTER `id_number`;
删除表字段

ALTER TABLE `new_student` 
DROP COLUMN `sex`;
修改表字段名称

ALTER TABLE `new_student` 
CHANGE COLUMN `name` `new_name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '无名' AFTER `id`;
 

修改表字段默认值

修改表字段默认值命令,以修改 new_name 字段默认值为例 :

ALTER TABLE `new_student` 
MODIFY COLUMN `new_name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '小花' AFTER `id`;

删除数据表

 DROP TABLE new_student;
向数据表中插入数据

 INSERT INTO teacher (name,age,id_number) VALUES ('秦小贤',18,'42011720200604088X');
查询所有数据

 SELECT * FROM teacher;
新增多条数据

INSERT INTO teacher
(name,age,id_number)
VALUES
('王小花',19,'42011720200604077X'),
('张晓丽',18,'42011720200604099X'),
('刘美丽',20,'42011720200604020X'),
('吴帅',21,'42011720200604022X'),
('张平',22,'42011720200604033X')

删除一条数据

DELETE FROM teacher WHERE id = 8;
删除所有数据

DELETE FROM teacher;
TRUNCATE TABLE new_student;
清空表命令

TRUNCATE TABLE new_student;
查询所有数据

SELECT * FEOM teacher;
查询指定条数的结果集

SELECT * FROM teacher LIMIT 10;
查询指定起始位置条数的结果集

SELECT * FROM teacher LIMIT 10,10;
查询指定字段列的结果集

SELECT name,age FROM teacher LIMIT 6,5;
更新某一列字段的值

 UPDATE teacher SET age = 33 LIMIT 3;
更新多列字段的值

UPDATE teacher SET  age=18,id_number='44444444440604099X' WHERE id = 30;
LIKE模糊查询

% 表示指代任意内容,例如 '%小%' 表示包含  的表达式,且  前后都有内容, '%小' 表示以  结尾的表达式, 前面有内容,后面没有内容,'小%' 表示以  开头的表达式, 前面没有内容,后面有内容。

查询出姓  的教师信息结果集:

SELECT * FROM teacher WHERE name LIKE '王%';

 但条件查询

SELECT * FROM teacher WHERE age > 18;
and多条件查询

SELECT * FROM teacher WHERE age > 18 AND name LIKE  '王%';
or多条件查询

SELECT * FROM teacher WHERE age > 25 OR name LIKE  '王%';
查询 email 为 NULL 的教师信息结果集

SELECT * FROM teacher WHERE email IS NULL;
UNOIN ALL联合查询

SELECT * FROM teacher WHERE age > 20
UNION ALL
SELECT * FROM teacher WHERE age > 25;

UNION 查询

SELECT * FROM teacher WHERE age > 20
UNION
SELECT * FROM teacher WHERE age > 25;

UNION 将两种查询结果并到一起,可以看到结果集中已经去掉重复的数据,需要根据具体业务选择使用 UNION 还是 UNION ALL

order by排序

asc有小到大 SELECT * FROM teacher ORDER BY age ASC;

desc由大到小 SELECT * FROM teacher ORDER BY id DESC;

将查询出来的结果集按照 age 从大到小排序之后,再按照 id 字段从小到大排序:

SELECT * FROM teacher ORDER BY age DESC,id ASC;

对字符串类型字段排序

使用 ASC 对结果集按照 name 字段升序,其实是对 name 字段字符串编码的排序,英文字符排序在前,中文在后,其中排序规则是按照字符 ASCII码 对应值的大小排序的。

 内连接:join inner左右两表都有对应的值

多表混合连接查询

多表混合连接查询时,后面可以把前面执行的结果集整体当成一个表,例如 SELECT * FROM student a LEFT JOIN student_course b ON a.id=b.student_id RIGHT JOIN course c ON b.course_id=c.id 可以理解为 student 和 student_course 左连接查询之后的结果集再对 course 右连接查询。

GROUP BY 分组是对指定一个或多个字段分组,使用分组可以较好地对数据结果分析和处理。

多字段分组

SELECT c.teacher_id,a.course_id,c.course_name,d.name
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id 
INNER JOIN teacher d
ON c.teacher_id=d.id 
GROUP BY c.teacher_id,a.course_id;
单字段去重

SELECT DISTINCT student_id 
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id;
多字段去重

SELECT 
DISTINCT  a.course_id,b.course_name,b.teacher_id,c.name
FROM 
student_course a 
INNER JOIN 
course b 
ON a.course_id=b.id 
INNER JOIN teacher c 
ON b.teacher_id=c.id;
聚合函数

AVG()平均值函数

SELECT AVG(age) FROM teacher;
统计数量

SELECT COUNT(*) FROM student;
总和

SELECT SUM(age) FROM teacher;
可以使用 MIN() 函数对结果集取年龄最小值的数据

SELECT MIN(age) FROM teacher;
可以使用 MAX() 函数对结果集取年龄最大值的数据:

SELECT MAX(age) FROM student;
可以使用 HAVING 对上述结果筛选,例如选出选课学生平均年龄大于 20 的课程数据:

SELECT a.course_id,c.course_name,AVG(age) 
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id
GROUP BY a.course_id,c.course_name
HAVING AVG(age) >= 20;
IF函数

SELECT name,IF(age > 17,'成年','未成年') AS age_group,id_number FROM student;
Tips:如上图所示, IF(age > 17,'成年','未成年') 表示若 age 字段满足 age > 17 则展示为 成年,否则展示为 未成年。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值