zoukankan      html  css  js  c++  java
  • Day053--MySQL

    MySQL安装和基本管理https://www.cnblogs.com/majj/p/9160383.html

    管理员模式运行cmd

    打开终端,输入mysqld,打开服务端.

    打开终端,输入mysql,打开客户端.

    # 每行命令以 ; 结束
    delimiter % # 修改结束符为%
    

    基础知识

    将MySQL添加到Windows服务中

    #添加到Windows服务:   
    
    mysqld --install 
    
    
    #移除Windows服务:  
    
    mysqld --remove
    

    注册成服务之后, 以后再启动和关闭MySQL服务时, 仅需执行如下命令:

    #启动MySQL服务
    net start mysql
    
    #关闭MySQL服务
    net stop mysql
    

    登录

    输入: select user(); #查看当前登录的账号

    当前登录的默认账号为ODBC@localhost

    exit退出

    如果想切换到root账号登录, 执行命令

    mysql -uroot -p

    在查看当前用户

    select user();

    管理员为root(拥有最高权限,管理员账号),密码为空,以无密码的方式登录了管理员账号,是非常危险的一件事情,所以要为管理员账号设置密码

    windows 下登录设置密码

    设置管理员root账号密码为123

    mysqladmin -uroot -p password "123" #在登陆之前,设置初始密码 由于密码为空,因此-p可以不用. 此处要用" ", 用' '容易出问题

    update mysql.user set password = password("123") where User="root"; #先登录, 之后给root用户设置密码. 如果直接用password="123"则显示明文密码,用password=password("123")则使用md5加密.

    不用管这个警告

    之后再登录账号, 不输入密码则会报错.

    如果想将原始密码123,设置新密码为456

    mysqladmin -uroot -p"123" password"456"修改mysql密码,因为已经有密码了,所以必须输入原密码才能设置新密码, 注意p和password不要有空格

    依次执行如下操作:

    mysql -uroot -p456
    select user()
    

    忘记密码--破解密码

    跳过授权方式, 直接登录.

    1. 以管理员身份打开cmd

    2. 停掉mysql服务端
      net stop mysql
      MySQL 服务正在停止.
      MySQL 服务已成功停止。

    3. 执行如下命令跳过授权表

      跳过授权表

      mysqld --skip-grant-tables
      2018-06-09 17:12:38 0 [Warning] Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path.
      2018-06-09 17:12:38 0 [Note] mysqld (mysqld 5.6.40) starting as process 6052 ...4.

    4. 再次查看

    5. 现在可以任意地更改密码, 执行如下命令

      update mysql.user set password = password("123") where User="root";

    6. 刷新权限, 执行命令
      flush privileges;

    7. 退出mysql. 执行命令: exit

    8. 让用户去加载权限, 以管理员身份进入cmd, 查看当前mysql进程
      tasklist |findstr mysql #查看当前mysql的进程, 要在控制台直接查,不要进mysql客户端

    9. 结束当前的进程, 执行如下命令

      taskkill /F /PID 6052 #杀死当前的进程PID

    10. 再次执行如下操作, 还原

    统一字符编码

    进入mysql客户端, 执行s

    为了统一字符编码, 请执行如下操作:

    (1) my.ini 文件是mysql的配置文件,

    在D:mysql-5.6.42-winx64文件西创建my.ini文件  (配置文件)
    

    (2) 将如下代码拷贝保存

    [mysqld]
    # 设置mysql的安装目录 **后面的路径一定是安装sql的目录(自己电脑的)**
    basedir=C:mysql-5.7.22-winx64mysql-5.7.22-winx64
    # 设置mysql数据库的数据的存放目录,必须是data
    datadir=C:mysql-5.7.22-winx64mysql-5.7.22-winx64data
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    # mysql端口
    port=3306
    # 字符集
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    

    (3) 以管理员身份重启服务, 执行如下命令

    net stop mysql
    
    net start mysql
    

    (4) 在cmd中输入mysql进入mysql环境, 执行s, 显示如下信息, 表示成功.

    基本的mysql语句

    操作文件夹(库)

    # 进入客户端后
    create database db1 charset utf8;
    

    # 查看当前创建的数据库
    show create database db1;
    # 查看所有的数据库
    show databases;
    

    alter database db1 charset gbk;
    

    drop database db1;
    

    操作文件(表)

    use db1; #切换文件夹
    select database(); #查看当前所在文件夹
    

    create table t1(id int, name char);
    

    #查看当前的这张t1表
    show create table t1;
    
    # 查看所有的表
    show tables;
    
    # 查看表的详细信息
    desc t1;
    

    # modify修改的意思
    alter table t1 modify name char(6);
    # 改变name为大写的NAME
    alter table t1 change name NAME char(7);
    

    删除

    #删除表
    drop table t1;
    

    操作文件内容(记录)

    # 插入一条数据,规定id,name数据leilei
    insert t1(id,name) values(1,"mjj01"),(2,"mjj02"),(3,"mjj03");
    

    select id from db1.t1;
    select id,name from db1.t1;
    select * from db1.t1;
    

    update db1.t1 set name='zhangsan';
    update db1.t1 set name='alex' where id=2;
    

    delete from t1;   # 清空所有
    delete from t1 where id=2;
    

    库的操作

    一. 系统数据库

    执行如下命令, 查看系统库

    show databases;
    

    information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等 performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象

    mysql: 授权库,主要存储系统用户的权限信息

    test: MySQL数据库系统自动创建的测试数据库

    二. 创建数据库

    1. 求救语法:

      help create database;

    2. 创建数据库语法

      CREATE DATABASE 数据库名 charset utf8;

    3. 数据库命名规则

      可以由字母、数字、下划线、@、#、$
      区分大小写
      唯一性
      不能使用关键字如 create select
      不能单独使用数字
      最长128位

      基本上跟python或者js的命名规则一样

    三. 数据库相关操作

    #查看数据库
    show databases;
    #查看当前库
    show create database db1;
    #查看所在的库
    select database();
    
    #选择数据库
    use 数据库名
    
    #删除数据库
    DROP DATABASE 数据库名;
    # 修改数据库
    alter database db1 charset utf8;
    

    四.了解内容

    SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:

    1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER

    2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT

    3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

    五.表的操作

    1. mysql支持的存储引擎

      mysql> show enginesG;# 查看所有支持的引擎
      mysql> show variables like 'storage_engine%'; # 查看正在使用的存储引擎

    • InnoDB 存储引擎
    • MyISAM 存储引擎
    • NDB 存储引擎
    • Memory 储存引擎
    • Infobright 存储引擎
    • NTSE 存储引擎
    • BLACKHOLE 黑洞存储引擎

    指定表类型/存储引擎

    create table t1(id int)engine=innodb;# 默认不写就是innodb
    

    小练习:

    创建四张表,分别使用innodb,myisam,memory,blackhole存储引擎,进行插入数据测试

    create table t1(id int)engine=innodb;
    create table t2(id int)engine=myisam;
    create table t3(id int)engine=memory;
    create table t4(id int)engine=blackhole;
    

    查看data文件下db1数据库中的文件:

    #.frm是存储数据表的框架结构
    
    # .ibd是mysql数据文件 
    
    #.MYD是MyISAM表的数据文件的扩展名
    
    #.MYI是MyISAM表的索引的扩展名
    
    #发现后两种存储引擎只有表结构,无数据
    
    #memory,在重启mysql或者重启机器后,表内数据清空
    #blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录
    
    1. 创建表

      语法:

      create table 表名(
      字段名1 类型[(宽度) 约束条件],
      字段名2 类型[(宽度) 约束条件],
      字段名3 类型[(宽度) 约束条件]
      );

      注意:

      1. 在同一张表中,字段名是不能相同
      2. 宽度和约束条件可选
      3. 字段名和类型是必须的
    2. 创建数据库

      create database db2 charset utf8;

    3. 使用数据库

      use db2;

    4. 创建a1表

      create table a1(
        id int,
        name varchar(50),
        age int(3)
      );

    5. 插入表的记录
      insert into a1 values
      (1,'mjj',18),
      (2,'wusir',28);

    6. 查询表的数据和结构
      (1)查询a1表中的存储数据

      mysql> select * from a1;
      +------+-------+------+
      | id | name | age |
      +------+-------+------+
      | 1 | mjj | 18 |
      | 2 | wusir | 28 |
      +------+-------+------+
      rows in set (0.02 sec)
      mysql>

      (2)查看a1表的结构

      mysql> desc a1;
      +-------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +-------+-------------+------+-----+---------+-------+
      | id | int(11) | YES | | NULL | |
      | name | varchar(50) | YES | | NULL | |
      | age | int(3) | YES | | NULL | |
      +-------+-------------+------+-----+---------+-------+
      rows in set (0.16 sec)

      (3)查看表的详细结构

      mysql> show create table a1G;
      *************************** 1. row ***************************
      Table: a1
      Create Table: CREATE TABLE a1 (
      id int(11) DEFAULT NULL,
      name varchar(50) DEFAULT NULL,
      age int(3) DEFAULT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8
      row in set (0.00 sec)

    7. 复制表
      (1)新创建一个数据库db3
      mysql> create database db3 charset utf8;
      Query OK, 1 row affected (0.00 sec)
      (2)使用db3
      mysql> use db3;
      Database changed
      #这是上个创建的db2数据库中的a1表
      mysql> select * from db2.a1;
      +------+-------+------+
      | id | name | age |
      +------+-------+------+
      | 1 | mjj | 18 |
      | 2 | wusir | 28 |
      +------+-------+------+
      (3)复制db2.a1的表结构和记录
      # 这就是复制表的操作(既复制了表结构,又复制了记录)
      mysql> create table b1 select * from db2.a1;
      Query OK, 2 rows affected (0.03 sec)
      (4)查看db3.b1中的数据和表结构
      #再去查看db3文件夹下的b1表发现 跟db2文件下的a1表数据一样
      mysql> select * from db3.b1;
      +------+-------+------+
      | id | name | age |
      +------+-------+------+
      | 1 | mjj | 18 |
      | 2 | wusir | 28 |
      +------+-------+------+
      rows in set (0.00 sec)

      ps1:如果只要表结构,不要记录

      在db2数据库下新创建一个b2表,给一个where条件,条件要求不成立,条件为false,只拷贝表结构

      mysql> create table b2 select * from db2.a1 where 1>5;
      Query OK, 0 rows affected (0.05 sec)
      Records: 0 Duplicates: 0 Warnings: 0

    查看表结构:

    # 查看表结构
    mysql> desc b2;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(50) | YES  |     | NULL    |       |
    | age   | int(3)      | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    rows in set (0.02 sec)
    
    #查看表结构中的数据,发现是空数据
    mysql> select * from b2;
    Empty set (0.00 sec)
    

    ps2:还有一种做法,使用like(只拷贝表结构,不拷贝记录)

    mysql> create table b3 like db2.a1;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> desc b3;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | YES  |     | NULL    |       |
    | name  | varchar(50) | YES  |     | NULL    |       |
    | age   | int(3)      | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    rows in set (0.02 sec)
    
    mysql> select * from db3.b3;
    Empty set (0.00 sec)
    
    1. 删除表

      drop table 表名;

  • 相关阅读:
    your account already has a valid ios distribution certificate
    uinavigation样式
    phonegap ios默认启动页
    git init出错
    ios assetlibrary
    uitableviewcell高度自适应笔记
    ios frame bounds applicationframe
    java学习笔记
    file not found while xcode archive
    c++回调
  • 原文地址:https://www.cnblogs.com/surasun/p/9991641.html
Copyright © 2011-2022 走看看