MySQL-基础(一)
第一节 数据库的基本概念
1.1什么是数据库
数据库是按照数据结构来组织、存储和管理数据的仓库
数据库是一个数据的集合
其本质是一个文件系统,以文件的方式,将数据保存在电脑上
1.2 为什么要使用数据库
数据库
- 优点
- 海量数据存储,提供不错的查询效率
- 数据可以永久保存(本质是落盘了的)
- 方便存储和管理数据
- 使用统一的方式操作数据库
- 缺点
- 占用资源(重型武器)——在企业里,在使用数据库的时候往往会把软件安装在服务器上,那么这个机器因为安装了数据库软件,被称为数据库服务器。甚至数据库还搞一个集群,投入几台几十台上百台机器
- 有些数据库需要付费
1.3 数据库与数据库管理系统
数据库(DB):指的是按照一定结构组织的数据集合,由存储数据的文件组成。
数据库管理系统(DBMS):是一款管理软件。
它用于对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过 DBMS
访问数据库中的数据,数据库管理员也通过 DBMS 进行数据库的维护工作。DBMS 允许多
个应用程序或多个用户使用不同的方法,在同一时刻或不同时刻去建立、修改和询问数据
库。
Oracle 公司的 Oracle (收费)和 MySQL(社区版和商业版)
IBM 公司的 DB2
Microsoft 公司的 Access 和 SQL Server
注意:我们通常所说的数据库其实是DBMS,后面不再强调。
1.4 数据库分类
如果按照业务分类,比如存储地位位置的数据库,被称为地理信息数据库,商标数据库
以下按照技术类型划分:
关系型数据库(RDB: Relationship DataBase)
关系型数据库可以使用SQL语言/SQL语句来操作,是创建在关系模型基础上的数据库
关系模型:
典型代表有:MySQL、Oracle、Microsoft SQL Server、Access、PostgreSQL、DB2等。
非关系型数据库(NoSQL)
常规情况我们是不能使用SQL进行操作的,它不是关系模型,比较松散,就好像记事本那些记录差不多吧?
非关系型数据库也被称为 NoSQL 数据库,NoSQL 并不是某个具体数据库,它泛指所有非关
系型数据库。
典型代表有:Hbase、MongoDB、Redis(k/v)、CouchDB等
但Hbase在大数据,尤其是数据开发领域是会涉及到
1.5 数据库排行
Oracle和MySQL是世界市场占比最高的两种数据库
- Oracle:有钱的大企业采用,互联网企业之外使用第一。
- MySQL:互联网高速发展,互联网企业使用第一。
IOE: IBM 小型机 ,Oracle数据库,EMC易安信(美国的存储设备提供商)
有钱的行业金融,石油会去采购
阿里云后来说去IOE
1.6 关系型数据库主要对象
对象示例:以Excel为例对比,sheet就是Excel中的对象
关系型数据库的使用架构(MySQL为例)
使用SQL操作数据库,其实就是操作数据库中的对象,从无到有的流程该怎样?
(此处我们可以对比Excel)
Excel:创建一个Excel文档 —> 创建一个sheet —> 在sheet中进行数据操作
MySQL数据库:创建一个数据库 —> 创建一个数据表 —> 在表中记录数据
- 表
表是包含数据库中所有数据的数据库对象,由行和列组成(二维表格模型,就类似于
Sheet),用于组织和存储数据。
- 字段
表中每一列称为一个字段,字段有自己的属性,如字段类型、字段大小等。其中,字段类
型是字段最重要的属性,它决定了字段能够存储哪种数据。
和Excel不同,这里针对列(字段要求比较严格),该列存储什么类型数据,长度多少都应
该提前(建表的时候)进行定义
- 索引
索引是一个单独的、物理的数据库结构。它是依赖于表建立,在数据库中使用索引,无须
对整个表进行扫描,就可以找到需要的数据。
- 视图
视图是从一张或多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种方
式。
第二节 MySQL数据库
2.1 MySQL数据类型
MySQL数据库中的每一条数据都有其数据类型,主要分为数值型、字符串型和日期型三大类。
- 数值类型
TINYINT - 一个非常小的整数,可以带符号。如果是有符号,它允许的范围是从-128到127。如果是无符号,允许的范围是从0到255。
如果是数值范围没那么大的,可以选用这个,因为占据的内存相对比较小。
INT - 正常大小的整数,可以带符号。如果是有符号的,它允许的范围是从-2147483648到
2147483647。如果是无符号,允许的范围是从0到4294967295。
BIGINT - 一个大的整数,可以带符号。如果有符号,允许范围为-9223372036854775808到
9223372036854775807。如果无符号,允许的范围是从0到18446744073709551615。
FLOAT(M,D) - 不能使用无符号的浮点数字。可以定义显示长度(M)和小数位数(D)。这不是必需的,并且默认为10,2。其中2是小数的位数,10是数字(包括小数)的总数。float(5,2) 999.99
DOUBLE(M,D) - 不能使用无符号的双精度浮点数。可以定义显示长度(M)和小数位数(D)。 这不是必需的,默认为16,4,其中4是小数的位数。
- 字符串类型
短文本:char varchar 比如名字的长度基本都差不多
CHAR(M) - 固定长度的字符串是以长度为1到255之间个字符长度(例如:CHAR(5)),存储右空格填充到指定的长度。 限定长度不是必需的,它会默认为1。 char(5) abcde ab 内存空间会浪
费。当字符基本都是固定的类型,会用到CHAR查询的效率会高些,eg:性别:男/女 char(1)
VARCHAR(M) - 可变长度的字符串是以长度为1到255之间字符数(高版本的MySQL超过255); 例如: VARCHAR(25). 创建VARCHAR类型字段时,必须定义长度。 5 10 12 节省内存空间
abcde
BLOB 或 TEXT - 字段的最大长度是65535个字符。 BLOB是“二进制大对象”,并用来存储大的二进制数据,如图像或其他类型的文件。定义为TEXT文本字段还持有大量的数据; 两者之间的区别是,排序和比较上存储的数据,BLOB大小写敏感,而TEXT字段不区分大小写。不用指定BLOB或TEXT的长度。
- 日期和时间类型
DATE - 以YYYY-MM-DD格式的日期,在1000-01-01和9999-12-31之间。 例如,1973年12月30日将被存储为1973-12-30。
DATETIME - 日期和时间组合以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:00 到
9999-12-31 23:59:59之间。例如,1973年12月30日下午3:30,会被存储为1973-12-30
15:30:00。
TIMESTAMP - 1970年1月1日午夜之间的时间戳,到2037的某个时候。这看起来像前面的
DATETIME格式,无需只是数字之间的连字符; 1973年12月30日下午3点30分将被存储为
19731230153000(YYYYMMDDHHMMSS)。
TIME - 存储时间在HH:MM:SS格式。
YEAR(M) - 以2位或4位数字格式来存储年份。如果长度指定为2(例如YEAR(2)),年份就可以为
1970至2069(70〜69)。如果长度指定为4,年份范围是1901-2155,默认长度为4。
第三节 MySQL的安装和配置
查看
方式一:“计算机”右击,“管理”,“服务和应用程序”,“服务”
方式二:cmd→输入net start MySQL(启动)/net stop MySQL(停止)
(省略)
第四节 SQL语句操作详解
4.1 SQL 通用语法
就是增删改查
C:create 增加
R:retrieve 获取/查询
U:update 更新
D:delete 删除
需要使用client端写/发送SQL语句到Sever端
按照功能,往往分成以下几类:
新建Excel--sheet--填入数据;
新建数据库(DataBase)→新建数据表(Table)→插入数据/更改数据/删除数据
- DDL语句(Date Definition Language 数据定义语言):创建数据库、创建表、修改表结构
——结构性操作,创建或修改数据库/表结构,不涉及具体存储的数据
- DML语句(Data Manipulation Language 数据操作语言):针对Table数据表中数据的增删改,使用DML
- DQL语句(Data Query Language 数据控制语言 ):针对Table数据表中数据的查询操作,使用DQL语句
- DCL语句(Data Control Language 数据控制语言):用于定义用户的访问权限和安全级别
——SQL语句可以单行或者多行书写,以分号结尾;(sqlyog中可以不用分号)
可以使用空格和缩进来增加语句的可读性
MySQL中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写
4.2 注释方式
单行注释:"#" OR "-- "(后面有个空格)
多行注释:
/*
balabala
*/
快捷键:选中需要注释的文本,ctrl+/
4.3 DDL操作数据库
1)创建数据库
create database 数据库名; →创建指定名称的数据库
create database 数据库名 character set 字符集; →创建指定名称的数据库,并且指定字符集(一般都指定utf8)
代码示例:
-- 方式一,直接指定数据库名进行创建
create database db1;
-- 方式二,指定数据库名称,指定数据库的字符集一般指定utf8
create database db1_1 character set utf8;
2)查看/选择数据库
use 数据库; →切换数据库
select database(); →查看当前正在使用的数据库
show database; →查看Mysql中都有哪些数据库
show create database 数据库名; →查看一个数据库的定义信息
代码示例:
-- 切换数据库 从db1 切换到db1_1
use db1_1;
-- 查看当前正在使用的数据库select database();
-- 当有多个数据库的时候,想要查看当前使用的是哪个,用SELECTshow databases;
-- 查看Mysql中有哪些数据库show create database db1_1;
-- 查看一个数据库的定义信息
3)修改数据库
修改数据库字符集
alter database 数据库名 character set 字符集; →数据库的字符集修改操作
代码示例:
ALTER DATABASE db1 CHARACTER SET utf8;
-- 将数据库db1 的字符集修改为utf8SHOW CREATE DATABASE db1;
-- 查看修改后数据库db1的定义信息,发现信息已更改:CREATE DATABASE db1 /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */
4)删除数据库
drop database 数据库名; →从Mysql中永久删除某个数据库
代码示例:
DROP DATABASE db1_1;
4.4 DDL操作数据表
一个数据表中可以n个表,表中又有字段(列),在建表的时候就需要定义好字段(指定字段属性→字段数据类型+字段长度等)
常用的数据类型:
类型 |
描述 |
INT |
整型 |
DOUBLE |
浮点型 |
VARCHAR |
字符串型 |
DATE |
日期类型,给是为2020-11-30,只有年月日,没有时分秒 |
注意:
char类型是固定长度的,适合存储 固定长度的字符串,比如密码、性别一类;
查询效率高,但耗费空间;
varchar类型是可变长度,适合存储 在一定范围内,有长度变化的字符串;
查询效率不高,但节省空间
eg:保存字符串“abc”
x char(10)占用10个字节
y varchar(10)占用3个字节
1)创建表
在MySQL当中,左列选择对应的数据库,如db1,双击选择下面的“表”,之后点击“新建查询”;
在书写语句之前,检查一下上面的位置是否是对应数据库
语法格式:
CREATE TABLE 表名(
字段名称1 字段类型(长度),
字段名称2 字段类型 #注意 最后一列不要加逗号
);
代码示例:
USE db1;
-- 切换到数据库db1-- 创建表1
CREATE TABLE category(cid INT,cname VARCHAR(20));-- 创建表2
CREATE TABLE test1(tid INT,tname DATE
);
2)快速创建一个表结构相同的表(复制表结构)
语法格式:
create table 新表名 like 旧表名;
代码示例:
CREATE TABLE test2 like test1;
-- 创建一个表结构与test1相同的test2表,只复制表结构,不会复制数据DESC test2;
-- 查看表结构
3)查看表
语法格式:
show table; →查看当前数据库中的所有表名
desc 表名; →查看数据表的结构
代码示例:
-- 查看当前数据库中所有的表名
SHOW TABLES;-- 显示当前数据表的结构
DESC category;-- 查看创建表的SQL语句
SHOW CREATE TABLE category;
4)删除表
语法格式:
drop table 表名; →删除表(从数据库中永久删除某一张表)
drop table if exists 表名; →判断表是否存在,存在的话就删除,不存在不执行删除
代码示例:
-- 直接删除test1 表
DROP TABLE test1;-- 先判断 再删除test2表
DROP TABLE IF EXISTS test2;
5)修改表
①表名
语法格式:
rename table 旧表名 to 新表名;
代码示例:
RENAME TABLE category TO category1;
②向表中添加列,关键字ADD
语法格式:
alter table 表名 add 字段名称 字段类型;
代码示例:
-- 分类表添加一个新的字段为 分类描述 cdesc varchar(20)
ALTER TABLE categor ADD cdesc VARCHAR(20);
③修改表中列的 数据类型或长度,关键字MODIFY
语法格式:
alter table 表名 modify 字段名称 字段类型;
代码示例:
-- 对分类表的描述字段进行修改,类型varchar(50)
ALTER TABLE category MODIFY cdesc VARCHAR(50);
④修改列名称,关键字CHANGE
语法格式:
alter table 表名 change 旧列名 新列名 类型(长度);
代码示例:
-- 对分类表中的desc字段进行更换,更换为description varchar(30)
ALTER TABLE category CHANGE cdesc decription VARCHAR(30);
⑤删除列,关键字DROP
语法格式:
alter table 表名 drop 列名;
代码示例:
-- 删除分类表中description这列
ALTER TABLE category DROP description;
4.5 DML操作表中数据
1)插入数据
语法格式:
insert into 表名 (字段名1, 字段名2...) values (字段值1,字段值2...);
——字段名1和字段值1,字段名2和字段值2是一 一对应
代码示例:
①
/* 创建一个学生表
表名:student
表中字段:
学员ID,sid int
姓名,sname varchar(20)
年龄,age int
性别,sex char(1)
地址,address varchar(40)
*/CREATE TABLE student(sid INT,sname VARCHAR(20),age INT,sex CHAR(1),address VARCHAR(40)
);
②向学生表中添加数据,3种方式
A、插入部分/全部字段,将所有字段名都写出来
INSERT INTO student(sid, sname, age, sex, address) VALUES(1, '孙悟空', 20, '男', '花果山');B、插入全部字段,不写字段名
INSERT INTO student VALUES(2, '猪八戒', 20, '男', '高老庄') ;C、插入指定字段的值
INSERT INTO category(cname) VALUES('白骨精');D、多个字段插入,字段后面直接接需要插入数据
create table emp20(eid int primary key auto_increment,ename VARCHAR(20),sex char(1)
);
insert into emp20 values(null,'michael','男');
insert into emp20(ename,sex) values('zhubajie','男');
insert into emp20 values(null,'sunwukong','男'),(null,'白骨精','女'),(null,'蜘蛛精','女')
注意:
1.值与字段必须要对应
2.值的大小必须在字段指定的范围内
3.除了数值类型以外,其他类型都需要使用 单引号包裹
4.插入空值,可以忽略不写字段,或者插入空值NULL
5.如果插入指定字段的值,必须要写上列名
2)更改数据
语法格式1:不带条件的修改
update 表名 set 列名 = 值;
语法格式2:带条件的修改
update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值];
代码示例:
-- 不带条件修改,将所有的性别改为女
-- 全部更改(慎用!!)
UPDATE student SET sex='女';
UPDATE student SET sex='男';-- 带条件更改
UPDATE student SET sex='女' WHERE sid=3;-- 一次修改多个列
UPDATE student SET age='30', address='盘丝洞', sname='白骨精' WHERE sid=3;
3)删除数据
语法格式1:删除所有数据
delete from 表名;
语法格式2:指定条件 删除数据
delete from 表名 where 字段名 = 值;
代码示例:
-- 删除指定数据
DELETE FROM student WHERE sid=1;-- 删除表中所有数据
DELETE FROM student;
注意:
如果要删除表中的所有数据,有两种做法:
1.delete from 表名; 不推荐,有多少记录 就执行多少次删除 效率低
2.truncate table 表名; 推荐,先删除整张表格,然后再重新建一张一模一样的表,效率高
当一个表中条数非常多,又要做删除动作的时候,如果用delete会很慢,那我们可以使用truncate(但是删除后不能恢复)
TRUNCATE TABLE student;
4.6 DQL查询表中数据
1)准备数据
/*
表名 emp
表中字段:
eid 员工id,int
ename 姓名,varchar
sex 性别,char
salary 薪资,double
hire_date 入职时间,date
dept_name 部门名称,varchar
*/-- 代码:
CREATE TABLE emp(eid INT,ename VARCHAR(20),sex CHAR(1),salary DOUBLE,hire_date DATE,dept_name VARCHAR(20)
);#准备数据
-- 添加数据
INSERT INTO emp VALUES(1,'孙悟空','男',7200,'2013-02-04','教学部');
INSERT INTO emp VALUES(2,'猪八戒','',3600,'2010-12-02','教学部');
INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教学部');
INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市场部');
INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市场部');
INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市场部');
INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-09-14','财务部');
INSERT INTO emp VALUES(8,'黄蓉','女',3500,'2011-09-14','财务部');
INSERT INTO emp VALUES(9,'吴承恩','男',20000,'2000-03-14',NULL);
INSERT INTO emp VALUES(10,'孙悟饭','男',10,'2020-03-14','财务部');
INSERT INTO emp VALUES(11,'兔八哥','女',300,'2010-03-14','财务部');
INSERT INTO emp VALUES(12,'露娜','女',40000,'2018-05-09','财务部');
INSERT INTO emp VALUES(13,'刘备','男',6000,'2017-08-06','教学部');
INSERT INTO emp VALUES(14,'刘婵','男',4600,'2018-09-10','幼儿园');
INSERT INTO emp VALUES(15,'孙尚香','女',5000,'2011-04-05','市场部');
INSERT INTO emp VALUES(16,'小乔','女',6000,'2019-08-09','市场部');
INSERT INTO emp VALUES(17,'大乔','女',8000,'2010-09-10','财务部');
2)简单查询
查询所有数据:select * from emp;
查询部分字段数据:select ename, salary from emp;
查询部分字段,指定别名(AS可省略):select ename as '员工姓名',salary '工资' from emp;
给表取别名:select * from emp e where e.ename='黄蓉';
去重选择:select distinct dept_name from emp;
将所有员工的工资 +1000 元进行显示:select ename,salary+1000 from emp;
3)条件查询
语法格式:select 列名 from 表名 where 条件表达式;
比较运算符
运算符 |
说明 |
>、<、<=、 >= 、<> OR != |
大于、小于、大于等于、小于等于、不等于 |
between...and... |
显示在某一区间的值 例如:2000-10000之间:between 2000 and 10000 |
IN(集合) |
集合表示多个值,使用逗号分隔,例如:where sname in('孙悟空','猪八戒') in中的每个数据都会作为一次条件,只要满足条件就会显示 |
WHERE SNAME LIKE'%王%' LIKE '王%' LIKE '%王' |
模糊查询,有王字就可以 开头是王字, 结尾是王字 |
is null |
查询某一列为null的值,注:不能写 = NULL |
逻辑运算符
运算符 |
说明 |
AND & & |
多个条件同时成立 |
Or || |
多个条件任一成立 |
NOT |
不成立,取反 |
模糊查询 通配符
通配符 |
说明 |
% |
表示匹配任意多个字符串 |
_ |
表示匹配 一个字符 |
代码示例:
# 查询含有'精'字的所有员工信息
select * from emp e where e.ename like '%精%';# 查询以'孙'开头的所有员工信息
select * from emp e where e.ename like '孙%';# 查询第二个字为'兔'的所有员工信息
select *from emp e where e.ename like '_兔%';# 查询没有部门的员工信息
select * from emp e where dept_name is null;# 查询有部门的员工信息
select * from emp e where dept_name is not null;
语句汇总图
MySQL-基础(一)相关推荐
- mysql基础之视图
原文:mysql基础之视图 在查询中,我们经常把查询结果 当成临时表来看. View是什么? View可以看一张虚拟表. 是表通过某种运算得到的一个投影. 既然视图只是表的某种查询的投影,所以主要步骤 ...
- MySQL基础day03_数据的导入、导出-MySQL 5.6
MySQL基础day03_数据的导入.导出-MySQL 5.6 注:把数据按照一定格式存放到文件里才能进行数据的导入. 1,数据导入的条件 把文件里的内容保存到数据的表里: 把数据按照一定格式存放文件 ...
- MySQL基础篇:子查询
文章目录 概述 where型子查询 from型子查询 EXISTS型子查询 复制表子查询 概述 在某些情况下,当进行一个查询时,需要的条件或数据要用另一个select语句的结果,这个时候,就要用到** ...
- mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎
MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
- mysql 基础篇(二) 账号、权限管理
mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- linux mysql运维_Linux运维常用的 MySQL基础命令
# MySQL基础命令 ------------- ### 创建MySQL库,授权. >create database mysqldb character set utf8; >grant ...
- mysql基础(全,必看)
MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...
- mysql核心数据库_从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程...
从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程 课程目录 (1) 01MySQL基础_课程引入.avi (2) 02MySQL基础_为什么学习 ...
- MySQL 笔记2 -- MySQL 基础
MySQL 笔记2 – MySQL 基础 MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 课程链接: MySQL 数据库基础入门教程 参考文档: MySQL 官方文档 一.MySQL 简介 ...
最新文章
- MPB:邓晔、王尚等-​环境样本中的细菌总量测定—流式细胞法
- rabbitmq消费固定个数消息_SpringBoot+RabbitMQ (保证消息100%投递成功并被消费)
- 复选框选择变化(可以演化成简单的字符串拼接)
- python 学习笔记day03-python基础、python对象、数字、函数
- liunx 详细常用操作
- DOMJavaScript示例练习
- 简述 JavaScript 作用域与词法分析
- 企业运维几百个重点面试题汇总(老男孩)
- 天天早上慢跑一小时对身体好吗?
- 牵手高通的百度是要拿科大讯飞开刀了?
- 快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
- c盘local文件太大_win7 c盘清理的方法教程
- 计算机行业未来作文,未来的计算机作文
- 安卓psp模拟器哪个好_手机psp模拟器哪个好_安卓PSP模拟器中文官方版下载_66游戏网...
- PHPMywind while 二级嵌套循环
- 王刚日记:在互联网第一次赚到钱
- JavaPOI导出Excel合集——Java导出全内容
- 如何使用docker容器中的redis
- X86 Debuggers And Tools-x86_en-us 下载及使用
- AJAX异步判断注册用户名是否重复