Mysql数据库的权限、索引基本操作

数据库的关闭方法:

1、优雅的关闭数据库的方法:
mysqladmin -uroot -p123456 shutdown

2、脚本关闭:
/etc/init.d/mysqld stop

3、使用kill信号的方法(最好不用)
kill -USR2 ‘cat path/pid‘

history不记录历史命令

HISTCONTROL=ignorespace (敲命令的时候加一个空格,可以不记录)

善于使用mysql的help

Mysql设置密码的方法:
mysqladmin -uroot password ‘123456‘

mysqladmin -uroot password ‘123456‘ -S /data/3306/mysql.sock(多实例的密码设置)

Mysql修改密码:

mysqladmin -uroot -p123456 password ‘template‘

mysqladmin -uroot -p123456 password ‘template‘ -S /data/3306/mysql.sock(多实例修改密码)

使用sql语句修改密码:

mysql>UPDATE mysql.user SET password=PASSWORD("123456") WHERE user=‘root‘;

set方法:
set password=password(‘123456‘)

Mysql密码忘记找回步骤:

1、先停止数据库
/etc/init.d/mysqld stop

2、使用--skip-grant-tables启动mysql,忽略授权登录验证

[[email protected] ~]# mysqld_safe --skip-grant-tables --user=mysql &

空密码登录:
[[email protected] ~]# mysql

修改密码:
mysql>update mysql.user set password=password("123456") where user=‘root‘ and host=‘localhost‘;

刷新权限:
mysql>flush privileges;

关闭mysql
[[email protected] ~]# mysqladmin -uroot -p123456 shutdown

重新启动mysql
[[email protected] ~]# /etc/init.d/mysqld start

[[email protected] ~]# mysql -uroot -p123456

SQL Structured Query Language SQL结构化查询语言

数据库简单操作:

创建数据库时指定字符集:
mysql> create database template_gbk default character set gbk

mysql> show create database template_gbk

mysql> show databases;

mysql> select database(); 查看当前连接的数据库

mysql> select now(); 查看当前时间

mysql> select user(); 查看当前用户

mysql> select version(); 查看当前版本

mysql> show tables;查看表

删除Mysql系统多余账号

drop user ‘template‘@‘localhost‘; 删除用户
如果drop删除不了(一般是特殊字符或大写)可以使用下面的方式删除
mysql> delete from mysql.user where user=‘root‘ and host=‘localhost‘;
mysql> flush privileges;

创建Mysql用户及赋予用户授权
mysql> grant all on test.* to ‘template‘@‘localhost‘ identified by ‘123456‘;

mysql> flush privileges;

mysql> show grants for ‘template‘@‘localhost‘; 查看权限

create 和grant 配合方法

mysql> create user ‘template‘@‘localhost‘ identefied by ‘123456‘;

mysql> grant all on dbname.* to ‘username‘@‘localhost‘; #赋予权限

#授权局域网内主机远程连接数据库

%匹配法
mysql> grant all on *.* to ‘someuser‘@‘%‘ identified by ‘123456‘;

子网掩码匹配法
mysql> grant all on *.* to ‘someuser‘@‘10.0.0.0/255.255.255.0‘ identified by ‘123456‘;

mysql -uroot -p123456 -h 10.0.0.7 -P 3306 远程连接

revoke insert on test.* from ‘template‘@‘localhost‘; 收回权限

mysql> show grants for [email protected]‘localhost‘; 查看权限

1 SELECT
2 INSERT
3 UPDATE
4 DELETE
5 CREATE
6 DROP
7 REFERENCES
8 INDEX
9 ALTER
10 CREATE TEMPORARY TABLES
11 LOCK TABLES
12 EXECUTE
13 CREATE VIEW
14 SHOW VIEW
15 CREATE ROUTINE
16 ALTER ROUTINE
17 EVENT
18 TRIGGER

mysql> select * from mysql.user;

insert(增),delete(删),update(改),select(查)

生成数据库表后,要收回create 和drop授权

mysql> create database template; 创建数据库

mysql> show create database template;查看建库信息
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| template | CREATE DATABASE `template` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

建表:
create table <表名>(
<字段名 1><类型 1>,
...
<字段名 n><类型 n>);

建表语句:

create table student(

id int(4) not null,

name char(20) not null,

age tinyint(2) not null default ‘0‘,

dept varchar(16) default null

);

mysql> show create table student\G
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(4) NOT NULL,
`name` char(20) NOT NULL,
`age` tinyint(2) NOT NULL DEFAULT ‘0‘,
`dept` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> desc student; 查看表结构
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(4) | NO | | NULL | |
| name | char(20) | NO | | NULL | |
| age | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+

mysql> show columns from student; 查看表结构

索引就像是书的目录,如果在字段上建立了索引,那么以索引列为查询条件时可以加快查询数据的速度。

创建主键索引

查询数据库,按主键索引是最快的,每个表只能有一个主键列,但是可以有多个普通索引列。主键列要求列的所有内容必须唯一,而索引列不要求内容必须唯一

mysql> create table student(
id int(4) not null AUTO_INCREMENT, #自增
name char(20) not null,
age tinyint(2) not null default ‘0‘,
dept varchar(16) default null,
primary key(id),
KEY index_name(name) #创建索引
);

建表后通过alter命令增加主键索引(不建议这样干)
mysql> alter table student change id id int primary key auto_increment;

mysql> alter table student drop index index_name; 删除索引

mysql> drop index index_dept on student; 删除索引

mysql> alter table student add index index_name(name); 添加普通索引

mysql> create index index_dept on student(dept(8)); 指定前n个字符创建索引

mysql> show index from student\G 查看索引

mysql> create index idn_name_dept on student(name,dept); 创建联合索引,允许列上有自己的索引

mysql> create index ind_name_dept on student(name(8),dept(10)); 根据多个列前n个字符创建联合索引

mysql> create unique index uni_ind_name on student(name); 创建唯一索引

问题1:既然索引可以加快查询速度,那么就给所有的列建立索引吧?

解答:因为索引不但占用空间,更新数据库时还需要维护索引数据,因此,索引试一把双刃剑,并不是越多越好,例如:数十到几百行的小表上无需建立索引,写频繁,读少的业务要少建立索引

问题2:到底在哪些列上创建索引呢?

解答:select user,host from mysql.user where host=...,索引一定要创建在where后的条件列,而不是select后的选择数据的列,另外,要尽量选择在唯一值多的大表上建立索引。

基本条件:

1、要在表的列上创建索引

2、索引会加快查询速度,但是会影响更新的速度,因为要维护索引

3、索引不是越多越好,要在频繁查询的where后的条件列上创建索引

4、小表或唯一值极少的列上不建索引,要在大表以及不同的内容多的列上创建索引

help alter table

原文地址:https://www.cnblogs.com/Template/p/9357690.html

时间: 2024-08-29 21:35:56

Mysql数据库的权限、索引基本操作的相关文章

MySQL数据库远程访问权限如何打开(两种方法)

MySQL数据库远程访问权限如何打开(两种方法) 下载GPL版本安装 MySQL Community Edition(GPL) Community (GPL) Downloads 在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户没有远程访问的权限. 下面介绍两种方法,解决这一问题. 1.改表法 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "

Mysql 数据库的权限问题

之前一直对Mysql数据库的权限没太理解 root用户具有最高的权限,也就是超级用户,root用户可以看到数据库中的所有的内容,而其它用户只能对经过root用户授权过的数据库进行操作,如果想在其它用户中创建新的数据库       而对root用户不可见,是不行的,而将其它用户的权限设置成: grant all on *.* to 'my_user'@'localhost'; 这时,其它用户的权限相当于root 用户,没有实际意义. revoke all on *.* from 'my_user'

talend 连接mysql数据库没有权限

使用talend连接一个mysql数据库,提示没有权限,最后发现mysql服务器的配置中只监听了127.0.0.1的端口,拒绝非本地的请求.通过将/etc/mysql/my.cnf中的bind_address项注释掉,/etc/init.d/mysql restart重启mysql服务器后,talend可以正常的访问该数据库: [email protected]:~/extract/extract_mysql# vi /etc/mysql/my.cnf # # The MySQL databas

mysql数据库中的索引有那些、有什么用

本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为peo

MySQL数据库中的索引(一)——索引实现原理

今天我们来探讨一下数据库中一个很重要的概念:索引. MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,即索引是一种数据结构. 我们知道,数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化.最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary searc

MySQL数据库中的索引(二)——索引的使用,最左前缀原则

上文中,我们了解了MySQL不同引擎下索引的实现原理,在本文我们将继续探讨一下索引的使用以及优化. 创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间. 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能.

MySQL数据库篇之索引原理与慢查询优化之二

接上篇 7??  正确使用索引 一.索引未命中 并不是说我们创建了索引就一定会加快查询速度,若想利用索引达到预想的提高查询速度的效果, 我们在添加索引时,必须遵循以下问题: #1 范围问题,或者说条件不明确,条件中出现这些符号或关键字:>.>=.<.<=.!= .between...and....like. #2 尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是

【转】MYSQL数据库四种索引类型的简单使用--MYSQL组合索引“最左前缀”原则

MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度:如果是BLOB和TEXT类型,必须指定 length,下同. 修改表结构 ALTER mytable ADD INDEX

MySQL数据库root权限丢失解决方案

一天不小心把ROOT的权限改到最小了(只能登录,什么都做不了),这可急死我了.重装的话太麻烦,而且里面有很多的用户,一个个重新弄不知道到什么时候. 后来我想了一个办法,先把当前服务器的MySQL服务停止,把MySQL DATa目录下的mysql目录改名为mysql_OLD,到另一个服务器下把mysql目录下的/data/mysql目录复制到对应目录,然后启动MySQL服务,使用另一服务器下的root 的帐号登录到PHPmyadmin,进去之后可以看到有全部的操作权限了,但这个数据表中没有当前服务