Mysql基础知识--概述和索引
一、Mysql概述
MySQL原来隶属于MySQL公司,总部位于瑞典
2008.1.16MySQL被SUN公司收购
2009年SUN公司被Oracle公司收购
常见的软件版本
- GA(general Availability) :官方推崇广泛使用的版本
- RC(release Candidate):候选版本,最接近正式版的版本
- Aipha和Bean都属于测试版本,其中Alpha是指内侧版本,Bean指公测版本
MySQL的官方网站网址(http://mysql.com)
TyPical:默认的安装类型
Complete:完全的安装类型
Custome:自定义的安装类型
Detailed Configuration :详细配置
Standard Configuration:标准配置
经常会修改的MySQL配置文件
- dafault-character-set:客户端字符集
- character-set-server:服务端字符集
- port:客户端和服务端的端口号
- default-storage-engin:MySQL软件的存储引擎
注意:如果修改了MySQL的配置文件。则必须重新启动MySQL服务,修改的内容才能生效
在DOS窗口中,输入net start命令,可以查看Windows系统已经启动的服务
二、MySQL数据库基本操作
(一)数据库和数据库对象
数据库是存储数据库对象的容器
数据库可以分为系统数据库和用户数据库
1.系统数据库
安装完MySQL服务器后,会附带的一些数据库
- information_schema:主要存储系统中的一些数据库对象信息。如用户表信息,列信息,权限信息,字符集信息,和分区信息等。
- performance_schema:主要存储数据库服务器性能参数。
- mysql:主要存储系统的用户权限信息
- test:该数据库为MySQL数据库管理系统自动创建的测试数据库,任何用户都可以使用。
2.用户数据库
用户根据实际需求创建的数据库
(二)数据库相关操作
1.创建数据库的语法形式
CREATE DATABASE DATABASE_NAME;
首字母不能是$和数字
不允许是MQSlq保留字
不允许有空格和特殊字符
2.查看数据库
SHOW DATABASES;
3.选择数据库
USE DATABASE_NAME;
4.删除数据库
DROP DATABASE DATABASE_NAME;
三、MySQL数据库中存储引擎和数据类型
(一)认识存储引擎
1.MySQL所支持的存储引擎
#方法一
show engines;
#方法二
SHOW VARIABLES LIKE 'HAVE%'
2.操作默认存储引擎
- 查询默认存储引擎
#查询默认存储引擎
SHOW VARIABLES LIKE 'stronge_engine%'
- 选择存储引擎
- MYISAM存储引擎:由于该存储引擎不支持事务,也不支持外键,所以访问速度比较快,因此对事务完整性没有要求并以访问为主的应用适合用该存储引擎
- InnoDB存储引擎:支持具有提交、回滚和崩溃恢复能力的事务安装,所以比MYISAM存储引擎占用更多的磁盘空间,因此需要频繁的更新删除操作,同时还对事务的完整性要求比较高,需要实现并发控制,此时适合使用该存储 引擎
- MEMORY存储引擎:该存储引擎使用内存来存储数据,因此该存储引擎的数据访问速度快,但是安全没有保障。如果应用中设计数据较小,需要进行快速访问,适合使用该存储引擎。
(二)数据类型
1.整数类型
整数类型 | TINYINT | SMALLINT | MEDIUMINT | INT和INTEGER | BIGINT |
---|---|---|---|---|---|
字节 | 1 | 2 | 3 | 4 | 8 |
2.浮点数类型、定点数类型和位类型
- 浮点数类型
浮点数类型 | FLOAT | DOUBLE |
---|---|---|
字节 | 4 | 8 |
- 定点数类型
定点数类型 | 字节 |
---|---|
DEC(M,D)和(DECIMAL(M,D) | m+2 |
FLOAT和DOUBLE数据类型存储数据时存储的是近似值,而DECIMAL存储的是字符串,因此提供了更高的精度,在需要表示金额等货币类型是有选择DECIMAL数据类型。
- 位类型
位类型 | 字节 |
---|---|
BIT(M) | 1~8 |
3.日期和时间类型
日期和时间类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年的某个时刻 |
TIME | 3 | -835:59:59 | 835:59:59 |
YEAR | 1 | 1901 | 2155 |
4.字符串类型
- char系列字符串类型
char系列字符串类型 | 字节 | 描述 |
---|---|---|
CHAR(M) | M | M为0~255之间的整数 |
varchar(M) | m | m为0~65535之间的整数 |
- text系列的字符串类型
TEXT系列字符串类型 | 字节 | 描述 |
---|---|---|
TINYTEXT | 0~255 | 值的长度为+2个字节 |
TEXT | 0~65535 | 值的长度为+2个字节 |
MEDIUMTEXT | 0~167772150 | 值的长度为+3个字节 |
LONGTEXT | 0~4294967295 | 值的长度为+4个字节 |
- BINARY系列字符串类型
BINARY系列字符串类型 | 字节 | 描述 |
---|---|---|
BINARY(M) | M | 允许长度为0~M |
VARBINARY(M) | M | 允许长度为0~M |
- BLOB系列字符串类型
四、表的操作
表是包含数据库中所有数据的数据库对象
1.表的基本概念
表中的数据库对象包括列、索引、触发器
- 列(Columns):也成属性列,在具体创建表时,必须指定列的名字和数据类型
- 索引(Indexes):是指根据指定的数据库表列建立起来的顺序,提供了快速访问数据的途径且可监督表的数据,使其索引所指向的列中的数据不重复。
- 触发器(Triggers):是指用户定义的事务的集合,当对一个表中的数据插入、更新或删除时,这组命令就会自动的执行,可以用来确保数据的完整性和安全性。
2.创建表
CREATE TABLE TABLE_NAME(
属性名 数据类型,
属性名 数据类型,
属性名 数据类型,
属性名 数据类型
)
3.查看表结构
#查看表定义
DESCRIBE TABLE_NAME;
#查看表详细定义
DESCRIBE CREATE TABLE TABLE_NAME;
4.删除表
DROP TABLE TABLE_NAME;
5.修改表
#修改表名
ALTER TABLE old_table_name RENAME [TO] new_table_name
#在表的最后一个位置增加字段
ALTER TABLE table_name ADD 属性名 属性类型
#在表的最后一个位置增加字段
ALTER TABLE table_name ADD 属性名 属性类型 FIRST;
#在表的指定字段之后增加字段
ALTER TABLE table_name ADD 属性名 属性类型 AFTER 属性名
6.删除字段
#删除字段
ALTER TABLE table_name DROP 属性名
7.修改字段
#修改字段的数据类型
ALTER TABLE table_name MODIFY 属性名 数据类型
#修改字段的名字
ALTER TABLE table_name CHANGE 旧属性名 新属性名 旧数据类型
#同时修改字段的名字和属性
ALTER TABLE table_name CHANGE 旧属性名 新属性名 新数据类型
#修改字段顺序
ALTER TABLE table_name MODIFY 属性名1 数据类型 FIRST|AFTER 属性名2
8.操作表的约束
- 完整性约束
完整性约束关键字 | 含义 |
---|---|
NOT NULL | 约束字段的值不能为空 |
DEFAULT | 设置字段的默认值 |
UNIQUE KEY(UK) | 约束字段的值是唯一的 |
PRIMARY KEY (PK) | 约束字段为表的主键,可以作为该表记录的唯一标识 |
AUTO_INCREMENT | 约束字段的值为自动增加 |
FOREIGN KEY (FK) | 约束字段为表的外键 |
约束可分为:单列约束,每个约束只约束一列数据;多列约束,每个约束可以约束多列数据
设置非空约束(NOT NULL,NK)
CREATE TABLE table_name(
属性名 数据类型 NOT NULL,
....
);
设置字段的默认值(DEFAULT)
CREATE TABLE table_name(
属性名 数据类型 DEFAULT 默认值,
....
);
- 设置唯一约束(UNIQUE,UK)
CREATE TABLE table_name(
属性名 数据类型 UNIQUE I,
....
);
- 设置主键约束(PRIMARY KEY,PK)
#单字段主键
CREATE TABLE table_name(
属性名 数据类型 PRIMARY KEY,
....
);
#多字段主键
CREATE TABLE table_name(
属性名 数据类型
....
[CONSTRAINT 约束名] PRIMARY KEY (属性名,属性名。。。)
);
- 设置字段值自动增加(AUTO_INCREMENT)
CREATE TABLE table_name(
属性名 数据类型 AUTO_INCRMENT,
....
);
- 设置外键约束(FOREIGN KEY ,FK)
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型
....
CONSTRANT 外键约束名 FOREIGN KEY(属性名 1) REFERENCES 表名 (属性名2)
);
五、索引的操作
(一)索引的概述
1.索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构(B-树或哈希表)中,通过MySQL可以快速有效的查找出与键值相关联的字段。
2.根据索引的存储类型,可以将索引分为B型树索引和哈希索引
3.InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型索引,默认为前者索引
- MySQL支持6中索引:普通索引、唯一索引、全文索引、单列索引、多列索引、空间索引
1.适合创建索引的情况
- 经常被查询的字段,即在WHERE子句中出现的字段
- 在分组的字段,即在GROUP BY子句中出现的字段
- 存在依赖关系的字表和父表之间联合查询,即主键或外键字段。
- 设置唯一约束的字段
2.不适合创建索引的情况
- 在查询中很少被使用的字段
- 拥有许多重复值的字段
(二)创建和查看索引
1.创建和查看普通索引
普通索引:就是在创建索引时,不附加任何条件,该类型的索引可以创建在任何数据类型的字段上。
- 创建表时创建普通索引
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
... ...
属性名 数据类型,
INDEX|KEY [索引名](属性名 1 [(长度)] [ASC|DESC]
)
INDEX或KEY参数用来指定字段为索引
索引名参与用来指定所创建索引名
’属性名 1‘参数用来指定索引所关联的字段的名称,
长度用来指定索引的长度
MySQL所支持的存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。
- 在已经存在的表上创建索引
CREATE INDEX 索引名
ON 表名 (属性名 [(长度)] [ASC|DESC])
- 通过sql语句ALTER TABLE创建普通索引
ALTER TABLE table_name
ADD INDEX|KEY 索引名 (属性名 [(长度)] [ASC|DESC])
2.创建和查看唯一索引
唯一索引:在创建索引时,限制索引的之必须是唯一的。通过该类型的索引可以更快速的查询某条记录、
在MySQL中,根据创建索引的方式,可以分为自动索引和手动索引两种。
自动索引:在数据库表里设置完整性约束时,该表会被系统自动创建索引
手动索引:手动在表上创建索引
当设置表中的某个字段设置主键或是唯一完整性约束时,系统就会自动创建关联该字段的唯一索引。
- 创建表时创建唯一索引
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
... ...
属性名 数据类型,
UNIQUE INDEX|KEY [索引名](属性名 1 [(长度)] [ASC|DESC]
)
- 在已经存在的表上创建唯一索引
CREATE UNIQUE INDEX 索引名
ON 表名 (属性名 [(长度)] [ASC|DESC])
- 通过SQL语句ALTER TABLE创建唯一索引
ALTER TABLE table_name
ADD UNIQUE INDEX|KEY 索引名 (属性名 [(长度)] [ASC|DESC])
3.创建和查看全文索引
全文索引主要关联在数据类型为CHAR/VARCHAR和TEXT的字段上,以便能够更加快速的查询数据量较大的字符串类型的字段。
只能在MyISAM的数据库表上创建全文索引
在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,则区分大小写的搜索方式执行。
- 创建表时创建全文索引
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
... ...
属性名 数据类型,
FULLTEXT INDEX|KEY [索引名](属性名 1 [(长度)] [ASC|DESC]
)
- 在已经存在的表上创建全文索引
CREATE FULLTEXT INDEX 索引名
ON 表名 (属性名 [(长度)] [ASC|DESC])
- 通过SQL语句ALTER TABLE创建全文索引
ALTER TABLE table_name
ADD FULLTEXT INDEX|KEY 索引名 (属性名 [(长度)] [ASC|DESC])
4.创建和查看多列索引
多列索引:在创建索引时,所关联的字段不是一个字段,虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段红的第一个字段,多列索引才会被使用
- 创建表时创建多列索引
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
... ...
属性名 数据类型,
INDEX|KEY [索引名](属性名 1 [(长度)] [ASC|DESC],
... ...
(属性名 1 [(长度)] [ASC|DESC]
)
- 在已经存在的表上创建多列索引
CREATE INDEX 索引名
ON 表名 (属性名 [(长度)] [ASC|DESC])
... ...
(属性名 [(长度)] [ASC|DESC])
- 通过SQL语句ALTER TABLE 创建多列索引
ALTER TABLE table_name
ADD FULLTEXT INDEX|KEY 索引名 (属性名 [(长度)] [ASC|DESC])
... ...
(属性名 [(长度)] [ASC|DESC])
(三)、删除索引
删除索引:就是删除表中已经创建的索引,是由于这些索引会降低表的更新速度,影响数据库的性能。
1.删除索引的语法形式
DROP INDEX index_name
ON table_name
Mysql基础知识--概述和索引的更多相关文章
- mysql基础知识语法汇总整理(一)
mysql基础知识语法汇总整理(二) 连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...
- Magento 架构基础知识概述
Megento 架构基础知识概述 Magento整合了面向对象的基于PHP的应用程序的核心架构原则.这些一般原则的综合讨论既有在线的,也有印刷形式.以下讨论主要关注这些主题如何直接应用于Magento ...
- mysql基础知识语法汇总整理(二)
mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...
- MySQL 基础知识梳理
MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...
- MySQL基础知识:创建MySQL数据库和表
虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...
- MySQL基础(四)——索引
MySQL基础(四)--索引
- mysql基础知识大全
前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里作简单概括性的介绍,具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续会慢慢补充完善. 数据库和数据库软件 数据库是 ...
- MySQL基础知识:启动管理和账号管理
整理.记录常用的MySQL基础知识:时间久了,很多就忘记了. 操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL. ...
- MySQL基础知识:Character Set和Collation
A character set is a set of symbols and encodings. A collation is a set of rules for comparing chara ...
随机推荐
- K-消亡的质数-(简单数学)
https://ac.nowcoder.com/acm/contest/3346/K 题意:判断一个素数p是不是某两个数的立方差. 刚看到这道题一时半会都没有什么思路,看了题解恍然大悟,太久没碰数学或 ...
- Python中xlrd和xlwt模块使用方法----》》数据库数据导出(之一)
xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. (1) 打开excel文件并获取所有sheet >>> import xlrd >>& ...
- Python实现网络多人聊天室 - Windows
项目名称:多人聊天室项目结构: client.py server.py settings.py项目思路:服务端接收客户端连接,客户端发送信息给服务端,服务端将信息发送给所有客户端.项目实现:主进程负责 ...
- Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) F. Bits And Pieces sosdp
F. Bits And Pieces 题面 You are given an array
- [日常] NOI前划水日记
NOI前划水日记 开坑记录一下每天的效率有多低 5.24 早上被春哥安排了一场NEERC(不过怎么是qualification round啊) 省队势力都跑去参加THU/PKU夏令营了...剩下四个D ...
- 小白专场-堆中的路径-c语言实现
目录 一.题意理解 二.堆的表示及其操作 三.主程序 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/ ...
- H5 背景图片自适应屏幕问题解决办法
今天也是偶然遇到这个问题的,平成很少用到关于css的内容,就在网上找了很多个方法,最后总结以下几种很实用的方法 方法1: <style> body{ background:url(beij ...
- PHP自动加载-spl_autoload_register
spl_autoload_register 自动加载spl : Standard PHP library (标准PHP库) 首先来了解 __autoload print.class.php <? ...
- Shell基本运算符之算术、关系运算符
Shell 运算符 =============================摘自菜鸟教程================================= Shell和其他编程语言一样,支持多种运算 ...
- vue项目使用Ueditor富文本编辑器总结
我使用的是前端大佬封装的vue-ueditor-wrap插件,结合ueditor本身的压缩包开发的. 1.下载vue-ueditor-wrap: npm install vue-ueditor-wra ...