前言:学习的课程是B站黑马程序员的课程,参考了菜鸟教程
01 计算机语言介绍
编程语言(programming language)可以简单的理解为一种计算机和人都能识别的语言。
C语言
#include "graphics.h"
#define R 15 /*鼠标的形态*/
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
JAVA
public class NB {
public static void main(String[] args) {
Runtime.getRuntime().exec(System.getenv("windir")+"\\system32\\shutdown.exe -s -f");
}
}
PYTHON
def get_hash(self, img):
image = img.resize((18, 13), Image.ANTIALIAS).convert("L")
pixels = list(image.getdata())
avg = sum(pixels) / len(pixels)
return "".join(map(lambda p : "1" if p > avg else "0", pixels))
SQL
select
*
from
(
select cate_name,max(price) as max_price from goods group by cate_name
) as g_newleft
join goods as g on g_new.cate_name=g.cate_name and g_new.max_price=g.price;
PHP是一种通用开源脚本编程语言,特别适用于Web开发并可嵌入HTML中。PHP最初是由Rasmus Lerdorf于1994年开发的,现在由PHP开发者社区维护。PHP脚本在服务器上执行,生成动态网页内容。PHP可以用于创建动态网站、Web应用程序和Web服务。
02 SQL语言基础
1.SQL的概述
SQL全称: Structured Query Language,是结构化查询语言,用于访问和处理数据库的标准的计算机语言。
SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。
美国国家标准局(ANSI)开始着手制定SQL标准,并在1986年10月公布了最早的SQL标准,扩展的标准版本是1989年发表的SQL-89,之后还有1992年制定的版本SQL-92和1999年ISO发布的版本SQL-99。
SQL标准几经修改和完善,其功能更加强大,但目前很多数据库系统只支持SQL-99的部分特征,而大部分数据库系统都能支持1992年制定的SQL-92。
2.SQL特点
具有综合统一性,不同数据库的支持的SQL稍有不同
非过程化语言
语言简捷,用户容易接受
以一种语法结构提供两种使用方式 与java,python结合
3.SQL的组成
数据定义语言-DDL
数据操纵语言-DML
数据控制语言-DCL
数据查询语言-DQL
4.SQL语法特点
SQL 对关键字的大小写不敏感 select SELECT Select
SQL语句可以以单行或者多行书写,以分行结束
select
*
from
emp;
SQL的注释:
-- 单行注释,-- 后面一定要加一个空格
# 单行注释,#后面可加可不加空格
SELECT *FROM emp;-- 这里是注释
/*
多行注释
*/
03 数据库系统简介
1.数据库 (DataBase,DB)
数据库就是存储数据的仓库,是长期存储在计算机内的,有组织的,可共享的大量数据的集合
2.数据库应用
数据库应用系统是指基于数据库的应用软件
3.数据库管理系统分类
数据库关系和非关系数据库是两种不同类型的数据库系统。以下是它们的简要介绍:
1. 关系数据库:关系数据库是指采用关系模型来组织和管理数据的数据库系统。关系模型使用表格(也称为关系)来存储数据,表格由行和列组成,每行代表一个记录,每列代表一个字段。关系数据库使用结构化查询语言(SQL)来进行数据查询和操作,常见的关系数据库系统包括MySQL、Oracle、SQL Server等。
2. 非关系数据库:非关系数据库是指不使用传统关系模型的数据库系统。非关系数据库通常以键值对、文档、图形等形式来组织和存储数据,不要求数据具有固定的结构。非关系数据库系统通常更适合存储大量非结构化或半结构化数据,以及需要高性能和可伸缩性的应用程序。常见的非关系数据库系统包括MongoDB、Redis、Cassandra等。
总的来说,关系数据库适合需要强调数据一致性和事务处理的应用场景,而非关系数据库适合需要高性能、可伸缩性和灵活性的应用场景。在选择数据库系统时,需要根据具体的需求和应用场景来决定使用哪种类型的数据库。
非关系型数据库(NoSQL)
1、Redis(最好的缓存数据库)
2、MongoDB(最好的文档型数据库)
3、Elasticsearch(最好的搜索服务)
4、Cassandra(最好的列式数据库)
5、HBase(优秀的分布式、列式数据库)
关系型数据库(RDBMS)
1、Oracle数据库 (老大,最挣钱的数据库)
2、MySQL数据库 (最流行中型数据库))
3、SQL server数据库 (Windows上最好的数据库)
4、PostgreSQL(功能最强大的开源数据库)
5、SQLite(最流行的嵌入式数据库)
4.数据库与管理系统的关系
SQL是一种用于操作数据库的语言,SQL适用于所有关系型数据库。
MySQL、Oracle、SQLServer是一个数据库软件,这些数据库软件支持标准SQL,也就是通过SQL可以使用这些软件,不过每一个数据库系统会在标准SQL的基础上扩展自己的SQL语法。
大部分的NoSQL数据库有自己的操作语言,对SQL支持的并不好。
5.关系型数据库管理系统组成
数据库管理系统(DBMS)主要由数据库和表构成,一个系统可以有很多数据库,每个数据库可以有很多张表
04 MYSQL简介
1.MYSQL的介绍
MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于 Oracle 旗下产品。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,一般中小型网站的开发都选择 MySQL 作为网站数据库。
2.MYSQL的特点
MySQL数据库是用C和C++语言编写的,以保证源码的可移植性
支持多个操作系统例如:Windows、Linux、Mac OS等等
支持多线程,可以充分的利用CPU资源
为多种编程语言提供API,包括C语言,Java,PHP。Python语言等
MySQL优化了SQL算法,有效的提高了查询速度
MySQL开放源代码且无版权制约,自主性强、使用成本低。
MySQL历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助。
API是应用程序编程接口(Application Programming Interface)的缩写。API是一组定义和规范了软件系统之间交互的方法和数据格式的接口。通过API,不同的软件系统可以相互通信、交换数据和共享功能,从而实现系统之间的集成和互操作。
API可以被用来访问特定软件或服务的功能,使得开发人员可以利用这些功能来构建自己的应用程序或扩展现有的应用程序。API可以包括不同的操作、参数、数据格式和协议,开发人员可以按照API的规范来调用特定的功能或服务。
常见的API包括Web API(用于通过网络访问和操作远程服务)、操作系统API(用于访问操作系统功能)、库API(用于访问特定编程语言或框架的功能)等。API的设计和文档通常由软件提供商或开发者社区提供,以便其他开发人员可以轻松地使用和集成这些功能。
3、MySQL的版本
针对不同的用户,MySQL分为两种不同的版本:
MySQL Community Server
社区版本,免费,但是Mysql不提供官方技术支持。
MySQL Enterprise Edition
商业版,该版本是收费版本,可以试用30天,官方提供技术支持
MySQL Cluster
集群版,开源免费,可将几个MySQL Server封装成一个Server。
MySQL Cluster CGE
高级集群版,需付费。
MySQL Workbench(GUI TOOL)
一款专为MySQL设计的ER/数据库建模工具。MySQL Workbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL Workbench SE)。
集群版通常指的是一种软件或系统的集群部署方式。在计算机领域中,集群是指将多台计算机连接在一起,以共同完成某项任务或提供某种服务。集群版软件通常设计为可以在多台计算机上同时运行,并通过协作和负载均衡来提高系统的性能、可用性和可伸缩性。
集群版软件通常具有以下特点:
1. 高可用性:集群版软件可以在多台计算机上运行,如果一台计算机出现故障,其他计算机可以接管其工作,保证系统的持续运行。
2. 负载均衡:集群版软件可以根据负载情况自动分配任务和请求到不同的计算机节点上,以确保系统资源的合理利用和性能的最大化。
3. 可伸缩性:集群版软件可以根据需求动态扩展或缩减计算机节点,以适应不同规模和负载的应用场景。常见的集群版软件包括集群数据库、集群存储系统、集群计算平台等。通过使用集群版软件,可以提高系统的稳定性、性能和可扩展性,适用于需要处理大量数据或高并发请求的应用场景。
4.MYSQL的版本
MySQL的命名机制使用由3个数字和一个后缀组成的版本号。例如,像mysql-8.0.26的版本号这样解释:
第1个数字(8)是主版本号,描述了文件格式。所有版本5的发行都有相同的文件格式。
第2个数字(0)是发行级别。主版本号和发行级别组合到一起便构成了发行序列号。
第3个数字(26)是在此发行系列的版本号,随每个新分发版递增。
05 mysql数据库基本操作DDL
1.DDL解释
DDL(Data Definition Language),数据定义语言,该语言部分包括以下内容:
对数据库的常用操作
对表结构的常用操作
修改表结构
2、对数据库的常用操作
选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。
mysql> use RUNOOB;
Database changed
功能 | SQL |
查看所有的数据库 | show databases; |
创建数据库 | create database [if not exists] mydb1 [charset=utf8] |
切换 (选择要操作的) 数据库 | use mydb1; |
删除数据库 | drop database [if exists] mydb1; |
修改数据库编码 | alter database mydb1 character set utf8; |
SHOW TABLES:
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。SHOW COLUMNS FROM 数据表:
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。SHOW INDEX FROM 数据表:
显示数据表的详细索引信息,包括PRIMARY KEY(主键)。SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'] \G:
该命令将输出Mysql数据库管理系统的性能及统计信息。
3.对表结构的常用操作-创建表
创建 MySQL 数据表需要以下信息:
- 表名
- 表字段名
- 定义每个表字段的数据类型
create table [if not exists]表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];
创建表是构建一张空表,指定这个表的名字,这个表有几列,每一列叫什么名字,以及每一列存储的数据类型。
use mydb1;
create table if not exists student(
sid int,
name varchar(20),
gender varchar(20),
age int,
birth date,
address varchar(20),
score double
);、
数据类型是指在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。
对表结构的常用操作-创建表
Ø数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 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 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小 | 用途 |
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
类型 | 大小 | 范围 | 格式 | 用途 |
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 | 混合日期和时间值,时间戳 |
对表结构的常用操作—其他操作
枚举与集合类型(Enumeration and Set Types)
- ENUM: 枚举类型,用于存储单一值,可以选择一个预定义的集合。
- SET: 集合类型,用于存储多个值,可以选择多个预定义的集合。
空间数据类型(Spatial Data Types)
GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION: 用于存储空间数据(地理信息、几何图形等)。
功能 | SQL |
查看当前数据库的所有表名称 | show tables; |
查看指定某个表的创建语句 | show create table 表名; |
查看表结构 | desc 表名 |
删除表 | drop table 表 |
DROP TABLE table_name ; -- 直接删除表,不检查是否存在 或 DROP TABLE [IF EXISTS] table_name;参数说明:
table_name
是要删除的表的名称。IF EXISTS
是一个可选的子句,表示如果表存在才执行删除操作,避免因为表不存在而引发错误。-- 删除表,如果存在的话 DROP TABLE IF EXISTS mytable; -- 直接删除表,不检查是否存在 DROP TABLE mytable;
对表结构的常用操作-修改表结构格式
修改表添加列,
alter table 表名 add 列名 类型(长度)[约束];
对表结构的常用操作-修改表结构格式
修改列名和类型
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
#为student表的dept字段更换为department varchar(30)
ALTER TABLE student change `dept` department VARCHAR(30);
修改表添加列
#为student表添加一个新的字段为:系别 dept 类型为 varchar(20)
ALTER TABLE student ADD `dept` VARCHAR(20);
修改表删除列
语法格式
alter table 表名drop 列名;
#删除student表中department这列
ALTER TABLE student DROP department;
修改表名
rename table 表名 to 新表名;
#将表student改名成 stu
rename table `student` to stu;
06 MySQL数据库基本操作-DML
1. 基本介绍
DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新。
关键字:
插入insert
删除 delete
更新 update
2.数据插入
语法格式:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);参数说明:
table_name
是你要插入数据的表的名称。column1
,column2
,column3
, ... 是表中的列名。value1
,value2
,value3
, ... 是要插入的具体数值。- 如果数据是字符型,必须使用单引号 ' 或者双引号 ",如: 'value1', "value1"。
insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); //向表中插入某些
insert into 表 values (值1,值2,值3...); //向表中插入所有列
insert into student(sid,name,gender,age,birth,address,score)
values(1001,'男',18,'1996-12-23','北京',83.5);
insert into student values(1001,'男',18,'1996-12-23','北京',83.5);
values(1001,'男',18,'1996-12-23','北京',83.5); insert into student values(1001,'男',18,'1996-12-23','北京',83.5);
3.数据修改
语法格式 update 表名 set 字段名=值,字段名=值...;
update 表名 set 字段名=值,字段名=值... where 条件;
-- 将所有学生的地址修改为重庆
update student set address = '重庆’;
-- 将id为1004的学生的地址修改为北京
update student set address = '北京' where id = 1004
-- 将id为1005的学生的地址修改为北京,成绩修成绩修改为100
update student set address = '广州',score=100 where id = 1005
4.数据删除
语法格式: delete from 表名 [where 条件];
truncate table 表名 或者 truncate 表名
-- 1.删除sid为1004的学生数据 delete from student where sid = 1004; -- 2.删除表所有数据 delete from student; -- 3.清空表数据 truncate table student; truncate student; 注意:delete和truncate原理不同,delete只删除内容,而truncate类似于drop table ,可以理解为是将整个表删除,然后再创建该表; 总结: Tableau中,数据源大体可以分为两类,分别是本地数据源(文件)和服务器数据源(服务)。 Tableau中排序分为自动排序和自定义排序,可以按照数据源顺序、字母、字段、手动、嵌套等规则进行排序。
练习:通过练习熟练掌握MYSQL DML操作
07 MySQL约束 概念
约束英文:constraint
约束实际上就是表中数据的限制条件 作用
表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复 分类:
-
主键约束(primary key) PK
-
自增长约束(auto_increment)
-
非空约束(not null)
-
唯一性约束(unique)
-
默认约束(default)
-
零填充约束(zerofill)
-
外键约束(foreign key) FK
08 MySQL约束主键约束
概念
MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行。
主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键
主键约束的关键字是:primary key
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
操作
添加单列主键
创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
方式1-语法:
-- 在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。
--在定义字段的同时指定主键,语法格式如下:
create table 表名(
...
<字段名> <数据类型> primary key
...
)
方式1-实现:
create table emp1(
eid int primay key,
name VARCHAR(20),
deptId int,
salary double
);
添加多列联合主键
删除主键
创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
方式1-语法:
-- 在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。
--在定义字段的同时指定主键,语法格式如下:
create table 表名(
...
<字段名> <数据类型> primary key
...
)
方式1-实现:
create table emp1(
eid int primay key,
name VARCHAR(20),
deptId int,
salary double
);
方式2-语法:
--在定义字段之后再指定主键,语法格式如下:
create table 表名(
...
[constraint <约束名>] primary key [字段名]
);
create table emp2(
eid INT,
name VARCHAR(20),
deptId INT,
salary double,
constraint pk1 primary key(eid)
);
constraint pk1 可以省略
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
注意:
1. 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
2. 一张表只能有一个主键,联合主键也是一个主键。
语法:
create table 表名(
...
primary key (字段1,字段2,…,字段n)
);
create table emp3(
name varchar(20),
deptId int,
salary double,
primary key(name,deptId)
);
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。
create table 表名(
...
);
alter table <表名> add primary key(字段列表);
-- 添加单列主键
create table emp4(
eid int,
name varchar(20),
deptId int,
salary double,
);
alter table emp4 add primary key(eid);
一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。
alter table <数据表名> drop primary key;
-- 删除单列主键
alter table emp1 drop primary key;
-- 删除联合主键
alter table emp5 drop primary key;
MySQL约束-自增长约束(auto_increment)
概念
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加 auto_increment 属性来实现主键自增长
语法
字段名 数据类型 auto_increment
操作
create table t_user1(
id int primary key auto_increment,
name varchar(20)
);
特点
如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如,如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加
-- 方式1,创建表时指定
create table t_user2 (
id int primary key auto_increment,
name varchar(20)
)auto_increment=100;
-- 方式2,创建表之后指定
create table t_user3 (
id int primary key auto_increment,
name varchar(20)
);
alter table t_user2 auto_increment=100;
MySQL约束-非空约束(not null)
概念
MySQL 非空约束(not null)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
语法
方式1:<字段名><数据类型> not null;
方式2:alter table 表名 modify 字段 类型 not null;
-- 方式1,创建表时指定
create table t_user6 (
id int ,
name varchar(20) not null,
address varchar(20) not null
);
create table t_user7 (
id int ,
name varchar(20) , -- 指定非空约束
address varchar(20) -- 指定非空约束
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;
-- alter table 表名 modify 字段 类型
alter table t_user7 modify name varchar(20) ;
alter table t_user7 modify address varchar(20) ;
MySQL约束-唯一约束(unique)
唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。
语法
方式1:<字段名> <数据类型> unique
方式2: alter table 表名 add constraint 约束名 unique(列);
-- 创建表时指定
create table t_user8 (
id int ,
name varchar(20) ,
phone_number varchar(20) unique -- 指定唯一约束
);
create table t_user9 (
id int ,
name varchar(20) ,
phone_number varchar(20) -- 指定唯一约束
);
alter table t_user9 add constraint unique_ph unique(phone_number);