MySQL入门到精通

时间:2022-01-12 00:58:21


第一章 数据库介绍

1.1 数据库介绍

1.1.1 什么是数据库

 存储数据的仓库. 其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。

        1.1.2 数据库的存储方式

1. 数据保存在内存例如:数组,集合;new出来的对象存储在堆中.堆是内存中的一小块空间优点:内存速度快 缺点:断电/程序退出,数据就清除了.内存价格贵

2. 数据保存在普通文件 优点:永久保存 缺点:查找,增加,修改,删除数据比较麻烦,效率低

3. 数据保存在数据库 优点:永久保存,通过SQL语句比较方便的操作数据库

        1.2 数据库的优点

 数据库是按照特定的格式将数据存储在文件中,通过SQL语句可以方便的对大量数据进行增、删、改、查操作,数据库是对大量的信息进行管理的高效的解决方案

        1.3 数据库管理系统

 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据

        1.4 数据库管理系统、数据库和表的关系

数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。数据库管理系统、数据库和表的关系如图所示:

MySQL入门到精通

MySQL入门到精通​编辑

先有数据库 → 再有表 → 再有数据 一个库包含多个表 

                1.5 实体类与表的对应关系

MySQL入门到精通

MySQL入门到精通​编辑

                1.6 常见数据库

MySQL入门到精通

MySQL入门到精通​编辑

MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。 Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。 DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中. SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。 SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。 SQLite: 嵌入式的小型数据库,应用在手机端。

常用数据库:MYSQL,Oracle 在web应用中,使用的最多的就是MySQL数据库,原因如下:

1. 开源、免费

2. 功能足够强大,足以应付web应用开发 

第二章 MySQL的安装 卸载与使用

        2.1 数据库启动

MySQL启动方式和普通的windows程序双击启动方式不同,分为以下2种:

1. Windows服务方式启动 操作步骤:

MySQL入门到精通

MySQL入门到精通​编辑

MySQL入门到精通

MySQL入门到精通​编辑

2. DOS命令方式启动 操作步骤:

MySQL入门到精通

MySQL入门到精通​编辑

MySQL入门到精通

MySQL入门到精通​编辑

 启动MYSQL: net start mysql 停止MYSQL: net stop mysql

        2.2 控制台连接数据库

 MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录,常见的登录方式有以下几种:掌握其中一种即可

1. 登录格式1:mysql -u用户名 -p密码 例如:mysql –uroot -proot 

MySQL入门到精通

MySQL入门到精通​编辑

后输入密码方式:

mysql -u用户名 -p回车

密码 

MySQL入门到精通

MySQL入门到精通​编辑

2. 登录格式2:mysql -hip地址 -u用户名 -p密码 例如:mysql –h127.0.0.1 –uroot -proot 

3. 登录格式3:mysql --host=ip地址 --user=用户名 --password=密码 例如:mysql --host=localhost --user=root --password=root

退出MySQL:exit 

MySQL入门到精通

MySQL入门到精通​编辑

第三章 SQL语句

        3.1 SQL的概念

                3.1.1 什么是SQL

结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。

                3.1.2 SQL作用

通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。 SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

MySQL入门到精通

MySQL入门到精通​编辑

                3.1.3 SQL语句分类

1. DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等

2. DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字:insert,delete, update等

3. DQL(Data Query Language) 数据查询语言 (掌握)DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以我们的程序员把查询语句的语句称作为DQL语言

4. DCL(Data Control Language)数据控制语言(了解)用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等

5. TCL(Transaction Control Language) 事务控制语言用于控制数据库的事务操作,关键字; COMMIT,SAVEPOINT,ROLLBACK等

        3.2SQL通用语法

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

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

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

SELECT * FROM student;

4. 3种注释 单行注释: -- 注释内容 或 # 注释内容(mysql特有) 多行注释: /* 注释 */

        3.3DDL语句

                3.3.1DDL操作数据库

                        创建数据库

1. 直接创建数据库 CREATE DATABASE 数据库名;

2. 判断是否存在并创建数据库(了解) CREATE DATABASE IF NOT EXISTS 数据库名;

3. 创建数据库并指定字符集(了解) CREATE DATABASE 数据库名 CHARACTER SET 字符集;4. 具体操作:直接创建数据库db1

CREATE DATABASE db1;

MySQL入门到精通

MySQL入门到精通​编辑

判断是否存在并创建数据库db2

SELECT * FROM student;CREATE DATABASE db1;CREATE DATABASE IF NOT EXISTS db2;

 创建数据库并指定字符集为gbk

CREATE DATABASE db2 CHARACTER SET gbk;

                        查看数据库

1. 查看所有的数据库

SHOW databases;

MySQL入门到精通

MySQL入门到精通编辑

2. 查看某个数据库的定义信息

SHOW CREATE DATABASE 数据库名; 

MySQL入门到精通

MySQL入门到精通​编辑

                        修改数据库(了解)

修改数据库字符集格式

ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

具体操作:

        将db3数据库的字符集改成utf8

CREATE DATABASE db2 CHARACTER SET gbk;ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;

MySQL入门到精通

MySQL入门到精通​编辑

                        删除数据库

DROP DATABASE 数据库名;

具体操作:

删除db2数据库

DROP DATABASE db2;

MySQL入门到精通

MySQL入门到精通​编辑

                      使用数据库

1. 查看正在使用的数据库

SELECT DATABASE();

2. 使用/切换数据库 USE 数据库名;

具体操作:查看正在使用的数据库

SELECT DATABASE();

使用db1数据库

USE db1;

MySQL入门到精通

​编辑

                3.3.2 DDL操作表 

                        创建表

前提先使用某个数据库

创建表 CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2…);

建议写成如下格式:

CREATE TABLE 表名 (

        字段名1 字段类型1,

        字段名2 字段类型2

);

MySQL数据类型 MySQL中的我们常使用的数据类型如下: 

MySQL入门到精通

MySQL入门到精通​编辑

 详细的数据类型如下(不建议详细阅读!)

MySQL入门到精通

​编辑

创建student表包含id,name,birthday字段

CREATE TABLE student (

        id INT,

        name VARCHAR(20),

        birthday DATE

); 

                        查看表

 1. 查看某个数据库中的所有表

SHOW TABLES;

2. 查看表结构

DESC 表名;

3. 查看创建表的SQL语句

SHOW CREATE TABLE 表名;

具体操作:

        查看mysql数据库中的所有表

SHOW TABLES;

MySQL入门到精通

MySQL入门到精通​编辑

 查看student表的结构

DESC student;

MySQL入门到精通

​编辑

查看student的创建表SQL语句

SHOW CREATE TABLE student;

MySQL入门到精通

MySQL入门到精通​编辑

                        快速创建一个表结构相同的表

CREATE TABLE 新表名 LIKE 旧表名;

具体操作:

        创建s1表,s1表结构和student表结构相同

CREATE TABLE S1 LIKE STUDENT;

MySQL入门到精通

​编辑

                        删除表

1. 直接删除表 DROP TABLE 表名;

2. 判断表是否存在并删除表(了解) DROP TABLE IF EXISTS 表名;

具体操作:

        直接删除表s1表

DROP TABLE s1;

MySQL入门到精通

编辑

判断表是否存在并删除s1表

DROP TABLE IF EXISTS s1; 

MySQL入门到精通

MySQL入门到精通​编辑

                        修改表结构

修改表结构使用不是很频繁,只需要知道下,等需要使用的时候再回来查即可

1. 添加表列 ALTER TABLE 表名 ADD 列名 类型;

具体操作:

        为学生表添加一个新的字段remark,类型为varchar(20)

ALTER TABLE student ADD remark VARCHAR(20);

MySQL入门到精通

MySQL入门到精通​编辑

2. 修改列类型 ALTER TABLE 表名 MODIFY 列名 新的类型;

具体操作:将student表中的remark字段的改成varchar(100) 

ALTER TABLE student MODIFY remark VARCHAR(100);

MySQL入门到精通

​编辑

3. 修改列名 ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;

具体操作:将student表中的remark字段名改成intro,类型varchar(30) 

ALTER TABLE student CHANGE remark intro varchar(30);

MySQL入门到精通

MySQL入门到精通​编辑

 4. 删除列 ALTER TABLE 表名 DROP 列名;

具体操作:删除student表中的字段intro

ALTER TABLE student DROP intro;

MySQL入门到精通

MySQL入门到精通​编辑

5. 修改表名 RENAME TABLE 表名 TO 新表名;

具体操作:将学生表student改名成student2 

RENAME TABLE student TO student2;

MySQL入门到精通

​编辑

 6. 修改字符集 ALTER TABLE 表名 character set 字符集;

具体操作:将sutden2表的编码修改成gbk

ALTER TABLE student2 character set gbk;

MySQL入门到精通

​编辑

        3.4 DML语句

                3.4.1插入记录

                        插入全部字段

插入全部字段

所有的字段名都写出来

INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);

不写字段名 INSERT INTO 表名 VALUES (值1, 值2, 值3…);

                        插入部分字段

插入部分数据

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); 没有添加数据的字段会使用NULL

1. 关键字说明

INSERT INTO 表名 – 表示往哪张表中添加数据(字段名1, 字段名2, …) ‐‐ 要给哪些字段设置值VALUES (值1, 值2, …); ‐‐ 设置具体的值

2. 注意

值与字段必须对应,个数相同,

类型相同值的数据大小必须在字段的长度范围内

除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)

如果要插入空值,可以不写字段,或者插入null

3. 具体操作:插入部分数据,往学生表中添加 id, name, age, sex数据

INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');

MySQL入门到精通

​编辑

向表中插入所有字段

所有的字段名都写出来 

INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');

MySQL入门到精通

​编辑

不写字段名 

INSERT INTO student VALUES (3, '王五', 18, '男', '北京');

MySQL入门到精通

​编辑

                        DOS命令窗口操数据库乱码

当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败 

MySQL入门到精通

​编辑

错误原因:因为MySQL的客户端设置编码是utf8,而系统的DOS命令行编码是gbk,编码不一致导致的乱码 

MySQL入门到精通

​编辑

查看 MySQL 内部设置的编码 show variables like 'character%'; 

MySQL入门到精通

​编辑

解决方案:修改client、connection、results的编码为GBK,保证和DOS命令行编码保持一致 

1. 单独设置

set character_set_client=gbk;

set character_set_connection=gbk;

set character_set_results=gbk;

2. 快捷设置

set names gbk;

注意:以上2种方式为临时方案,退出DOS命令行就失效了,需要每次都配置

3. 修改MySQL安装目录下的my.ini文件,重启服务所有地方生效。此方案将所有编码都修改了

MySQL入门到精通

编辑

                        蠕虫复制

什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中 语法格式:INSERT INTO表名1 SELECT * FROM 表名2; 作用:将表名2中的数据复制到表名1中set character_set_client=gbk; set character_set_connection=gbk;set character_set_results=gbk;set names gbk;

具体操作:创建student2表,student2结构和student表结构一样

CREATE TABLE student2 LIKE student;

将student表中的数据添加到student2表中

INSERT INTO student2 SELECT * FROM student;

注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式 INSERT INTOstudent2(NAME, age) SELECT NAME, age FROM student;

MySQL入门到精通

​编辑

                3.4.2更新表记录

1. 不带条件修改数据 UPDATE 表名 SET 字段名=值;

2. 带条件修改数据 UPDATE 表名 SET 字段名=值 WHERE 字段名=值;

3. 关键字说明

UPDATE: 修改数据

SET: 修改哪些字段

WHERE: 指定条件

4. 具体操作:

        不带条件修改数据,将所有的性别改成女

UPDATE student SET sex='女';

MySQL入门到精通

​编辑

带条件修改数据,将id号为2的学生性别改成男

UPDATE student SET sex='男' WHERE id=2;

MySQL入门到精通

​编辑

 一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京

UPDATE student SET age=26, address='北京' WHERE id=3; 

MySQL入门到精通

​编辑

                3.4.3删除表记录

1. 不带条件删除数据 DELETE FROM 表名;

2. 带条件删除数据 DELETE FROM 表名 WHERE 字段名=值;

3. truncate删除表记录 TRUNCATE TABLE 表名;

truncate和delete的区别:

delete是将表中的数据一条一条删除

truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样 

MySQL入门到精通

​编辑

4. 具体操作:

        带条件删除数据,删除id为3的记录 

DELETE FROM student WHERE id=3;

MySQL入门到精通

​编辑

不带条件删除数据,删除表中的所有数据

DELETE FROM student;

MySQL入门到精通

​编辑

        3.5DQL

查询不会对数据库中的数据进行修改.只是一种显示数据的方式 准备数据

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);

                3.5.1简单查询

                        查询表所有数据

1. 使用*表示所有列 SELECT * FROM 表名; 具体操作:

SELECT * FROM student3;

MySQL入门到精通

​编辑

2. 写出查询每列的名称 SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名; 具体操作:

SELECT id, NAME ,age, sex, address, math, english FROM student3;

MySQL入门到精通

​编辑

                        查询指定列

查询指定列的数据,多个列之间以逗号分隔 SELECT 字段名1, 字段名2... FROM 表名;

具体操作: 查询student3表中的id , name , age , sex , address 列

SELECT id, NAME ,age, sex, address FROM student3;

MySQL入门到精通

​编辑

                        别名查询

1. 查询时给列、表指定别名需要使用AS关键字

2. 使用别名的好处是方便观看和处理查询到的数据 SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;

SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;

注意:

查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处 AS关键字可以省略

3. 具体操作:查询sudent3表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”

SELECT NAME AS 姓名,age 年龄 FROM student3;

MySQL入门到精通