文章目录
- MYSQL入门
- 一、MYSQL概述
- 1. 数据库相关概念
- 1.1 数据库,数据库管理系统与SQL
- 1.2 数据库种类以及主流数据库管理系统排名
- 1.3 MySQL数据库安装
- 1.4 数据模型
- 二、SQL
- 2.1 通用语法与注释
- 2.2 SQL分类
- 2.3 DDL
- 2.3.1 数据库操作
- 2.3.2 表操作
- 2.3.2.1 表操作-查询创建
- 2.3.2.2 表操作-数据类型
- 2.3.2.3 表操作-修改
- 2.3.2.4 表操作-删除
- 2.4 图形化界面
MYSQL入门
一、MYSQL概述
1. 数据库相关概念
1.1 数据库,数据库管理系统与SQL
名称 | 简称 | 作用 |
---|---|---|
数据库 | DataBase(DB) | 存储数据的仓库,数据有组织的存储 |
数据库管理系统 | DataBase Managerment System(DBMS) | 操纵和管理数据库的大型软件 |
SQL | Structured Query Language(SQL) | 操作关系型数据库的编程语言,定义了一套操作数据型数据库统一标准。 |
1.2 数据库种类以及主流数据库管理系统排名
数据库的种类
数据库是用于存储、管理和组织数据的系统。根据数据的组织方式和存储结构,数据库可以分为多种类型。不同的数据库类型适用于不同的应用场景和需求,选择适合自己的数据库类型取决于具体的项目和数据管理需求。常见的数据库种类及介绍如下:
- 关系型数据库(Relational Database):关系型数据库建立在关系模型的基础上,由多张相互连接的二维的表格(表)来组织数据,数据以行和列的形式存储,并通过关系(关联)来连接不同表中的数据。常见的关系型数据库包括Oracle、MySQL、SQL Server、PostgreSQL等。
- 非关系型数据库(NoSQL Database):非关系型数据库是一种非结构化的数据存储系统,不使用表格来组织数据,而是使用不同的数据模型,如文档型、键值对、列族和图形等。常见的非关系型数据库有MongoDB、Redis、Cassandra、Neo4j等。
- 面向对象数据库(Object-oriented Database):面向对象数据库是为面向对象程序设计而设计的数据库,可以存储对象、类、继承和多态等概念。它们将数据视为对象,并支持面向对象编程的特性。常见的面向对象数据库有db4o、Versant等。
- 层次型数据库(Hierarchical Database):层次型数据库使用层次结构来组织和管理数据,其中每个数据记录都有一个父节点和零个或多个子节点。这种数据库类型适用于树状结构数据,例如文件系统。IBM的IMS(Information Management System)就是一个层次型数据库系统。
- 网状型数据库(Network Database):网状型数据库使用网状结构来组织数据,其中数据记录可以有多个父节点和多个子节点。这种数据库类型适用于复杂的数据关系,例如计算机网络拓扑结构。CODASYL是一个著名的网状型数据库系统。
- 内存数据库(In-Memory Database):内存数据库将数据存储在主内存中,而不是传统的磁盘存储。这使得读写操作更快,适用于需要高性能和低延迟的应用场景。常见的内存数据库有Redis、Memcached、SAP HANA等。
MySQL数据库属于关系型数据库,在前期学习时,我会把这种数据库参照其定义可以将一个数据库想象成Excel里的一个sheet页,可以有多张表,也即可以有多个sheet页。这种关系型数据库的特点如下:
- 使用表存储数据,格式统一,便于维护
- 使用SQL语言操作,标准统一,使用方便
目前主流的关系型数据库管理系统的市场占有率排名如下:
- Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。
- MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。
这些数据库管理系统可能不一样,但是最后操作时,都是使用SQL语言来进行统一操作的,SQL语言是操作关系型数据库的统一标准。
1.3 MySQL数据库安装
个人使用Ubuntu作为开发环境,此处以Ubuntu版安装举例:
下载:
sudo apt-get install mysql-server mysql-client
查看是否安装成功:
修改密码:
打开配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
相同位置输入:
skip-grant-tables
重启mysql:
service mysql stop
service mysql restart
进入系统后:
use mysql;
update user set authentication_string='123' where user='root';
flush privileges;
重启mysql后正常登陆即可;
1.4 数据模型
MySQL是关系型数据库,是基于二维表进行数据存储的,具体的结构图下:
- 我们可以通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库。
- 可以使用SQL语句,通过数据库管理系统操作数据库,以及操作数据库中的表结构及数据。
- 一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包
含多行记录。
二、SQL
2.1 通用语法与注释
通用语法:
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
注释:
- 单行注释:-- 注释内容 或 # 注释内容
- 多行注释:/* 注释内容 */
2.2 SQL分类
SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。
分类 | 全程 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Date Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改查 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户,控制数据库的访问权限 |
2.3 DDL
Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) 。
2.3.1 数据库操作
查询所有数据库:
show databases ;
查询当前数据库:
select database() ;
创建数据库:
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ;
实验: 创建一个数据库mydatabase
create database if not exists mydatabase default charset utf8mb4;
顺便提一下:不能创建同名数据库:
删除数据库
drop database [ if exists ] 数据库名 ;
切换数据库
use 数据库名;
2.3.2 表操作
2.3.2.1 表操作-查询创建
查询当前数据库所有表
show tables;
查看特定表结构
desc 表名;
查看指定表的建表语句
show create table 表名;
这条指令用来查看某一张表的建表语句,而有部分参数我们在创建表的时候,并未指定也会查询到,因为这部分是数据库的默认值,如:存储引擎、字符集等。
创建表结构
CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ],
字段2 字段2类型 [COMMENT 字段2注释 ],
字段3 字段3类型 [COMMENT 字段3注释 ],
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
注意: […] 内为可选参数,最后一个字段后面没有逗号
实验:
现有一张表结构如下,使用sql语句建表:
id | name | age | gender |
---|---|---|---|
1 | 令狐冲 | 28 | 男 |
2 | 风清扬 | 68 | 男 |
3 | 东方不败 | 32 | 男 |
create table xajh(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
)comment '笑傲江湖人物表';
2.3.2.2 表操作-数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
1). 数值类型
类型 | 大小(byte) | 有符号范围 | 无符号范围 | 描述 |
---|---|---|---|---|
TINYINT | 1 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3 | (–223,223-1) | (0,16777215) | 大整数值 |
INT/INTEGER | 4 | (–231,231-1) | (0,4294967295) | 大整数值 |
BIGINT | 8 | (-263,263-1) | (0,2^64-1) | 极大整数值 |
FLOAT | 4 | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8 | (-1.7976931348623157E+308,1.7976931348623157E+308) | 0 和(2.2250738585072014E-308,1.7976931348623157E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度)的值(100.0,精度为整个数值的长度4,标度为小数部分1) | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
如:
1). 年龄字段 – 不会出现负数, 而且人的年龄不会太大
age tinyint unsigned
2). 分数 – 总分100分, 最多出现一位小数
score double(4,1)(100.0,精度4,标度1)
2). 字符串类型
类型 | 大小(bytes) | 描述 |
---|---|---|
CHAR | 0-255 | 定长字符串(需要指定长度) |
VARCHAR | 0-65535 | 变长字符串(需要指定长度) |
TINYBLOB | 0-255 | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 | 短文本字符串 |
BLOB | 0-65535 | 二进制形式的长文本数据 |
TEXT | 0-65535 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 | 极大文本数据 |
char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和
字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性
能会更高些。
如:
1). 用户名 username ------> 长度不定, 最长不会超过50
username varchar(50)
2). 性别 gender ---------> 存储值, 不是男,就是女
gender char(1)
3). 手机号 phone --------> 固定长度为11
phone char(11)
3). 日期时间类型
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 |
TIME | 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:01 至2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
如:
1). 生日字段 birthday
birthday date
2). 创建时间 createtime
createtime datetime
示例:
设计一张员工信息表,要求如下:
- 编号(纯数字)
- 员工工号 (字符串类型,长度不超过10位)
- 员工姓名(字符串类型,长度不超过10位)
- 性别(男/女,存储一个汉字)
- 年龄(正常人年龄,不可能存储负数)
- 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
- 入职时间(取值年月日即可)
对应的建表语句:
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 '员工表';
2.3.2.3 表操作-修改
1). 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 1 注释 ] [ 约束 ];
2). 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
3). 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 1 注释 ] [ 约束 ];
示例:将emp表的nickname字段修改为username,类型为varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';
4).删除字段
ALTER TABLE 表名 DROP 字段名;
案例:将emp表的字段username删除
ALTER TABLE emp DROP username;
5). 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
案例:将emp表的表名修改为 employee
ALTER TABLE emp RENAME TO employee;
2.3.2.4 表操作-删除
1).删除表
DROP TABLE [ IF EXISTS ] 表名;
2).删除指定表,并重新创建表(清空表中所有数据)
TRUNCATE TABLE 表名;
注意: 在删除表的时候,表中的全部数据也都会被删除。
类比于excel,将第一种方式理解成删除某个sheet页,第二种方式理解成情况表中所有数据但并不删除此sheet页
2.4 图形化界面
安装DataGrip: