Mysql数据库基础入门教程
课程链接:https://www.bilibili.com/video/BV1Qb411x7Yc?p=1
- 2022/1/22start
一、数据库简介
1、什么是数据库?
数据库是按照数据结构来组织、存储和管理数据的仓库。
2、数据库的发展史?
- 最早的数据库:
通过大量的分类、比较和表格绘制的机器运行数百万穿孔卡片来进行数据的处理。其运行结果在纸上打印出来或者制成新的穿孔卡片。而数据管理就是对所有这些穿孔卡片进行物理的储存和处理。
- 现在的数据库:
当时计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求。传统的文件系统已经不能满足人们的需要。能够统一管理和共享数据的**数据库管理系统(DBMS)**应运而生。
3、数据库管理系统(DBMS)
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完控性。
用户通过DBMS访问数据库中的数据。数据库管理员也通过dbms进行数据库的维护工作。
数据库管理系统是数据库系统的核心,是管理数据库的软件。我们一般说的数据库,就是指的DBMS: 数据库管理系统。
4、常见的数据库管理系统(关系型数据库)?
-
Oracle 收费,运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域。
-
DB2 收费,速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域。
-
MySQL 不收费,开源,体积小,书都快,适用于中小型企业领域。
-
SQL Server 收费,全面,效率高,节目友好,操作容易,但是不跨平台。适用于中小型企业领域。
5、结构化查询语句SQL?
SQL语言的功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言.
6、非关系型数据库NoSql?
MongoDB,Redis,HBase(大数据)
二、 RDBMS专业术语
-
表:具有固定的列数和任意的行数
-
数据库:管理表的集合
-
列:一个数据行Field 字段
-
行:一条记录 row
-
主键:主键是唯一的。一个数据表中只能包含一个主键,你可以使用主键来查询数据(唯一性、可组合、不能重复、不能为空)
-
外键:用户关联二个表
-
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
三、MySQL安装
1、MySQL介绍?
-
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
-
MySQL是开源的,所以你不需要支付额外的费用。
-
MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
-
MySQL使用标准的SQL数据语言形式。
-
MySQL可以允许于多个系统上,并且支持多种语言。这些编程语言包C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
2、MySQL安装
安装、配置环境变量 :https://www.cnblogs.com/itcui/p/15511683.html
密码重置: https://www.cnblogs.com/wsl-/p/10688292.html
四、MySQL基本命令及链接Navicate
1、常用的数据库命令?
MySql数据库分为二种
- 系统数据库(系统数据库自带的,自带的4个)
information schema:存储数据库对象信息如用户表信息,列信息,根除,字符.分区里面的内容我们不能动.
performance_schema:存储数据库服务器性能参数信息
mysql:存储数据库用户权限信息
sys:通过这个库可以快速的了解系统的元数据信息——这个库是通过视图的形式把information schema和performance_ schema结合起来,查询出更加令人容易理解的数据
-
用户数据库
-
创建数据库
方法一:
create database 数据库名称;
全
create database 数据库名称 character set utf8; 设置字符集为utf-8
方法二:
-
删除数据库
drop database 数据库名称;
-
查看数据库
show databases;
-
使用数据库
use 数据库名;
-
查看数据库中当中有多少表
show tables;
注意写的顺序,先使用数据库,再去查看多少张表
2、安装初步使用Navicate?
-
安装Navicate官网:http://www.navicat.com.cn/download/navicat-for-mysql
-
链接数据库
方法一:
方法二、
链接数据库:mysql -u root -p
五、MySQL字符集介绍
- 字符集的由来?
计算机只能识别二进制代码无论是计算机程序还是数据,最终都会转换成二进制,计算机才能认识。
为了计算机不只能做科学计算,也能处理文字信息。
人们想出了给每一个文字符号编码以便于计算识别处理的办法,这就是计算机字符集的由来。
-
ASSCII:
-
unicode :
1、为了统一字符编码。国际标准化组织lSO的一些成员国于1984年发起制定了新的国际宁符集标准。容纳全世界各种语言,文字,和符号。最后这个标准ISO-10646。
3、ISO-10646发布后,遭到了美国计算机公司的反对。
4、1988年,Xerox公司提议制定了新的以16位编码人统一字符集。并联合不Apple,IBM,SUN,Microsoft等公司成立了Unicode技术委员会。专门负责收集,整理,和编码。于1991年推出了Unicode1.0。
5、都是为了字符编码统一问题,ISO和Unicode协会推出了连个不同人标准。这显然是不利的。后来双方开始谈判。1991年10月达成协议。ISO将Unicode收编。起了个名BMP。 -
UTF -16:
1、ISO-10646编码空间足以容纳从古自今使用过的文字和字符。但很多文字字符已经很少用了。
2、超过99%的在用文字字符都编入了BMP.因此,绝大部分情况下。
3、Unicode双字节方式都能满足需求。而且比双字节编码隽式4字节原始编码来说,更节省内存和处理时间。这也是Unicode流行的原因。
4、万一使用了BMP以这后文字怎么办?Unicode提出了UTF-16的解决办法。 -
UTF-8:
1、虽然UTF-16解决了上面问题。但当时的计算机和网络世界还是ASCII的天下。只能处理单字节数据流。UTF-16离开了Unicode环境后。在传输和处理中,都存在问题。
2、于是又提出了UTF-8的解决文案,
3、UTF-8按一定的规则,将一个ISO10646或Unicode转换成1至4个字节的编码
4、其中ASCII转成单字节编码。也就严格兼容了ASCII字符集。
5、UTF-8的2,3,4字节用以转换ISO-10646标准的UCS-4原始码。 -
汉字的一些常见字符集:
GB2312
GB13000
GBK
GB18030
六、MySQL存储引擎
-
数据库对象:存储,管理和使用数据的不同结构形式,如:表、视图、存储过程、函数、触发器、事件等。
-
数据库:存储数据库对象的容器。
-
什么是存储引擎:
1、MySQL中的数据用各种不同的技术存储在文件(或者内存)中。
2、每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。
3、通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
4、不同的存储引擎性能是不一样的。 -
什么是事务:是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
-
存储引擎分类:
MYISAM
INNODB
MEMORY
七、SQL功能划分
-
DDL:数据定义语言—用户定义数据库对象:创建库,表,列等。
-
DML:数据操作语言—用户操作数据库中的记录
-
DQL:数据查询语言—用于查询数据
-
DCL:数据控制语言—用于定义访问权限和安全级别
八、SQL数据类型
- MysQL中定义数据字段的类型对你数据库的优化是非常重要的。
- MySQL支持所有标准SQL数值数据类型。
- MySQL支持多种类型,大致可以分为三类。https://www.cnblogs.com/peijz/p/12382121.html
1、数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
2、字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
3、日期和时间类型
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
- 常用数据类型
double:浮点型,例如double(5.2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长宁字符串类型;char(10) 'abc
varchar:可变长度字符串类型;varchar(10) 'abc"
text:字符串类型;
blob:二进制类型;
date:日期类型,格式为: yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
datetime:日期时间类型yyy-MM-dd hh:mm:ss
- 在mysql中,字符串类型和日期类型都要用单引号括起来。‘Myxq’"2020-01-01’
九、SQL创建表-DDL
创建数据库:
create database 数据库名 character set utf8;
展示数据库:
show databases;
使用数据库:
use 数据库名;
展示数据库表:
show tables;
新建表,创建表:
create table 表名(
id int,
name varchar(25),
age int,
email varchar(255)
);
十、SQL添加删除字段-DDL
查看字段:desc 表名;
添加字段:alter table 表名 add 字段名 字段类型;
修改表的字段类型:alter table 表名 modify(修改) 字段名 字段类型;
删除字段:alter table 表名 drop 字段名;
十一、SQL修改字段及删除表-DDL
修改表名:rename table 原始表名 to 修改表名;
查看表的创建细节:show create table 表名
修改字符集:ALTER TABLE 表名 CHARACTER SET 修改后字符集名称;
修改表个字段名:ALTER TABLE 表名 CHANGE 原始字段 新字段 数据类型;
删除表:drop table 表名;
十二、SQL插入数据-DML
查询表中的所有数据:select * from 表名;
DML是对表中的数据进行增、删、改的操作
- 插入操作:
插入一条:
insert into 表名(列名1,列名2……)values(列值1,列值2……);
插入多条:
insert into 表名(列名1,列名2……)values(列值1,列值2……),(列值1,列值2……),(列值1,列值2……);
注意事项:
1、列名誉列值的类型、个数、顺序要一一对应。
2、值不要超出列定义的长度。
3、插入的日期和字符一样,多使用引号括起来。
十三、SQL更新数据及修改数据库密码-DML
- 更新操作
update 表名 set 列名1=列值1,列名2=列值2…… where 列名=值
- 修改数据库密码:
十四、SQL删除记录-DML
- 删除指定数据操作
delete from 表名 (where 列名=值);
- 删除所有数据操作
delete *from 表名;
truncate table 表名;
- delete与truncate的区别
1、DELETE 删除表中的数据,表结构还在;删除后的数据可以找回。
2、TRUNCATE 删除是把表数据直接清空掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。
十五、SQL虚拟结果集—DQL
-
查询表中的所有数据:select * from 表名;
-
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端
-
结果集:
1、通过查询语句查询处理啊的数据以表的形式展示我们称这个表为虚拟结果集。存放在内存中。
2、查询放回的结果集是一张虚拟表。
- 查询指定列:
select 列名1,列名2…… from 表名;
十六、SQL条件查询—DQL
条件查询就是在查询时给出where子句,在where子句中使用一些运算符及关键字;
十七、条件查询使用案例—DQL
1、查询性别为男,并且年龄为20的学生记录
select * from students where gender ="男" and a'geage="20";
2、查询学号为1001或者名为zs的记录
如果你要修改的数字所在列的类型是number,那么不用加引号,如果是字符型的,如:varchar(),char等,那么需要加引号。
SELECT * FROM students WHERE id=1001 or `name`="zs";
3、查询学号为1001,1002,1003的记录
方法一:
select * from students where id=100l or id=1002 or id=1003;
方法二:
select * from students where id in(1001,1002,1003);
4、查询年龄为null的记录
select * from students where age is null;
5、查询年龄在18到20之间的学生记录
select * from students where age>=18 and age<=20 ;
SELECT *FROM students WHERE age BETWEEN 18 AND 20;
6、查询性别非男的学生记录
select * FROM students WHERE gender !="男";
select *FROM students WHERE gender <>"男";
7、查询姓名姓名不为null的记录
select * from students where age is not null;
十八-SQL模糊查询—DQL
- 根据指定的关键进行查询
- 使用LIKE关键字后跟通配符
- 通配符
_:任意一个字符
%:任意0~n个字符
-
使用案例:
-
查询姓名由5个字母(字符)构成的学生记录
select * from students where name like "_____" select name from students where name like "_____"
-
查询姓名由5个字母(字符)构成,并且第五个字母(字符)为“s”结尾的学生记录
select * from students where name like "____S"; select name from students where name like "____S";
-
查询姓名以"m”字母(字符)开头的学生记录
select * from students where name like "m%"; select name from students where name like "m%";
-
查询姓名中第2个字母(字符)为"u"的学生记录
select * from students where name like "_u%"; select name from students where name like "_u%";
-
查询姓名中包含"s”字母(字符)的学生记录
select * from students where name like ' %s%'; select name from students where name like ' %s%';
-
十九、结果集去重与字段别名(字段控制查询)—DQL
- 去除重复记录
SELECT DISTINCT name FROM students;
-
把查询字段的结果进行运算,必须都要是数据型
SELECT * , 字段1+字段2 FROM表名; select * , age+score from students;
列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL,下面使用了把NULL转换成教值0的函教IFNULL: SELECT * , IFNULL(age,0) +IFNULL(score,0) FROM students; select * , ifnull(age,0)+ifnull(score,0) from students;
-
对查询结果起别名
在上面查询中出现列名为ifnull(age,0)+ifnull(score,0),这很不美观,现在我们给这一列给出一个别名,为total:
SELECT *, ifnull(age,0)+ifnull(score,0) AS total FROM score;
省略AS (最好不要省略)
SELECT *, ifnull(age,0)+ifnull(score,0) total FROM score;
二十、SQL数据的导入及排序—DQL
- 导入表—导入表中数据
点击创建的数据库右击——Execute SQL File(执行sql文件)
-
对查询进行排序使用关键词 order by,升序ASC(从小到大默认),降序DESC(从大到小)
-
使用案例
select * from 表名 order by 列名 DESC , 列名 (ASC);
二十一、SQL聚合函数Count—DQL
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MAX():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;