【原创】MySQL从入门

引言:
    首先,众所周知,数据库是应用系统开发必备技能,MySQL数据库是互联网应用中使用最为广泛的数据库,本教学将使用图文并茂的方式带您从入门到熟练MySQL。
    其次,本教学同时也为博主的学习笔记,欢迎大家参阅,如有内容错误,希望您在评论区留言,我将在看到您留言是第一时间,对内容进行修改,在这里先向您表示感谢。
    最后,让我们一起学习,共同进步!!!

一、概述

    数据分析场景中经常接触另外的数据载体,数据库,它支持海量数据的存储(本身的数据组织形式+往往数据库软件支持分布式部署),并且提供高效的查询速度。
    数据库(DataBase,简称DB)对于我们而言,所看到的数据库就是一个软件,它可以存储+管理数据,MySQL只是数据库中的一种,因为互联网领域MySQL应用非常广泛,数据分析领域经常涉及到MySQL。

二、基础知识

1.启动和停止MySQL服务

MySQL安装完成之后,在系统启动时,会自动启动MySQL服务,无需手动启动。

当然,也可以手动的通过指令启动停止,以管理员身份运行cmd,进入命令行执行如下指令:

net start mysql80					#启动MySQL服务
net stop mysql80					#停止MySQL服务

注意:这里的80指的是在安装时设置的windows服务名(如下图红色区域)

image-20220405233504310

2.数据库相关概念

(1)数据库[Data=Base (DB)]: 存储数据的仓库,数据是有组织的进行存储。
(2)数据库管理系统[DataBase Management System (DBMS)]: 操纵和管理数据库的大型软件。
①关系型数据库(RDBMS): 建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
优点: 使用表存储数据,格式统一,便于维护。使用SQL语言操作,标准统一,使用方便。
②非关系型数据库(NoSQL): Not-Only SQL,泛指非关系型数据库,是对关系型数据库的补充。
优点: 数据结构灵活、伸缩性强
注:二维表,指的是由行和列组成的表。MySQL、Oracle、DB2、SQLServer这些都是属于关系型数据库,里面都是基于二维表存储数据的。简单说,基于二维表存储数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库。
(3)SQL: 全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。

3.数据模型

    MySQL是关系型数据库,是基于二维表进行数据存储的,我们可以通过MySQL客户端连接数据库管理系统(DBMS),然后通过DBMS操作数据库。
    可以使用SQL语句,通过数据库管理系统操作数据库,以及操作数据库中的表结构及数据。一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包含多行记录。

4.SQL通用语法

1)SQL语句可以单行或多行书写,以分号结尾。
2)SQL语句可以使用空格/缩进来增强语句的可读性。
3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4)注释:
单行注释:-- 注释内容 或 # 注释内容
多行注释:/* 注释内容 */

5.SQL分类

SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。

分类全称说明
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language数据控制语言,用来创建数据库用户、控制数据库的访问权限

三、DDL语句

1.数据库操作

(1)查询所有数据库

show databases;

image-20220405233535476

(2)查询当前数据库

select database(); 

image-20220405233551786

(3)创建数据库

create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];

image-20220405233609307
注:
①在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。可以通过if not exists 参数来解决这个问题,数据库不存在, 则创建该数据库,如果存在,则不创建。
②建议字符集使用utf8mb4

(4)删除数据库

drop database [if exists] 数据库名;

image-20220405233625631
注:如果删除一个不存在的数据库,将会报错。加上参数if exists,如果数据库存在,再执行删除,否则不执行删除。

(5)切换数据库

use 数据库名;

注:我们要操作某一个数据库下的表时,需要通过该指令,切换到对应的数据库下,否则不能操作。
image-20220405233641304

(6)修改数据库的字符集

alter database <数据库名> character set <字符集>;

image-20220405233658889

2.表操作

(1)查询

①查询当前数据库所有表,并查看系统数据库中的所有表结构。

show tables;

image-20220405233711895
②查询表结构

desc 表名;

image-20220405233723197
注:通过这条指令,我们可以查看到指定表的字段,字段的类型、是否可以为NULL,是否存在默认值等信息。

③ 查询指定表的建表语句

show create table 表名;

image-20220405221234685
注:通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询到,因为这部分是数据库的默认值,如:存储引擎、字符集等。

(2)创建

CREATE TABLE 表名( 
    字段1 字段1类型 <约束> [COMMENT 字段1注释 ], 
	字段2 字段2类型 <约束> [COMMENT 字段2注释 ], 
	字段3 字段3类型 <约束> [COMMENT 字段3注释 ], 
	...... 
	字段n 字段n类型 <约束> [COMMENT 字段n注释 ] 
) [COMMENT 表注释] ;

注意: […] 内为可选参数,最后一个字段后面没有逗号

例:

create table tb_user(
		id int not null unique comment '编号', 
		name varchar(20) not null comment '姓名', 
		age int not null  comment '年龄', 
		gender varchar(1) comment '性别' 
) comment '用户表';

image-20220405221432827
创建后效果:
image-20220405221443047

(3)删除

 drop table [if exists]  <表名>;

image-20220405221536826

(4)修改

①修改表名

alter table <tableName> rename to <newTableName>

image-20220405221557870
②修改数据表字符集,默认字符集和数据库字符集一致

alter table <tableName> character set <CharacterSetType>;

image-20220405221645201
③添加字段(列)

alter table <tableName> add <ColumnName> <dataType>;

image-20220405221720574
④修改列的名字和字段类型

alter table <tableName>  change <oldColumnName> <newColumnName> <type>;

image-20220405221748850
⑤只修改字段类型

alter table <tableName> modify <ColumnName> <newType>;

image-20220405222534860
⑥删除字段

alter table <tableName> drop <ColumnName>;

image-20220405222957411

四、数据类型

1.数值类型

image-20220405235147459
注:精度指整个数值的长度,标度指的是小数部位的长度。

2.字符串类型

img
注:
①红色字区域分为两类,一是带TEXT的是描述文本数据的,二是带BLOB的是存储二进制数据(如视频、音频、安装包等),由于在开发过程中性能不高且不好管理,会采用专门的文件服务器进行存储。
②当我们使用CHAR或VARCHAR时需要在后面跟上参数,其意义是当前字符串能够存储的字符串最大长度,char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。

3.日期时间类型

image-20220405223327573

案例1

设计一张员工信息表,要求如下

A.编号(纯数字)

B.员工工号 (字符串类型,长度不超过10位) 3. 员工姓名(字符串类型,长度不超过10位)

C.性别(男/女,存储一个汉字)

D.年龄(正常人年龄,不可能存储负数)

E.身份证号(二代身份证号均为18位,身份证中有X这样的字符)

F.入职时间(取值年月日即可)

建表语句如下:

create table emp(
    id int comment '编号',
	workno varchar(10) comment '工号',
	name varchar(10) comment '姓名',
	gender char(1) comment '性别',
	age tinyint unsigned comment '年龄',
	idcard char(18) comment '身份证号',
	entrydate date comment '入职时间'
) comment '员工表';

五、字段约束

    在创建数据表的时候,指定的对数据表的列的数据限制性要求(对表的列中的数据进行限制),保证数据的有效性、完整性、正确性。
常见约束有:
①非空约束(not null): 限制此列的值必须提供,不能为null。
②唯一约束(unique): 在表中的多条数据,此列的值不能重复。
③主键约束(primary key): 非空+唯一,能够唯一标识数据表中的一条数据。
④外键约束(foreign key): 建立不同表之间的关联信息。

1.非空约束(not null)

建表语句:

create table emp(
	id char(5) not null,
	name varchar(10),
	age tinyint unsigned
 );

表属性:

image-20220408230904134

若不输入经非空约束的id值会显示以下报错:

image-20220408230932787

2.唯一约束(unique)

建表语句:

create table emp(
	id char(5) unique,
	name varchar(10),
 	age tinyint unsigned
);

表属性:

image-20220408231139235

若在限制id字段后输入重复数值会显示以下报错:

image-20220408231150127

3.主键约束(primary key)

    主键一就是数据表中记录的唯一标识, 在一张表中只能有一 个主键(主键可以是一个列, 也可以是多个列的组合)。当一个字段声明为主键之后,添加数据时:此字段数据不能为null;此字段数据不能重复。
建表语句:

create table emp(
	id char(5) primary key,
	name varchar(10),
 	age tinyint unsigned
);

create table emp(
	id char(5),
	name varchar(10),
 	age tinyint unsigned,
	primary key(id)
);

表属性
image-20220408231335847
为空时报错:
image-20220408231343736
为重复值时报错:

image-20220408231409704
删除数据表主键约束

alter table <tableName> drop primary key;

创建表之后添加主键约束

alter table <tableName> modify <columnName> <type> prinmary key;

4.主键自动增长(auto_increment)

    在我们创建一张数据表时,如果数据表中有列可以作为主键,我们可以直接设置该列为主键,当有些数据表中没有合适的列作为主键时,我们可以额外定义一个与记录无关的列(ID)作为主键。
    此列数据无具体含义主要用于标识一条记录,在MySQL中我们可以将此列定义为int(只能为int类型),同时设置为自动增长,当我们向数据表中新增条记录时,无需提供ID列的值,它会自动生成。
建表语句:

create table type (
	type_id int primary key auto_increment,
	type_name varchar(20) not null,
	type_remark varcher(100)
);

注意:自动增长从1开始,每添加一条记录,自动增长的列会自动+1,当我们把某条记录删除后再添加数据,自动增长的数据也不会重复生成,即自动增长只保证数据的唯一性,不保证连贯性。

5.联合主键

    将数据表中的多列组合在一起设置为表的主键
建表语句:

create table grade(
 	stu_num char(8),
	course_id int,
	course int,
 	primary key(stu_num,course_id)
);

注意:在实际企业项目的数据库设计中,联合主键使用频率并不高;当一张数据表中没有明确的字段可以作为主键时,我们可以额外添加一个ID字段作为主键。




更新时间:2022年4月9日

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

John Tao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值