【MySQL】01 - MySQL基础

1. 数据库的基本概念

  1. 数据库的英文单词: DataBase 简称 : DB

1.1 什么数据库?

  1. 用于存储和管理数据的仓库。

1.2 数据库的特点:

  1. 持久化存储数据的。其实数据库就是一个文件系统
  2. 方便存储和管理数据
  3. 使用了统一的方式操作数据库 -- SQL

2. MySQL 数据库软件

2.1 安装

  1. 详细请看 MySQL基础.pdf: 详细请看 MySQL基础.pdf

2.2 卸载

  1. 详细请看 MySQL基础.pdf: 详细请看 MySQL基础.pdf

2.3 配置

  1. MySQL安装的是一个MySQL服务。

2.4 MySQL服务的启动

  1. 手动:右键单击此电脑--> 管理 -- >服务和应用程序


    键单击此电脑--> 管理
服务和应用程序
  1. cmd -- > services.msc 打开服务和应用程序管理界面。

  2. 使用纯命令行的方式:net stop mysql || net start mysql 直接运行可能出现下面的错误,需要使用管理员方式打开cmd。

该问题是由于权限不足导致
  1. 以管理员方式运行cmd:net stop mysql 停止mysql服务; net start mysql ;启动mysql服务。这里的mysql是自定义的服务名称。

2.5 MySQL的登录和退出

  1. 登录 mysql -uroot -p

  2. 退出 exit 或者 quit

  3. 远程连接到远程MySql服务器。 mysql -h远程主机ip(不需要加上端口号) -u用户名 -p

  4. 第三种登录的方式 : mysql --host=服务器ip --user=root --password=用户密码

2.6 MySQL的目录结构

2.6.1 MySQL的安装目录

MySQL安装目录-配置文件my.ini

2.6.2 MySQL的数据目录

  1. 数据库的概念:对应文件夹
  2. 表的概念:对应文件夹中的文件
  3. 数据的概念:文件中的数据

3. SQL

  1. 什么是SQL:Structured Query Language 结构化查询语言。其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可能存在不一样的地方,叫做方言。

3.1 SQL通用语法

  1. SQL语句可以以单行或者多行书写,以分号结尾。

  2. 可以使用空格和缩进来增加语句的可读性。

  3. MySQL数据库的SQL 语句不区分大小写,关键词建议使用大写。

  4. 三种注释方式: 单行注释(--) 或者(#) 多行注释 (/**/) 。

3.2 SQL的分类

  1. Data Definition Language (DDL 数据定义语言) 如:建库,建表。关键字:create、drop、alter。

  2. Data Manipulation Language(DML 数据操纵语言), 如:对表中的记录操作 增删改 。关键字:insert、delete、alter。

  3. Data Query Language(DQL 数据查询语言),如:对表中的查询操作。关键字:select、where

  4. Data Control Language(DCL 数据控制语言),如:对用户权限的设置。关键字:gant、revoke等。

    SQL分类.png

3.2.1 DDL 数据定义语言

  1. 用于操作数据库和表、列等。关键字:create ,drop, alter等。

  2. 操作数据库(CRUD):C(Create)、R( Retrieve)、U(Update)、D(Delete)。

3.2.1.1 操作数据库

A. 创建数据库 C(create)
1. 创建数据库 : create database db1;
2. 创建数据库之前判断是否有该数据库:create database if not exists `db1`;
3. 创建数据库并制定字符集:create database db3 character set gbk;
4. 创建数据库之前判断并指定字符集:create database if not exists db4 character set gbk;
B. 查询数据库 R(Retrieve)
1. 查询所有数据库 : show databases;
2. 查看某个数据库的字符集(创建语句) : show create database `数据库名称`

C. 修改数据库 U(Update)
  1. 修改数据库字符集
alter database 数据库名称 character set 字符集 (注意字符集这里 需要使用 utf8 )
D. 删除数据库 D (drop)
  1. 删除数据库
删除存在的数据库 : drop database 数据库名称 ;
判断数据库是否存在再删除:  drop database if exists 数据库名称 ;
E. 使用数据库
查询当前正在使用的数据库名称:select databse();
使用数据库 : use 数据库名称;

3.2.1.2 操作表

MySQL 中的数据类型
MySQL的数据类型
A. 创建表 C (Create)
1. 创建表 :  create table 表名 (
        列名1 数据类型1,
        列名2 数据类型2,
        .......
        列名n 数据类型n   
);

2. 数据类型 :
* int :整数类型
* double:小数类型 例:score double(5,2) 数字最长有5为,小数点后保留两位小数 
3. 日期类型 date:日期只包含年月日的日期,yyyy-MM-dd
4. 日期和时间:包含年与日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 。 如果指定为改类型,在将来不给该类型赋值,或赋值为null ,将使用系统当前默认的系统时间赋值。
6. 字符串类型 varchar, 例: name varchar(20) 名字最大20个字符。 
创建一张学生表
create table student (
 id int ,
 name varchar(32),
 age int ,
 score double(4,1),
brithday date,
 insert_time timestamp
);
B. 查询表 R (Retrieve)
1. 查询数据库中的所有表名称: show tables;
2. 查询表结构: desc 表名称 
3. 查询创建表的语句 : show  create table 表名 ;
C 修改表 U (Update)
1. 修改表名 :alter table 表名 rename 新的表名 
2. 修改表的字符集:alter table 表名 character set 字符集名称; 
3. 添加一列:alter table 表名 add 列名 数据类型;
4. 修改列的名称: alter table 表名 change 老列名  新列名 新数据类型 或者 alter table student modify 老列名 新的数据类型(该方式只能修改数据类型);
5. 删除列: alter table 表名 drop 列名 ;
D . 删除表 D(Delete)
1. 删除表 :drop table 表名称;
2. 删除之前判断表是否存在: drop table if exists 表名称;
E. 复制一个表
1. 复制一个表 : create table  newName like oldName;

3.2.2 DML 数据库操作语言

  1. Data Manipulation Language(DML 数据操纵语言), 如:对表中的记录操作 增删改 。关键字:insert、delete、alter。

3.2.2.1 添加数据 insert

  1. 语法:
1. 向指定表中添加一条数据 : insert into 表名 (列名1 , 列名 1, ... ,  列名 n) values(值1,值2, ..... ,值n)
2. 注意事项: 列名和值需要一一对应(字段名称和数据类型);表名之后不定义列名则为所有列添加值;未指定列名但是也不想填写值,可以使用 null 代替值;除了数字之外的数据类型都需要使用逗号引起来,单引号双引号都可以;
  1. 案例 :
DESC student; -- 查看表信息 

INSERT INTO student (id, NAME ,age) VALUES (1,'张无忌',17); -- 向表中插入一条数据 

SELECT * FROM student;  -- 查询表中所有数据 

DESC student;

INSERT INTO student VALUES(1,'赵敏',16,99.9,NULL,NULL); -- 不指定列名 ,但是需要将全部列填上,不想填的列使用null替换

SELECT * FROM  student;

INSERT INTO  student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL); -- 插入值时除数字之外 都需要使用引号引起来,单引号双引号都可以‘

SELECT * FROM student;

3.2.2.2 修改数据 update

  1. 语法 :
 1. update 表名 set 列名1  = 值1 , 列名2 = 值 2 ,.... , 列名n = 值 n [where 条件]
2. 注意事项: 如果不加 where 条件  将 修改表中全部对应的数据列。
  1. 案例 :
-- 修改表中数据 开始 

UPDATE student SET age = 20 WHERE NAME = '赵敏';

SELECT * FROM student;

UPDATE student SET score = 100.0 ; -- 如果不加 where 条件将修改表中全部对应的数据列  

UPDATE student SET age = 20 WHERE NAME = '张无忌';

SELECT *FROM student;

SELECT *FROM student ;

-- 修改表中数据 结束 

3.2.2.3 删除数据 delete

  1. 语法 :
1. 删除表中某条数据 : delete from 表名 [ where 条件 ];
2. 注意事项:如果不写where 条件默认删除表中所有数据 (不推荐)。 推荐使用:TRUNCATE TABLE 表名; 删除表再创建一张一模一样的新表
  1. 案例 :
-- 删除表中数据 开始 

DELETE FROM student WHERE id = 1;

SELECT * FROM student ; -- 如果不加条件则删除表中所有数据 
 
DELETE FROM student ; -- 该中方式删除效率比较低,因为有多少条记录就会执行多少次

SELECT *FROM student; 
 
INSERT INTO  student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL);

SELECT *FROM student;
 
TRUNCATE TABLE student; -- 删除表再创建一个一模一样的新表 

SELECT *FROM student;

-- 删除表中数据 结束  

3.2.3 DML 数据查询语言

  1. Data Query Language(DQL 数据查询语言),如:对表中的查询操作。关键字:select、where 。

  2. 语法 :

select 字段列表 
  from 
    表名列表 
    where 条件列表 
      group by 
          分组字段
        having 
            分组之后的条件
          order by
             排序
            limit 
              分页    

3.2.3.1 基础查询

备用表的sql
USE db1;

CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);

INSERT INTO student3(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);

SELECT *FROM student3;
  1. 多个字段查询:
-- 1. 查询姓名 和 年龄字段 
SELECT NAME , age FROM student3;

-- 2. 查询地址字段 
SELECT address FROM student3;

-- 3. 如果要查询所有字段可以使用 * 代替 
select * from student3;
  1. 去除重复:
-- 3. 去除重复的结果集  : 只有全部字段的结果集全部一样才能去除
SELECT DISTINCT address FROM student3;
  1. 计算列: 当字段值中出现 null 时 需要注意 新函数 ifnull()
-- 4. 计算 math 和 english的和
SELECT NAME ,math , english , math + english FROM student3; -- 但是这样有个问题 : 如果数据中有 null 参与的运算计算的结果也是 null

-- 5. 处理 列中 可能为null的问题 
SELECT NAME ,math ,english , math + IFNULL(english,0) FROM student3;
  1. 起别名 : 可以使用as 和空格 为 字段名称 起别名
-- 6. 为列起别名  可以 使用as 和空格 
SELECT NAME 姓名 , math 数学 , english 英语 , math + IFNULL(english,0) AS 总分 FROM student3;
  1. 全部代码 :
-- 查询表中数据 开始 

-- 建表语句 

USE db1;

CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student3(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);

SELECT *FROM student3;

-- 1. 查询姓名 和 年龄字段 
SELECT NAME , age FROM student3;

-- 2. 查询地址字段 
SELECT address FROM student3;

-- 3. 去除重复的结果集 
SELECT DISTINCT address FROM student3;

TRUNCATE TABLE student3; -- 删除表中所有数据并创建一张新表 

SELECT * FROM student3;

-- 4. 计算 math 和 english的和
SELECT NAME ,math , english , math + english FROM student3; -- 但是这样有个问题 : 如果数据中有 null 参与的运算计算的结果也是 null

-- 5. 处理 列中 可能为null的问题 
SELECT NAME ,math ,english , math + IFNULL(english,0) FROM student3;

-- 6. 为列起别名  可以 使用as 和空格 
SELECT NAME 姓名 , math 数学 , english 英语 , math + IFNULL(english,0) AS 总分 FROM student3;

-- 查询表中数据 结束 

3.2.3.2 条件查询

  1. 语法 :
1. where 子句后跟条件 ;
2. 运算符 : 
* > 、< 、<= 、>= 、= 、<>
* BETWEEN...AND  
* IN( 集合) 
* LIKE:模糊查询
* 占位符:
* _:单个任意字符
* %:多个任意字符
* IS NULL  
* and  或 &&
* or  或 || 
* not  或 !
  1. 案例 :
-- where 条件查询 开始 
SELECT * FROM student3;

-- 1. 查询大于年龄 20 岁的人
SELECT NAME 姓名  , age 年龄  FROM student3 WHERE  age > 20;

-- 2. 查询年龄大于等于 20 岁的 人 
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20;

-- 3. 查询年龄等于 20 岁的人 
SELECT NAME 姓名 , age 年龄  FROM student3 WHERE age = 20;

-- 4. 查询年龄 不等于 20 岁的人 
SELECT NAME 姓名 , age 年龄  FROM student3 WHERE age <> 20;

-- 5. 查询年龄 大于等于 20 小于等于 30 的人 两个条件中间使用 and 连接 或者使用 && (不推荐)
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20 AND  age <= 30;
SELECT NAME 姓名 , age 年龄  FROM student3 WHERE  age BETWEEN 20 AND 30; -- 相同写法 

-- 6. 查询22, 18岁 ,25岁 岁的人的信息 
SELECT NAME 姓名 ,age 年龄 FROM student3 WHERE age = 22 OR age = 18 OR age = 25;
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age IN (22,18,25); -- 相同写法 

-- 7. 查询 谁的英语缺考了
SELECT NAME 姓名 , english 英语成绩 FROM student3 wher english = NULL ; -- 错误写法 null 值不能使用 = 或者 != 进行判断  需要使用 is null 
SELECT NAME 姓名 , english 英语成绩  FROM student3 WHERE english IS NULL ;

-- 查询英语成绩不为 null 的人的信息 
SELECT NAME 姓名 , english 英语成绩 FROM student3 WHERE english IS NOT NULL; 

-- where 条件查询 结束  
  1. 模糊查询 like
1. like 的占位符 : _ 下划线代表单个任意字符 ; % 多个任意字符 ;
  1. 模糊查询案例 :
-- where 查询条件 like 模糊查询 开始 

-- 1. 查询姓马的人的信息 
SELECT * FROM student3 WHERE NAME LIKE '马%';

-- 2. 查询姓名 第二个是化 的人 
SELECT * FROM student3 WHERE NAME LIKE '_化%';

-- 3.查询姓名是三个字的人 
SELECT * FROM student3 WHERE NAME LIKE '___';

TRUNCATE TABLE student3; -- 删除表中数据 并创建一个新的空表 

-- 4. 查询姓名中包含马的人 
SELECT * FROM student3 WHERE NAME LIKE '%马%';

-- 5. 查询姓名中包含德的人
SELECT * FROM student3 WHERE NAME LIKE '%德%';
-- where 查询条件 like 模糊查询 结束 

4. 基础部分所有sql

-- mysql基础部分 语句 

-- 向表中添加数据 开始 

DESC student; -- 查看表信息 

INSERT INTO student (id, NAME ,age) VALUES (1,'张无忌',17); -- 向表中插入一条数据 

SELECT * FROM student;  -- 查询表中所有数据 

DESC student;

INSERT INTO student VALUES(1,'赵敏',16,99.9,NULL,NULL); -- 不指定列名 ,但是需要将全部列填上,不想填的列使用null替换

SELECT * FROM  student;

INSERT INTO  student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL); -- 插入值时除数字之外 都需要使用引号引起来,单引号双引号都可以‘

SELECT * FROM student;
-- 向表中添加数据 结束 



-- 删除表中数据 开始 

DELETE FROM student WHERE id = 1;

SELECT * FROM student ; -- 如果不加条件则删除表中所有数据 
 
DELETE FROM student ; -- 该中方式删除效率比较低,因为有多少条记录就会执行多少次

SELECT *FROM student; 
 
INSERT INTO  student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL);

SELECT *FROM student;
 
TRUNCATE TABLE student; -- 删除表再创建一个一模一样的新表 

SELECT *FROM student;

-- 删除表中数据 结束 


-- 修改表中数据 开始 

UPDATE student SET age = 20 WHERE NAME = '赵敏';

SELECT * FROM student;

UPDATE student SET score = 100.0 ; -- 如果不加 where 条件将修改表中全部对应的数据列  

UPDATE student SET age = 20 WHERE NAME = '张无忌';

SELECT *FROM student;

SELECT *FROM student ;

-- 修改表中数据 结束 


-- 查询表中数据 开始 

-- 建表语句 

USE db1;

CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student3(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);

SELECT *FROM student3;

-- 1. 查询姓名 和 年龄字段 
SELECT NAME , age FROM student3;

-- 2. 查询地址字段 
SELECT address FROM student3;

-- 3. 去除重复的结果集 
SELECT DISTINCT address FROM student3;

TRUNCATE TABLE student3; -- 删除表中所有数据并创建一张新表 

SELECT * FROM student3;

-- 4. 计算 math 和 english的和
SELECT NAME ,math , english , math + english FROM student3; -- 但是这样有个问题 : 如果数据中有 null 参与的运算计算的结果也是 null

-- 5. 处理 列中 可能为null的问题 
SELECT NAME ,math ,english , math + IFNULL(english,0) FROM student3;

-- 6. 为列起别名  可以 使用as 和空格 
SELECT NAME 姓名 , math 数学 , english 英语 , math + IFNULL(english,0) AS 总分 FROM student3;

-- 查询表中数据 结束 


-- where 条件查询 开始 
SELECT * FROM student3;

-- 1. 查询大于年龄 20 岁的人
SELECT NAME 姓名  , age 年龄  FROM student3 WHERE  age > 20;

-- 2. 查询年龄大于等于 20 岁的 人 
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20;

-- 3. 查询年龄等于 20 岁的人 
SELECT NAME 姓名 , age 年龄  FROM student3 WHERE age = 20;

-- 4. 查询年龄 不等于 20 岁的人 
SELECT NAME 姓名 , age 年龄  FROM student3 WHERE age <> 20;

-- 5. 查询年龄 大于等于 20 小于等于 30 的人 两个条件中间使用 and 连接 或者使用 && (不推荐)
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20 AND  age <= 30;
SELECT NAME 姓名 , age 年龄  FROM student3 WHERE  age BETWEEN 20 AND 30; -- 相同写法 

-- 6. 查询22, 18岁 ,25岁 岁的人的信息 
SELECT NAME 姓名 ,age 年龄 FROM student3 WHERE age = 22 OR age = 18 OR age = 25;
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age IN (22,18,25); -- 相同写法 

-- 7. 查询 谁的英语缺考了
SELECT NAME 姓名 , english 英语成绩 FROM student3 wher english = NULL ; -- 错误写法 null 值不能使用 = 或者 != 进行判断  需要使用 is null 
SELECT NAME 姓名 , english 英语成绩  FROM student3 WHERE english IS NULL ;

-- 查询英语成绩不为 null 的人的信息 
SELECT NAME 姓名 , english 英语成绩 FROM student3 WHERE english IS NOT NULL; 

-- where 条件查询 结束 
 
 
-- where 查询条件 like 模糊查询 开始 

-- 1. 查询姓马的人的信息 
SELECT * FROM student3 WHERE NAME LIKE '马%';

-- 2. 查询姓名 第二个是化 的人 
SELECT * FROM student3 WHERE NAME LIKE '_化%';

-- 3.查询姓名是三个字的人 
SELECT * FROM student3 WHERE NAME LIKE '___';

TRUNCATE TABLE student3; -- 删除表中数据 并创建一个新的空表 

-- 4. 查询姓名中包含马的人 
SELECT * FROM student3 WHERE NAME LIKE '%马%';

-- 5. 查询姓名中包含德的人
SELECT * FROM student3 WHERE NAME LIKE '%德%';
-- where 查询条件 like 模糊查询 结束
 

你可能感兴趣的:(【MySQL】01 - MySQL基础)