花一周时间跟着老韩把MySQL复习了一遍,收获颇丰,手敲了1.9万笔记,希望大家共勉。
老韩B站视频教程链接:【韩顺平讲MySQL】零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门_哔哩哔哩_bilibili
笔记pdf文件链接:https://pan.baidu.com/s/1Ar74BQcQo2Dg9AzKAGgEsA
提取码:jbnf
目录
1、操作数据库
1、CHARACTER SET:指定数据库字符集,默认utf8
2、COLLATE:指定字符集校对规则
utf8_bin(区分大小写)
utf8_general_ci(不区分大小写)
3、创建数据库
(1)CREATE DATABASE 数据库名称
(2)CREATE DATABASE 数据库名称 CHARACTER SET utf8
(3)CREATE DATABASE 数据库名称 CHARACTER SET utf8 COLLATE utf8_bin
4、查看当前服务器所有数据库:SHOW DATABASES
5、查看之前创建的数据库信息:SHOW CREATE DATABASE 数据库名称
在创建数据库或者表的时候为了规避关键字,可使用反引号解决
6、删除数据库:DROP DATABASE 数据库名称
7、备份数据库:mysqldump -u 用户名 -p -B 数据库1 ... 数据库n > 文件名.sql
注意:(1)在DOS执行
(2)> 后面的sql文件前,可以写路径
8、备份数据库的表:mysqldump -u 用户名 -p 数据库 表1 ... 表n > 文件名.sql
9、恢复数据库:(1)source 路径+文件名.sql(在Mysql命令行中执行)
(2)把.sql文件的内容放到查询编辑器中执行一遍
2、操作表
1、操作表之前,首先要use数据库
2、创建表:
CREATE TALBE `表名` ( id INT, `name` VARCHAR(255), `password` VARCHAR(255), `birthday` VARCHAR(255), CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB );
3、修改表名:rename table 旧表名 to 新表名;
4、修改表字符集:alter table 表名 character set 字符集;
5、查看表结构:desc 表名; (可以查看表的列)
6、添加sex 列:
ALTER TABLE user ADD sex VARCHAR(32)NOT NULL DEFAULT '' AFTER NAME;
解释:在user中,name列的后面新增一个叫做sex的列
7、修改name 列:
ALTER TABLE user MODIFY name VARCHAR(60)NOT NULL DEFAULT '';
8、修改列名name为user_name:
ALTER TABLE user CHANGE name user_name VARCHAR(64) NOT NULL DEFAULT '';
9、删除sex列:
ALTER TABLE user DROP sex;
10、删除表
DROP TABLE 表名;
3、Mysql数据类型(列类型)
1、图示
2、如果指定unsinged,则就是无符号(数据类型不能有负数)
3、DECIMAL[M,D]:
M:小数位数,最大65,被省略默认是10,
D:整数位数,最大30,被省略默认是0
4、CRUD
CREATE TALBE `goods` ( id INT, `good_name` VARCHAR(10), `price` DOUBLE; )
4.1、insert(C)
INSERT INTO `goods` (id,goods_name,price) VALUE(10,'小米',2000); INSERT INTO `goods` (id,goods_name,price) VALUE(20,'iphone',6000);
4.2、update(U)
(1)将goods表中所有price字段值都改为5000 UPDATE goods SET price = 5000; (2)将小米的价格改为5000 UPDATE goods SET price = 5000 WHERE goods_name = '小米' (3)将iphone的价格在原有基础上增加1000 UPDATE goods SET price = price + 1000 WHERE goods_name = 'iphone'
4.3、delete(D)
(1)删除表 DELETE FROM goods (2)删除小米的记录 DELETE FROM goods WHERE goods_name = '小米';
4.4、select(R)
4.4.1、单表查询
新建一个学生表
CREATE TABLE student( id INT NOT NULL DEFAULT 1, NAME VARCHAR(20) NOT NULL DEFAULT '', Chinese FLOAT NOT NULL DEFAULT 0.0, English FLOAT NOT NULL DEFAULT 0.0, math FLOAT NOT NULL DEFAULT 0.0 );
添加数据
INSERT INTO student(id,NAME,Chinese,English,math) VALUES(1,'刘备',10,10,10); INSERT INTO student(id,NAME,Chinese,English,math) VALUES(2,'张飞',10,10,10); INSERT INTO student(id,NAME,Chinese,English,math) VALUES(3,'关羽',10,10,10); INSERT INTO student(id,NAME,Chinese,English,math) VALUES(4,'宋江',10,10,10); INSERT INTO student(id,NAME,Chinese,English,math) VALUES(5,'武松',10,10,10); INSERT INTO student(id,NAME,Chinese,English,math) VALUES(6,'老虎',90,90,90); INSERT INTO student(id,NAME,Chinese,English,math) VALUES(7,'赵云',90,94,99);
(1)查询student表中所有信息 SELECT * FROM student; (2)查询表中学生的姓名和对应的英语成绩 SELECT `name`,English FROM student; (3)过滤表中的重复信息 distinct SELECT DISTINCT English FROM student; (4)统计每个学生的总分 SELECT `name`,(Chinese+English+math) From student; (5)给所有学生总分加10分 SELECT `name`,(Chinese+English+math+10) From student; (6)取别名表示总分 SELECT `name`,(Chinese+English+math) AS total_sorce From student; (7)查询赵云的成绩 SELECT * FROM student WHERE `NAME` = '赵云' (8)查询英语成绩大于80分的同学 SELECT * FROM student WHERE English > 80; (9)查询总分大于200的同学 SELECT * FROM student WHERE (Chinese+English+math) > 200; (10)查询数学大于10分并且(and)英语大于50分的同学 SELECT * FROM student WHERE math > 10 AND English > 50; (10)查询英语成绩大于语文成绩的同学 SELECT * FROM student WHERE English > Chinese; (11)查询总分大于200并且数学成绩大于语文成绩的姓赵的同学 SELECT * FROM student WHERE (Chinese+English+math) > 200 AND math > Chinese AND `name` LIKE '赵%'; (12)查询英语分数在80-100之间的同学 SELECT * FROM student WHERE English > 80 and English < 100; SELECT * FROM student WHERE English BETWEEN 80 and 100; 注:BETWEEN...ADN...是闭区间的 (13)查询数学分为10,90的学生 SELECT * FROM student WHERE math = 10 OR math = 90; SELECT * FROM student WHERE math IN(10,90); (14)查询所有姓刘学生的成绩 SELECT * FROM student WHERE `name` LIKE '刘%' (15)查询数学>80,语文>80的学生成绩 SELECT * FROM student WHERE math > 80 AND Chinese > 80;
4.4.2、单表查询--加强
(本节使用到5.3节的表)
(1)where子句 SELECT * FROM emp WHERE hiredate > '1991-05-01'; (2)like 模糊查询 %表示0-n个任意字符 _表示单个任意字符 SELECT ename,sal FROM emp WHERE ename LIKE '_S%' 解释:在emp表中查询名字第二个字母是S的人的薪水 (3)order by SELECT * FROM emp ORDER BY deptno ASC , sal DESC; (4)【重点】分页查询 SELECT ... LIMIT start,row(start 从0开始计算) SELECT * FROM emp ORDER BY empno LIMIT 0,3;(第一页,每页三条信息) SELECT * FROM emp ORDER BY empno LIMIT 3,3;(第二页) SELECT * FROM emp ORDER BY empno LIMIT 6,3;(第三页) 推导公式 SELECT ... LIMIT 页面记录数*(页数-1),每页记录数 (5)如果select语句中同时含有group by,having,limit,order by, 那他们的排列顺序是group by > having > order by > limit