• 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,忽略授权登录验证
    
    [root@localhost ~]# mysqld_safe --skip-grant-tables --user=mysql &
    
    空密码登录:
    [root@localhost ~]# mysql
    
    修改密码:
    mysql>update mysql.user set password=password("123456") where user='root' and host='localhost';
    
    刷新权限:
    mysql>flush privileges;
    
    关闭mysql
    [root@localhost ~]# mysqladmin -uroot -p123456 shutdown
    
    重新启动mysql
    [root@localhost ~]# /etc/init.d/mysqld start
    
    [root@localhost ~]# 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 oldboy@'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 studentG
    *************************** 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 studentG 查看索引
    
    
    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
    
     
  • 相关阅读:
    sql日期操作
    用户活跃状态模型
    R基于Bayes理论实现中文人员特性的性别判定
    python的一点小常识
    [工作技能]SVN
    北大计算所词性标注集简表
    c++ boost 汉字和模式串混用的例子
    SVN文本文件报二进制属性的问题
    我的R代码备份
    FaceBook Twitter实习生简历求内推
  • 原文地址:https://www.cnblogs.com/Template/p/9357690.html
Copyright © 2020-2023  润新知