标题: MySQL基础教程(MySQL安装/索引/视图)
时间: 2020-02-22发布,2020-02-22修改
CentOs查询MySQL旧版本:
rpm -qa | grep -i mysql
卸载:
rpm -e 上述命令查的名称 --nodeps
q表示查询query,a表示all,-e 卸载rpm包,-i 安装rpm包,-u 升级rpm包
安装服务端与客户端(*表示安装包文件名):
rpm -ivh *.rpm
SRT中进入sftp
Alt+P进去,put加本地文件地址即可上传
常用指令
#启动/停止/查询状态
service mysql start/stop/status
#安装好后会生成初始密码 查询
cat /root/.mysql_secret
#登录mysql
mysql -uroot -p (再粘贴密码回车)
登录成功后修改密码
set PASSWORD=PASSWORD('123456'); --修改密码
quit --退出
授权远程访问,MySQL安装好后默认只本地访问,需要命令授权
grant all privileges on *.* to 'root' @'%' identified by '123456';
flush privileges;
如果远程连接还失败就尝试关闭防火墙
#查询防火墙状态
service iptables status
#关闭防火墙
service iptables stop
chkconfig iptables off(关闭开机自启:所谓的永久关闭防火墙)
查询版本号(Mysql中不区分大小写)
SELECT VERSION(), CURRENT_DATE;
注意:
多个字段之间可以用逗号分隔,多行组成一条语句结束以分号结束
sql语句写了一半,又不想执行可以在语句末尾加上'\c'
当然还有其他后缀:
\g的作用和MySQL中的分号”;"是一样;
\G的作用是讲查找到的内容结构旋转90度,变成纵向结构;
可进行简单计算
SELECT SIN(PI()/4), (4+1)*5;
多条语句比较短,可以写在一行
SELECT VERSION(); SELECT NOW();
一种数据结构,若没有数据会由上至下检索,主要目的快速查询
优势:查询快
劣势:占储存,增删改时不仅建立数据库还要建立索引
MySQL常用索引为BTREE,以B+树(多路索引树 非二叉树)组织结构索引。MySql索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。
单列索引:一个索引仅包含一列,不过一个表可以多个索引
唯一索引:索引值必须唯一,但允许空值
复合索引:即一个索引包含多列
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type] ON tbl_name(index_col_name,...)
index_col_name : column_name[(length)][ASC | DESC]
[UNIQUE|FULLTEXT|SPATIAL]内容可不写,[USING index_type]不写默认是按BTREE+
例如我们为实验案例创建索引
create database demo_01 default charset=utf8mb4;
use demo_01;
CREATE TABLE `city` (
`city_id` int(11) NOT NULL AUTO_INCREMENT,
`city_name` varchar(50) NOT NULL,
`country_id` int(11) NOT NULL,
PRIMARY KEY (`city_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `country` (
`country_id` int(11) NOT NULL AUTO_INCREMENT,
`country_name` varchar(100) NOT NULL,PRIMARY KEY (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `city` (`city_id`, `city_name`, `country_id`) values(1,'西安',1);
insert into `city` (`city_id`, `city_name`, `country_id`) values(2,'NewYork',2);
insert into `city` (`city_id`, `city_name`, `country_id`) values(3,'北京',1);
insert into `city` (`city_id`, `city_name`, `country_id`) values(4,'上海',1);
insert into `country` (`country_id`, `country_name`) values(1,'China');
insert into `country` (`country_id`, `country_name`) values(2,'America');
insert into `country` (`country_id`, `country_name`) values(3,'Japan');
insert into `country` (`country_id`, `country_name`) values(4,'UK');
创建/查看/删除索引
create index idx_city_name on city(city_name);
show index from city; --查看索引
drop index idx_city_name on city; --删除索引
创建成功后会看到两个索引,因为创建表时候主键也生成一个索引
ALTER命令创建索引
1). alter table tb_name add primary key(column_list);
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL
2). alter table tb_name add unique index_name(column_list);
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)
3). alter table tb_name add index index_name(column_list);
添加普通索引, 索引值可以出现多次。
4). alter table tb_name add fulltext index_name(column_list);
该语句指定了索引为FULLTEXT, 用于全文索引
最后一点针对于符合索引,如
创建复合索引:
CREATE INDEX idx_name_email_status ON tb_seller(NAME,email,STATUS);
就相当于
对name 创建索引 ;
对name , email 创建了索引 ;
对name , email, status 创建了索引 ;
最左索引,只要索引第一个字段,后面就都有索引
视图(View)是一种虚拟存在的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
个人理解,视图就是来源于物理表数据而创建的虚拟表,操作跟一般表一样。
简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。(就像提前做好了复杂查询的虚拟表或逻辑表,用户只需操作这个虚拟表即可,不用关系数据到底来源哪个物理表表)
安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。(例如 对开发者暴露视图不暴露原表,只给开发者他们能看的字段,隐私字段给隐藏掉)
数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。(原表列只要不修改删除列就对视图没影响了)
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
REPLACE为修改,view_name为视图名,AS后接视图sql
示例,创建city_country_view视图 , 执行如下SQL :
create or replace view city_country_view
as
select t.*,c.country_name from country c , city t where c.country_id = t.country_id;
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
选项 :
WITH [CASCADED | LOCAL] CHECK OPTION 决定了是否允许更新数据使记录不再满足视图的条件。
LOCAL : 只要满足本视图的条件就可以更新。
CASCADED : 必须满足所有针对该视图的所有视图的条件才可以更新。 默认值.
虽然视图可以更新,更新也会更新来源表数据,但不建议更新。
从 MySQL 5.1 版本开始,使用 SHOW TABLES 命令的时候不仅显示表的名字,同时也会显示视图的名字,而不存在单独显示视图的 SHOW VIEWS 命令。同样SHOW TABLE STATUS 命令,不但可以显示表的信息,同时也可以显示视图的信息。例如
SHOW TABLE STATUS like 'city_country_view'\G;
查视图定义(创建信息)
show create view city_country_view \G
DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT 1 | CASCADE]
例如
DROP VIEW city_country_view ;
友链一下:https://cway.top
『回复列表(3|隐藏机器人聊天)』