MySQL总结

Posted nwu-edu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL总结相关的知识,希望对你有一定的参考价值。

window删除mysql服务

  • cmd下执行
    sc delete MySQL

登陆登出

  • 登陆:
    mysql -uroot -ppasswd -h host
  • 退出登陆
    mysqladmin -uroot -ppasswd shutdown
    note: 在mysql外面执行

修改管理员root密码

  • 外部命令修改
    mysqladmin -uroot -poldpasswd password newpasswd
  • MySQL内部修改
    update mysql.user set password=password(newpasswd) where user=‘root‘ and host=‘localhost‘;

库操作

  • 创建普通库,此库的字符集和MySQL的字符集一致
    create database dbname
  • 创建特定字符集的字符串,以utf8为例
    create database dbname character set utf8 collate utf8_general_ci
  • 查看数据库支持的字符集
    show variables like ‘%set%‘;
  • 查看所有数据库
    show databases;
  • 使用库
    use databasename;
  • 删除库
    drop database dbname;
  • 查看当前所在库
    select database();
  • 查看创库语句(里面包含库的字符集和引擎信息)
    show create database dbname;

用户操作并授权

  • 创建用户
    create user [email protected] identified by passwd;
  • 删除用户
    drop user [email protected];
  • 查看当前所在的用户
    select user();
  • 授权
    grant priviledges on dbname.* to [email protected];

    note: 权限包括select,insert,update,create,drop,peferences,idex, alter,idex,create temporary tables,lock tables,
    execute,create view, show view,show view,create routine,alter routine, event, trigger

  • 查看用户权限
    show grants for [email protected];
  • 回收用户权限
    revoke privileges on dbname.* from [email protected];
  • 刷新权限
    flush privileges

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

索引

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

  • 给表字段增加索引
    • 建表时添加
    create table tablename(
     id int(4) not null auto_increment,
     name char(20) not null,
     primary key(id),  --主键索引
     key index_name(name) --普通索引`
    );
    • 见表之后增加索引
      alter table tablename add index index_name(name);
    • 利用alter命令修改id列为自增主键索引列
      alter table tablename change id id int primary key auto_increment;
    • 建立普通索对字段前n个字符创建普通索引
      create index index_name on tablename(name);
      create index index_name on tablename(name(3));
      note:对前n个字符创建索引的好处时可以节省内存空间,前提时前n个字符可以确定字段唯一
    • 创建联合索引
      create index index_name on tablename(name, age);

      note:联合索引上的字段可以有自己的索引且条件查询数据时,联合索引采用前缀生效特征,
      即:联合索引有a,b,c,仅a,ab,abc三个查询条件列可以走索引,ac就不可以

    • 创建唯一索引,作用时保证数据的唯一性
      create unique index uni_index_name on tablename(name);
  • 查看索引
    show index from tableG

    note:G让展示内容垂直分布

  • 删除索引
    alter table tablename drop index index_name;
  • 索引创建及生效条件

    索引相当于文章的目录,好处是加快查询速度,但是占用系统空间,更新数据库是还要维护索引数据。
    因此数十行到几百行的小表无需建立索引;写频繁,读少的业务要少建索引

  • 建索引的位置

    索引一定要创建在条件列,而不是select后的选择数据的列。另外要尽量选择在唯一值多的大表上建立索引

  • 表操作
    • 查看所有表
      show tables;
    • 查看创表语句
      show create table tablename;
    • 查看表结构
      desc tablename;
    • 修改表名
      ALTER TABLE tablename RENAME [TO] new_tablename
  • 表DDL
    • 修改表类型
      ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
      eg:alter table person modify name varchar(30) after age;
    • 增加表字段
      ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]
      eg: alter table person add classes varchar(6) after name;
    • 删除表字段
      ALTER TABLE tablename DROP [COLUMN] col_name
      eg: alter table person drop column name;
    • 字段改名
      ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
      eg: alter table tablename chage column age age1 int(4);

note: change可以修改列名称,modify 则不能

  • 表DML

    • INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn);
      INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn), (value1,value2,……valuesn)...;

    • delete from tablename where 条件;
      drop table tablename;
      truncate tablename;

      二者区别:truncate删除表的速度更快,因为truncate时通过物理磁盘删除的;而drop是通过逻辑一行一行删除的。


    • update tablename set field1=value1, field2=value2,... [where condition];


    • slect field1, field2,... from tablename [where condition];
      检查查有没有走索引的方法
      explain sql语句

sql优化

  • Insert使用批量
  • 查询不要使用*, MySQ需要先查出表里的所有字段,再进行匹配
  • 字符串的查询条件要带引号,否则可能不走索引

备份及恢复

  • 备份
    mysqldump -uroot -ppasswd -B dbname > filename.sql

    note: -B备份指定库,使用-B备份文件中多了两行代码(create database dbname; use dbname;)
    -A是备份所有的库

  • 恢复
    mysqldump -uroot -ppasswd dbname < filename.sql





























































以上是关于MySQL总结的主要内容,如果未能解决你的问题,请参考以下文章

BootStrap实用代码片段(持续总结)

回归 | js实用代码片段的封装与总结(持续更新中...)

部分代码片段

linux中怎么查看mysql数据库版本

查看发票组代码后的总结和有感

从mysql的片段中加载ListView