一、安装Mysql
1.1 yum安装
去官网下载yum源
老版本
下载下来 直接 rpm-ivh 可以安装
[root@localhost ~]# yum info mariadb 可安装的软件包 名称 :mariadb 架构 :x86_64 时期 :1 版本 :5.5.68 发布 :1.el7 大小 :8.8 M 源 :base/7/x86_64 简介 : A community developed branch of MySQL 网址 :http://mariadb.org 协议 : GPLv2 with exceptions and LGPLv2 and BSD 描述 : MariaDB is a community developed branch of MySQL. : MariaDB is a multi-user, multi-threaded SQL database server. : It is a client/server implementation consisting of a server daemon (mysqld) : and many different client programs and libraries. The base package : contains the standard MariaDB/MySQL client programs and generic MySQL files. MySQL被Sun收购后,搞了个过渡的6.0版本,没多久就下线了,后来被Oracle收购后,终于迎来了像样的5.6 版本,之后就是5.7、8.0版本。由于6.0版本号已被用过,7.x系列版本专用于NDB Cluster,因而新版本 号从8.0开始。
yum安装5.7版本
[root@localhost ~]#yum install mariadb-server -y [root@localhost ~]#systemctl start mariadb.service [root@localhost ~]#mysql [root@localhost ~]#mysql_secure_installation #初始化设置 先输入密码 一路回车 [root@centos7 ~]#tee /etc/yum.repos.d/mysql.repo <<EOF [mysql] name=mysql5.7 baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/ gpgcheck=0 EOF 清华大学 没有初始密码 5.7.41 [root@centos7 ~]#tee /etc/yum.repos.d/mysql.repo <<EOF [mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/ enabled=1 gpgcheck=0 EOF 官方源 5.7.3. [root@centos7 ~]#cat >/etc/yum.repos.d/mysql.repo <<EOF [mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/ enabled=1 gpgcheck=0 EOF http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/ [root@centos7 ~]#yum -y install mysql-community-server [root@localhost yum.repos.d]# systemctl start mysqld [root@localhost yum.repos.d]# ss -ntap |grep 3306 [root@localhost yum.repos.d]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) [root@centos7 ~]#grep password /var/log/mysqld.log [root@localhost yum.repos.d]# mysql -u root -p'+8saq%5+ljzG' #特殊符号用单引号引起来 mysql> status #必须改密码 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. set global validate_password_policy=0; set global validate_password_length=1; #修改密码策略 mysql> alter user root@'localhost' identified by 'Admin@123'; mysql> \h #查看帮助 应用单多线程: pstree -p cat /proc/线程id/status proc 存在内存中 mysql> system hostname localhost.localdomain #可以直接使用系统命令 #source 可以调用脚本 mysql> \h, help mysql> \u,use mysql> \s,status mysql> \!,system mysql [OPTIONS] [database] 命令格式 -A, --no-auto-rehash 禁止补全 -u, --user= 用户名,默认为root -h, --host= 服务器主机,默认为localhost -p, --passowrd= 用户密码,建议使用-p,默认为空密码 -P, --port= 服务器端口 -S, --socket= 指定连接socket文件路径 -D, --database= 指定默认数据库 -C, --compress 启用压缩 -e "SQL" 执行SQL命令 -V, --version 显示版本 -v --verbose 显示详细信息 --print-defaults 获取程序默认使用的配置 #默认空密码登录 mysql -uroot -p mysql>use mysql #切换数据库 mysql> select database(); #查看当前数据库 mysql>select user(); #查看当前用户 mysql>SELECT User,Host,Password FROM user; mysql>system clear #清屏 mysql> ^DBye #ctrl+d 退出 mysqladmin命令 mysqladmin [OPTIONS] command command... #查看mysql服务是否正常,如果正常提示mysqld is alive mysqladmin -u用户 -p密码 ping mysqladmin -uroot -p123123 ping #关闭mysql服务,但mysqladmin命令无法开启 mysqladmin -uroot -pcentos shutdown #创建数据库testdb mysqladmin -uroot -pcentos create testdb #删除数据库testdb mysqladmin -uroot -pcentos drop testdb #修改root密码 mysqladmin -uroot -pAdmin@123 password ‘zhj' #日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N mysqladmin -uroot -pcentos flush-logs
1.2编译安装mysql
建议:内存4G以上
1.2.1安装相关依赖包
yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
1.2.2 下载并解压缩源码包
tar xf mysql-boost-5.7.20.tar.gz [root@localhost opt]#cd mysql-5.7.20/ cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=boost \ -DWITH_SYSTEMD=1 #############模块解释##################### -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定mysql的安装路径 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件(数据库连接文件)的存储路径 -DSYSCONFDIR=/etc \ #指定配置文件的存储路径 -DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定进程文件的存储路径 -DDEFAULT_CHARSET=utf8 \ #指定默认使用的字符集编码,如utf8 -DDEFAULT_COLLATION=utf8_general_ci \ #指定默认使用的字符集校对规则 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装INNOBASE存储引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装ARCHIVE存储引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装BLACKHOLE存储引擎 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ #安装FEDERATED存储引擎 -DMYSQL_DATADIR=/usr/local/mysql/data \ #指定数据库文件的存储路径 -DWITH_BOOST=boost \ #指定boost的路径, -DWITH_SYSTEMD=1 #生成便于systemctl管理的文件 #############模块解释##################### make make install 4、数据库目录进行权限调整 [root@localhost mysql-5.7.20]#chown -R mysql:mysql /usr/local/mysql/ 5、调整配置文件 [root@localhost mysql-5.7.20]#vi /etc/my.cnf [client] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES NO_ENGINE_SUBSTITUTION 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常 STRICT_TRANS_TABLES 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 NO_AUTO_CREATE_USER 禁止:GRANT创建密码为空的用户 NO_AUTO_VALUE_ON_ZERO mysql中的自增长列可以从o开始。默认情况下自增长列是从1开始的,如果你插入值为0的数据会报错 NO_ZERO_IN_DATE mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告 ERROR_FOR_DIVISION_BY_ZERO 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。默认情况下数据被零除时MysQL返回NULL IPES_AS_CONCAT 将"||"视为字符串的连接操作符而非或运算符,这和oracle数据库是一样的, ANSI QUOTES 启用ANSI QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符 [root@localhost mysql-5.7.20]#chown mysql:mysql /etc/my.cnf #改变属主 属组 6、设置环境变量 echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile echo 'export PATH' >> /etc/profile source /etc/profile 7、初始化数据库 cd /usr/local/mysql/ bin/mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ 8、数据库开启自启、 关闭、状态 systemctl enable mysqld systemctl start mysqld systemctl stop mysqld systemctl status mysqld netstat -anpt | grep 3306 9、设置Mysql密码 mysqladmin -u root -p password #开始初始密码为空 回车即可 然后输入新密码 update mysql.user set authentication_string=password('123123') where user='root' and host='127.0.0.1' or host='localhost'; update mysql.user set authentication_string=password('newpassword') where user='root' and host='127.0.0.1' or host='localhost'; 10、登录数据库 mysql -u root -p #################提示:############# 如果出错,执行rm -f CMakeCache.txt ###################################
1.3二进制安装
1.3.1准备用户
groupadd -r -g 306 mysql useradd -r -g 306 -u 306 -d /data/mysql mysql
1.3.2准备数据目录,建议使用逻辑卷
#可选做,后面的脚本mysql_install_db可自动生成此目录 mkdir /data/mysql chown mysql:mysql /data/mysq
1.3.3准备二进制程序
tar xf mysql-VERSION-linux-x86_64.tar.gz -C /usr/local cd /usr/local ln -sv mysql-VERSION mysql chown -R root:root /usr/local/mysql/
1.3.4准备配置文件
cd /usr/local/mysql cp -b support-files/my-default.cnf /etc/my.cnf vim /etc/my.cnf #mysql语句块中添加以下三个选项 [mysqld] datadir = /data/mysql innodb_file_per_table = on #在mariadb5.5以上版的是默认值,可不加 skip_name_resolve = on #禁止主机名解析,建议使用 可选项
1.3.5 创建数据库文件
cd /usr/local/mysql/ ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql ll /data/mysql/
1.3.6 准备服务脚本,并启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld service mysqld start #如果有对应的service 文件可以执行下面 cp /usr/local/mysql/support-files/systemd/mariadb.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl enable --now mariadb
1.3.7 PATH路径
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh . /etc/profile.d/mysql.sh
1.38 安全初始化
/usr/local/mysql/bin/mysql_secure_installation
二、数据库的基本概念
内核的作用:调用硬件资源
2.1 使用数据库的必要性
使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据。
数据库具有以下特点: 1)可以结构化存储大量的数据信息,方便用户进行有效的检索和访问; 2)可以有效地保持数据信息的一致性、完整性,降低数据冗余; 3)可以满足应用的共享和安全方面的要求。
数据库技术是计算机科学的核心技术之一,具有完备的理论基础。 对数据库基本概念的掌握,将有助于对数据库的理解。
2.2 数据库基本概念
2.2.1 数据(Data)
描述事物的符号记录
包括数字,文字、图形、图像、声音、档案记录等
以“记录”形式按统一的格式进行存储
2.2.2 表
将不同的记录组织在一起
用来存储具体数据
2.2.3 数据库
表的集合,是存储数据的仓库
以一定的组织方式存储的相互有关的数据集合
2.2.4 数据库管理系统(DBMS)
数据库管理系统是实现对数据库资源有效组织、 管理和存取的系统软件。
功能:
数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式 及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语 义的错误数据被输入或输出。
数据操纵功能:包括数据查询统计和数据更新两个方面。
数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控 制、数据库内部维护等功能。
通信功能:DBMS 与其他软件系统之间的通信,如 Access 能与其他 Office 组件进行 数据交换。
2.2.5 数据库系统
是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成。 用户可以通过DBMS或应用程序操作数据库。
2.3 数据库的分类
数据库分两大类,关系型数据库和非关系型数据库。
2.3.1 关系数据库 SQL
操作命令:SQL语句
存储结构:二维表格
存储的数据:结构化数据
每一行称为一条记录,用来描述一个对象的信息;
每一列称为一个字段,用来描述对象的一个属性。
2.3.2 非关系数据库 NoSQL
存储结构:键值对 文档 索引 时间序列 缓存型 Redis Memcached 文档型 MongoDB 索引型 ElasticSearch 时序型 Prometheus InfluxDB
2.4 主键
主键(Primary Key)是一个数据库表中的一列或一组列,用于确保数据的唯一性和数据行的唯一标识。 在表中,主键的值是唯一的。
主键具有以下特点: 1)唯一性:主键列中的值必须是唯一的,每一行的主键值都不相同。 2)非空性:主键列的值不能为空,也就是不允许为空值或NULL值。 3)唯一标识性:主键用于识别和区分表中的不同行数据,通过主键可以快速定位和访问表中的数据。
主键还可以用于建立表与表之间的关系,实现数据的关联和连接操作。
三、Mysql数据库简介
3.1Mysql简介
一款深受欢迎的开源关系型数据库 Oracle旗下的产品 遵守GPL协议,可以免费使用与修改
2.2 MySQL的特点 ● 性能卓越、服务稳定 ● 开源、无版权限制、成本低 ● 多线程、多用户 ● 基于C/S(客户端/服务器)架构 ● 安全可靠
3.3 常用的数据类型
int :整型 无符号[0,232-1],有符号[-231,2^31-1] float :单精度浮点 4字节32位 double :双精度浮点 8字节64位 char :固定长度的字符类型 varchar :可变长度的字符类型 text :文本 image :图片 decimal(5,2) :5个有效长度数字,小数点后面有2位
3.4 SQL语句
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
SQL语言分类: DDL:数据定义语言,用于创建数据库对象,如库、表、索引等 DML:数据操纵语言,用于对表中的数据进行管理 DQL:数据查询语言,用于从数据表中查找符合条件的数据记录 DCL:数据控制语言,用于设置或者更改数据库用户或角色权限
3.5 MySQL的约束特性(六大约束)
primary key(主键约束) 字段的值不能重复,且不能为null,一个表只能有一个唯一键
uniq key(唯一性约束) 字段的值不能重复,可以为null,一个表可以有多个唯一键
not null (非空约束) 字段的值不能为null
default (默认值约束) 字段的值如果没有设置,则使用默认值自动填充
auto_increment (自增约束) 字段的值如果没有设置,默认会从1开始,每次自动递增1,要求自增字段必须设置主键
int(N) zerofill (零填充)
四、MySQL数据库基本操作
4.1 登录MySQL数据库
表名和库名区分大小写
命令不区分大小写
mysqladmin -u root -p password "123123" #设置密码 mysql -u root -p #登录
4.2 查看数据库结构
1)查看当前服务器中的数据库
show databases; #大小写不区分,分号“;”表示结束
2)查看数据库中包含的表
方法一 USE 数据库名; show tables;
方法二 show tables from 数据库名;
3)查看表的结构(字段)
方法一
use 数据库名; describe 表名; 或者 desc 表名;
方法二
#不切换数据库 desc 库名.表名;
4.3 创建及删除数据库和数据表
1)创建新的数据库
create database <数据库名>;
#举个例子 create database byyb;
2)创建新的表
create table 表名 (字段1 数据类型,字段2 数据类型[,...][,primary key (主键名)]); #主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
#举个例子 create database byyb; use byyb; create table by1 ( id int not null,name char(10) not null,score decimal (5,2),passwd char(48) default ' ' , primary key (id)); desc by1;
3)删除指定的数据表
drop table [数据库名.]表名; #如不用USE进入库中,则需加上数据库名
4)删除指定的数据库
4.4 管理数据表中的数据记录
1)向数据表中插入新的数据记录
insert into表名(字段1,字段2[,...]) values(字段1的值,字段2的值,...);
#举个例子 insert cxk(id,name,score,passwd) values(1,'zhangsan',70.5,password('123456')); insert cxk(id,name,score,passwd) values(2,'lisi',80,123456); insert cxk(id,name,score,passwd) values(3,'lisi',60,123456); #使用 password('123456'),查询数据记录时,密码字串以加密形式显示 #若不使用password( ),查询时以明文显示
2)查询数据记录
select 字段名1,字段名2[,...] from 表名 [where 条件表达式];
#举个例子 select * from wsc; #查询所有数据记录 select name,gender,mobile from wsc where id=2; #查询特定的数据记录
#扩展用法1 select name from wsc\G#以列表方式竖向显示
#扩展用法2 select * from wsc limit 2; #只显示头2行 select * from wsc limit 2,3; #显示第2行后的前3行
3)修改、更新数据表中的数据记录
update 表名 set 字段名1=字段值1[,字段名2=字段值2] [where 条件表达式];
#举个例子 update wsc set mobile=110 where id=3; update wsc set name='林俊杰' where mobile=10086;
4)在数据表中删除指定的数据记录
delete from 表名 [where 条件表达式];
#举个例子 delete from wsc where id=3;
4.5 修改表名和表结构
alter table 旧表名 rename 新表名;
#举个例子 alter table wsc rename byy1;
2)扩展表结构(增加字段)
alter table 表名 add 新字段 数据类型 [字段属性];
#举个例子 alter table byy1 add address varchar(50) default '地址不详'; #default '地址不详':表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用
3)修改字段(列)名,添加唯一键
alter table 表名 change 旧字段 新字段 数据类型 [字段属性];
#举个例子 alter table byy1 change mobile phone varchar(10) unique key; #CHANGE可修改字段名、数据类型、约束等所有项。
4)删除字段
alter table 表名 drop 字段名;
#举个例子 alter table byy1 drop address;
五、索引
索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储引擎实现。
5.1 索引的概念
索引是一个排序的列表,包含索引字段的值和其相对应的行数据所在的物理地址。
5.2 索引的实现原理
没有索引的情况下,要查询某行数据时,需要先扫描全表,再来定位某行数据,对于表数据很多的情况下,效率较低。
有了索引后,会先通过查找条件的字段值找到其索引对应的行数据的物理地址,然后根据物理地址访问相应的行数据。
5.3 索引的作用
加快表的查询速度,还可以对字段排序。
优点 1)设置了合适的索引之后,数据库利用各种快速定位技术,能够极大地加快查询速度,这是创建索引的最主要的原因;
2)当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度,避免排序和使用临时表;
3)可以降低数据库的IO成本(减少io次数),并且索引还可以降低数据库的排序成本,将随机I/O转为顺序I/O; 4)通过创建唯一性索引,可以保证数据表中每一行数据的唯一性;
5)可以加快表与表之间的连接;
6)在使用分组和排序时,减少分组和排序的时间;
7)建立索引在搜索和恢复数据库中的数据时能显著提高性能。
缺点
1)会额外占用磁盘空间;
2)更新包含索引的表会花费更多时间,效率会更慢。
5.4 创建索引的依据
1)表中的记录行数较多时,一般超过300行的表建议要有索引;
2)建议在表中的主键字段、外键字段、多表连接使用的公共关键字段、唯一性较好的字段、不经常更新的字段、经常出现在 where、group by、order by 子语句的字段、小字段上面创建索引;
3)不建议在唯一性较差的字段、更新太频繁的字段、大文本字段上面创建索引。
5.5 索引的分类和创建
create table test (id int,name varchar(10),address varchar(10),age int );
5.5.1 普通索引 index
最基本的索引类型,没有唯一性之类的限制。
直接创建索引:
create index 索引名 on 表名 (字段); #索引名建议以“_index”结尾 #举个例子 #创建 create index address_index on test (address); #查看 show create table info \G;
修改表方式创建:
alter table 表名 add index 索引名 (字段);
#举个例子 alter table test add index name_index(name);
创建表的时候指定索引:
create table 表名 ( 字段1 数据类型,字段2 数据类型[,...],index 索引名 (列名));
#举个例子 create table test2 (id int ,idd int,name varchar(10),index id_index(id));
5.5.2 唯一索引 unique
与普通索引类似,但区别是唯一索引列的每个值都唯一。
唯一索引允许有空值(注意和主键不同)。
如果是用组合索引创建,则列值的组合必须唯一。
添加唯一键将自动创建唯一索引。
直接创建唯一索引:
create unique index 索引名 on 表名 (字段);
#举个例子 create unique index name_index on students(name);
修改表方式创建:
语法 alter table 表名 add unique 索引名 (字段);
#举个例子 alter table teachers add unique age_index(age);
创建表的时候指定:
create table 表名 (字段1 数据类型,字段2 数据类型[,...],unique 索引名 (列名));
5.5.3 主键索引 primary key
主键索引是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。
一个表只能有一个主键,不允许有空值。
添加主键将自动创建主键索引。
创建表的时候指定:
create table 表名 ([...],primary key (列名));
#举个例子 create table test2 (id int,pid int,primary key(id));
修改表的方式创建:
alter table 表名 add primary key (字段);
#举个例子 alter table test add primary key(id);
5.5.4 组合索引(单列索引与多列索引)
可以是单列上创建的索引,也可以是在多列上创建的索引。
需要满足最左原则,因为 select 语句的 where 条件是依次从左往右执行的,所以在使用 select 语句查询时 where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。
组合索引 create index 索引名 on 表名 (字段1, 字段2, 字段3,....); alter table 表名 add index 索引名 (字段1, 字段2, 字段3,....); create unique index 索引名 on 表名 (字段1, 字段2, 字段3,....); alter table 表名 add unique 索引名 (字段1, 字段2, 字段3,....); select ... from 表名 where 字段1=XX and 字段2=XX and 字段3=XX #用 and 做条件逻辑运算符时,要创建组合索引且要满足最左原则 #用 or 做条件逻辑运算符时,所有字段都要单独创建单列索引
5.5.5 全文索引 fulltext
适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。
全文索引可以在 CHAR、VARCHAR 或者 TEXT 类型的列上创建。
直接创建索引:
create fulltext index 索引名 on 表名 (字段);
#举个例子 create fulltext index name_index on teachers (name);
修改表的方式创建:
alter table 表名 add fulltext 索引名 (字段);
#举个例子 alter table test2 add fulltext name_index (name);
创建表的时候指定索引:
create table 表名 (字段1 数据类型[,...],fulltext 索引名 (列名)); #数据类型可以为 char、varchar 或者 text
使用全文索引查询:
select * from 表名 where match(列名) against('查询内容'); insert into member values(1,'zhangsan',123123,123123,'nanjing','this is member!'); insert into member values(2,'lisi',456456,456456,'beijing','this is vip!'); insert into member values(3,'wangwu',789789,78979,'shanghai','this is vip member!'); select * from member where match(remark) against('vip');
支持模糊查询 select ... from 表名 where match(字段) against('查询内容');
5.6 查看索引
show create table 表名; show index from 表名; show keys from 表名;
各字段的含义如下
字段 | 含义 |
---|---|
Table | 表的名称 |
Non_unique | 如果索引不能包括重复词,则为 0;如果可以,则为 1 |
Key_name | 索引的名称 |
Seq_in_index | 索引中的列序号,从 1 开始 |
Column_name | 列名称 |
Collation | 列以什么方式存储在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(无分类) |
Cardinality | 索引中唯一值数目的估计值 |
Sub_part | 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为 NULL |
Packed | 指示关键字如何被压缩。如果没有被压缩,则为 NULL |
Null | 如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO |
Index_type | 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE) |
Comment | 备注 |
5.7 删除索引
直接删除索引 drop index 索引名 on 表名; 修改表方式删除索引 alter table 表名 drop index 索引名;
删除主键索引 alter table 表名 drop primary key;