传智播客--MySQL
DAY01 MySQL入门
第一章 数据库介绍
1.1 什么是数据库
数据存储的仓库,本质上是一个文件系统,作用:方便管理数据的。
1.2 数据库管理系统
数据库管理系统(DataBase Management System, DBMS):指一种操作和管理数据库的大型软件。
数据库管理系统—>MySQL软件—>多个仓库—>多张表—>多条记录(数据)
1.3 实体(java类)和表关系
1.4 常见关系型数据库
1.MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了,MySQL6.x版本(商业、社区)也开始收费。2.Oralce:收费的大型数据库,Oracle公司的产品你。Oracle收购SUN公司,收购MySQL。3.DB2:IBM公司的数据库产品,收费的。常应用在银行系统中。4.OceanBase:阿里的大型数据库,性能已超越Oracle全球第一。5.SQLServer:Microsoft 公司收费的中型的数据库。C#、.net等语言常使用。6.SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。7.SQLite:嵌入式的小型数据库,应用在手机端。
第二章 MySQL安装和使用
2.1 安装
2.2 配置
第三章 SQL
3.1 概述
什么是SQL
结构化查询语言(Structured Query Language)
通过SQL语言完成数据库操作。实现对数据库中的对象(数据库、数据库表、数据库中数据等)进行增删改查。
C:create 创建
R:retrieve(read)检索、查询
U:update 修改
D:delete 删除
SQL方言
SQL是一套标准,所有的数据库厂商都实现了此标准;但是各自厂商在此标准上增加了特有的语句,这部分内容我们成为方言。
举个例子:MySQL方言注释 #
我们在学习sql语句时,同时要关注每一家数据库特有的方言。
SQL书写规范
1. sql语句可以单行或多行书写,最后以分号结尾2.sql语句(在windows平台下)不区分大小写,建议关键字大写SELECT * FROM student;3.注释单行-- 所有数据库厂商支持# 仅mysql厂商支持(方言)多行/* 注释内容 */
SQL分类
1. DDL(Data Definition Language)数据定义语言(命令了解,掌握图形化工具操作)用来定义数据库对象:数据库,表,列等。关键字:create(创建),drop(删除),alter(修改)等2. DML(Data Manipulation Language)数据操作语言(重点)用来对数据库中表的数据进行增删改。关键字:insert(插入),delete(删除),update(修改)等3. DQL(Data Query Language)数据查询语言(特别重要)用来查询数据库中表的记录(数据)。关键字:select(查询),from(从哪张表查询),where(指定查询条件)等4. DCL(Data Control Language)数据控制语言(了解中的了解)由DBA(数据库管理员)完成DCL用来定义数据库的访问权限和安全级别,以及创建用户。关键字:grant(授权),revoke(撤销权限)等5. TCL(Transaction Control Language)事务控制语言用于控制数据库的事务操作,关键字:commit,savepoint,rollback等
第四章 SQL基础操作
4.1 DDL
- 进入公司后,数据库和表只创建一次,通常有DBA数据库管理员操作 DataBase Adminisitrator
- 而且我一会讲图形化工具,可以简化这里面的代码(10分钟内搞定)
操作数据库
- 创建库、显示库、修改库、删除库操作
C:创建
1、直接创建数据库【掌握】语法:create database 数据库名称;实例:create database day01;
2、创建数据库并指定字符【了解】语法:create database 数据库名称 charset 字符集名称;实例:create database day01_1 charset gbk;
R:查询
1、查看所有数据库语法:show databases;
2、查看建库语句语法:show create database 数据库名称;实例:show create database day01;
U:修改
1、修改数据库字符集语法:alter database 数据库名称 charset 新字符集;实例:alter database day01_1 charset utf8;
D:删除
1、直接删除数据库语法:drop database 数据库名称;实例:drop database day01_1;
使用数据库
1、进入/切换某一个具体的数据库语法:use 数据库名称;实例:use day01;
2、查看当前所在哪个数据库中语法:select database();
操作表
- 创建表、显示表、修改表、删除表操作
C:创建
1. 创建表(掌握)语法:CREATE TABLE 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型,...);实例:CREATE TABLE student(id INT,name VARCHAR(32));
2. 常用数据类型(平时去写会用就行)int:整形float:浮点型double:浮点型decimal:浮点型(保留精准度)decimal(m,n) 指定范围m 总长度n 小数长度例如:decimal(5,2)999.99 最大值0.01 最小值varchar:字符型varchar(n) 指定容纳多少个字符 1-65535 包含字母,符号,汉字text:文本型date:日期类型datetime:日期时间类型3. 克隆表创建表时,可以快速指定另一个张表的结构语法:create table 新表名 like 旧表明;实例:create table stu like student;
R:查询
1. 查看所有表语法:show tables;2. 查看建表语句语法:show create table 表名;实例:show create table stuent;3. 查看表结构 语法:desc 表名称;实例:desc student;
U:修改
1. 添加一列语法:alter table 表名 add 列表 数据类型;实例:alter table stu add jieshao varchar(50);2. 修改类型语法:alter table 表名 modify 列表 数据类型;实例:alter table stu modify jieshao varchar(100);3. 修改列名和类型语法:alter table 表明 change 旧列表 新列表 新类型;实例:alter table stu change jieshao intro varchar(100);4. 删除指定列语法:alter table 表名 drop 列表;实例:alter table stu drop intro;5. 修改表字符集语法:alter table 表名 charset 字符集;实例:alter table stu charset gbk;6. 修改表名字语法:rename table 旧名称 to 新名称;实例:rename table stu to stu1;
D:删除
1. 直接删除表语法:drop table 表明;实例:drop table stu;
图形化工具
4.2 DML
添加记录
1. 语法:insert into 表名(列名1,列名2 ...) values(值1,值2...);2. 注意:列名和值的数据类型要对应字符串类型可以使用单双引号,推荐单引号字符串可以插入一切(任意)类型,MySQL底层实现了隐式转换个别列名字段名如果跟关键字冲突了,我们可以使用反引号包裹起来例如:`name`3. 练习:-- 插入一条学院信息INSERT INTO student(id,`name`) VALUE(1,'张三');-- 指定部分列名INSERT INTO studnt(id) VALUES(2);-- 省略表列表名 前提:values中为所有列赋值INSERT INTO student VALUES(3,'刘备');-- 如下语法错误INSERT INTO student VALUES(4);--批量插入数据INSERT INTO student(id,`name`) VALUES(5,'赵云'),(6,'诸葛亮');
蠕虫复制
作用:将一张表的记录,快速复制到另外一张表应用场景:数据的迁移需求:创建一张stu新表,表结构与student一致,实现数据的快速迁移要求:二张表结构相同步骤:1. 克隆表create table stu like student;2. 数据迁移-- 查询student表中的所有数据SELECT * FROM student;-- 将student表的查询结果插入到stu表INSERT INTO stu SELECT * FROM student;
修改记录
1. 语法:update 表名 set 列1=值1,列2=值2 ... [where 条件]注意:where条件可以不指定,如果没有指定,就是修改所有记录mysql语法中,如果讲师通过中括号括起来内容,代表该内容可以不写2. 实例:-- 修改名称为'zhangfei'UPDATE stu SET `name`='zhangfei';-- 指定where条件UPDATE student SET `name`='zhangfei' WHERE id=1;
删除记录
1. 语法:delete from 表名 [where条件]2. 解释:[] 中的语法内容可以不写,如果没有写where条件,删除所有3. 实例:-- 删除数据DELETE FROM student WHERE id=2;4. 摧毁表,重构表先把表删除,再创建一个相同结构的新表truncate table 表名;-- 删除整张表数据DELETE FROM stu; -- 一条条的删除,最终删除所有数据TRUNCATE TABLE stu; -- 删除整张表后,再重新创建表
知识小结
- 新增:insert into 表名
- 修改:updat 表名 set
- 删除:delete from 表名
4.3 DQL简单查询(检索)
导入数据
-- 创建表
create table student1(id int,name varchar(20),chinese double,english double,math double
);
-- 插入记录
insert into student1(id,name,chinese,english,math) values(1,'tom',89,78,90);
insert into student1(id,name,chinese,english,math) values(2,'jack',67,98,56);
insert into student1(id,name,chinese,english,math) values(3,'jerry',87,78,77);
insert into student1(id,name,chinese,english,math) values(4,'lucy',88,NULL,90);
insert into student1(id,name,chinese,english,math) values(5,'james',82,84,77);
insert into student1(id,name,chinese,english,math) values(6,'jack',55,85,45);
insert into student1(id,name,chinese,english,math) values(7,'tom',89,65,30);
语法
1. 格式:-- 查询展示所有列:SELECT * FROM 表名;-- 查询展示指定列:SELECT 列1, 列2, ... FROM 表名;2. 去重关键字 DISTINCT:用于去除重复记录SELECT DISTINCT 列名 FROM 表名;3. 查询结果可进行数学运算,不影响原表记录4. NULL 参与数学运算结果仍为 NULL,可使用 IFNULL() 函数处理:IFNULL(列名, 默认值) 若该列值为 NULL,则返回默认值(如:IFNULL(english, 0))。5. 设置别名(AS 可省略):SELECT 列名 [AS] 列别名 FROM 表名 [AS] 表别名;注意:AS 关键字在别名设置中可以省略。
练习
-- 查询表中所有学生的信息
SELECT * FROM student1; -- 查询表中所有学生的姓名和对应的语文成绩
SELECT `name`, chinese FROM student1; -- 查询表中学生姓名(去重)
SELECT DISTINCT `name` FROM student1; -- 在所有学生数学分数上加10分特长分
SELECT id, `name`, math + 10 FROM student1; -- 统计每个学生的总分
SELECT id, `name`, chinese + IFNULL(english, 0) + math FROM student1; -- 使用别名表示学生总分
SELECT id, `name`, chinese + IFNULL(english, 0) + math AS '总分' FROM student1;
4.4 DQL条件查询
导入数据
-- 创建表
CREATE TABLE student2 (id int,name varchar(20),age int,sex varchar(5),address varchar(100),math int,english int
);-- 插入记录
INSERT INTO student2(id,NAME,age,sex,address,math,english) VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
练习
# SQL 练习 - 关系运算符
-- 查询math分数大于80分的学生
SELECT * FROM student2 WHERE math > 80;
-- 查询english分数小于或等于80分的学生
SELECT * FROM student2 WHERE english <= 80;
-- 查询age等于20岁的学生
SELECT * FROM student2 WHERE age = 20;
-- 查询age不等于20岁的学生
SELECT * FROM student2 WHERE age != 20;# SQL 练习 - 逻辑运算符
-- 查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM student2 WHERE age > 35 AND sex = '男';
-- 查询age大于35或性别为男的学生(两个条件其中一个满足)
SELECT * FROM student2 WHERE age > 35 OR sex = '男';
-- 查询id是1或3或5的学生
SELECT * FROM student2 WHERE id = 1 OR id = 3 OR id = 5;
-- in关键字
-- 再次查询id是1或3或5的学生
SELECT * FROM student2 WHERE id IN (1, 3, 5);
-- 查询id不是1或3或5的学生
SELECT * FROM student2 WHERE id NOT IN (1, 3, 5);
-- 查询english成绩大于等于77,且小于等于87的学生
SELECT * FROM student2 WHERE english BETWEEN 77 AND 87;
-- 查询英语成绩为null的学生
SELECT * FROM student2 WHERE english IS NULL;# SQL 练习 - like模糊匹配
-- 查询姓马的学生
SELECT * FROM student2 WHERE name LIKE '马%';
-- 查询姓名中包含'德'字的学生
SELECT * FROM student2 WHERE name LIKE '%德%';
-- 查询姓名,且姓名有三个字的学生
SELECT * FROM student2 WHERE name LIKE '马__';