• MySQL数据库基础


     

     

     

    MySQL数据库基础

    本文的所有操作是基于CMD环境,MySQL通过在命令行中输入SQL语句对数据库进行操作。配置问题可参考《打通MySQL的操作权限》中的内容,该文算是针对前期的环境配置问题提供了一个较为全面的解决方案,与本文是一个相(yao)辅(xiang)相(hu)成(ying)的关系。MySQL官方文档访问链接 https://dev.mysql.com/doc 。

    一、连接相关

    1. 启动MySQL服务器:net start mysql

    2. 连接MySQL数据库:mysql -uroot -h127.0.0.1 -ppassword

    3. 断开MySQL数据库:连接到MySQL服务器后,可通过在MySQL提示符下输入exit;或是quit;断开MySQL连接。

    4. 停止MySQL服务器,一共有三种基本方式。

    (1)如果将MySQL设置为Windows服务,可以通过控制面板,系统安全,管理工具,服务 列表中右击mysql服务,在弹出的快捷菜单中选择“停止”即可。

    (2)net stop mysql 回车

    (3)mysqladmin -uroot shutdown -ppassword

    二、数据库操作

    1. 创建数据库:CREATE DATABASE 如:create database db_admin;

    数据库命名的注意事项:

    (1)不能与其他数据库重名,否则将发生错误;

    (2)名称可以由任意字母、数字、下划线_和$组成,可以使用上述的任意字符开头,但不能单独使用数字,否则会造成它与数值的混淆;

    (3)名称最长可为64个字符,而别名最多可多达256个字符;

    (4)不能使用MySQL关键字作为数据库名、表名。

    (5)Windows下数据库名和表名大小写不敏感,而在Linux环境下大小写是敏感的。为了便于数据库在不同平台的移植,建议采用小写定义数据库名和表名。

    2. 查看数据库:SHOW DATABASES 如:mysql> show databases;

    3. 选择数据库:USE DATABASE(数据库名) 如:mysql> use db_admin;

    4. 删除数据库:DROP DATABASE 数据库名; 如:mysql> drop database db_admin;

    三、MySQL数据表操作

    在对MySQL数据表进行操作之前,必须首先使用USE语句选择数据库,才可在指定的数据库中对数据表进行操作。

    1. 创建数据表CREATE TABLE 详见 官方参考手册 语法格式如下:

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      (create_definition,...)
      [table_options]
      [partition_options]

    参数说明:

    参    数 说    明
    TEMPORARY 如果使用该关键字,表示创建一个临时表
    IF NOT EXISTS 该关键字用于避免表不存在时MySQL报告的错误
    create_definition 表的列属性部分。MySQL要求在创建表时,表至少包含一列
    table_options 表的一些特性参数
    partition_options  

    其中,属性create_definition,每一列定义的具体格式如下:

    create_definition:
       col_name column_definition

    column_definition:
       data_type [NOT NULL | NULL] [DEFAULT default_value]
        [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
        [COMMENT 'string']
        [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
        [STORAGE {DISK|MEMORY|DEFAULT}]
        [reference_definition]

     参    数 说       明
    col_name  字段名
    data_type  字段类型
    NOT NULL | NULL     指出该列是否允许是空值,系统一般默认允许为空值,所以当不允许为空值时,必须使用NOT NULL
    DEFAULT default_value 表示默认值
    AUTO_INCREMENT 表示是否是自动编号,每个表只能有一个AUTO_INCREMENT列,并且必须被索引
    PRIMARY KEY

    表示是否为主键。一个表只能有一个PRIMARY KEY。如表中没有一个PRIMARY KEY,而某些应用需要PRIMARY KEY,MySQL将返回第一个没有没有任何NULL列的UNIQUE键,作为PRIMARY KEY

    reference_definition 为字段添加注释

    以上是创建数据表的一些基础知识,看起来十分复杂,但在实际应用中使用最基本的格式创建数据表即可,具体格式如下:

    create table table_name(列名1 属性, 列名2 属性...);
    create table tb_admin(
    id int auto_increment primary key,
    user varchar(30) not null,
    password varchar(30) not null,
    createtime datetime);


    2. 查看表结构SHOW COLUMNS或DESCRIBE
    对于创建成功的数据表,可以使用 SHOW COLUMNS或DESCRIBE语句查看指定数据表的表结构。下面分别对这两个语句进行介绍。

    (1)SHOW [FULL]COLUMNS FROM 数据表名 [FROM 数据库名]; 或 SHOW [FULL]COLUMNS FROM 数据库名.数据表名;


     上图是 show columns from tb_admin from db_admin; 的输出结果。

    (2)DESCRIBE 数据表名; 其中 DESCRIBE 可以简写成DESC。在查看表结构时,也可以只列出某一列的信息。如:DESC 数据表名 列名;


    综上, show columns from tb_admin from db_admin; 等价于 show columns from db_admin.tb_admin; 等价于 describe tb_admin; 等价于 desc tb_admin;

    3. 修改表结构ALTER TABLE

     修改表结构使用ALTER TABLE语句。修改表结构指增加或者删除字段、修改字段名或者字段类型、设置或取消主键外键、设置或者取消索引以及修改表的注释等。

     ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
        [alter_specification [, alter_specification] ...]
        [partition_options]

    当指定IGNORE时,如果出现重复关键的行,则只执行一行,其他重复的行被删除。

    其中,alter_spec子句定义要修改的内容,其部分语法如下,详见参考手册。

    alter_specification:
       table_options

    | ADD [COLUMN] col_name column_definition              //添加新字段
       [FIRST | AFTER col_name ]

    | ADD [COLUMN] (col_name column_definition,...)
    | ADD {INDEX|KEY} [index_name]                             //添加索引名称              
       [index_type] (index_col_name,...) [index_option] ...

    | ADD [CONSTRAINT [symbol]] PRIMARY KEY              //添加主键名称
       [index_type] (index_col_name,...) [index_option] ...

    | ADD [CONSTRAINT [symbol]]
       UNIQUE [INDEX|KEY] [index_name]                         //添加唯一索引
       [index_type] (index_col_name,...) [index_option] ...

    | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}   //修改字段名称

    | CHANGE [COLUMN] old_col_name new_col_name column_definition    //修改字段类型
       [FIRST|AFTER col_name]

    | MODIFY [COLUMN] col_name column_definition       //修改子句定义字段
       [FIRST | AFTER col_name]

    | DROP [COLUMN] col_name                                    //删除字段名称
    | DROP PRIMARY KEY                                             //删除主键名称
    | DROP {INDEX|KEY} index_name                           //删除索引名称

    | RENAME [TO|AS] new_tbl_name                           //更改表名

     ALTER TABLE语句允许指定多个alter_spec子句,每个子句间使用逗号分隔,每个子句表示对表的一个修改。例如:


    alter table tb_admin add email varchar(50) not null ,modify user varchar(40);

    修改表的编码方式:ALTER TABLE `test` DEFAULT CHARACTER SET utf8;  该命令用于将表test的编码方式改为utf8;

    修改字段的编码方式:ALTER TABLE `test` CHANGE `name` `name` VARCHAR(36) CHARACTER SET utf8 NOT NULL;   该命令用于将表test中name字段的编码方式改为utf8

    注意:通过alter修改表列的前提是必须将表中数据全部删除,然后才能修改。

    4. 重命名表RENAME TABLE

     重命名数据表使用RENAME TABLE语句,语法如下:

    RENAME TABLE 数据表名1 To 数据表名2;

    该语句可同时对多个数据表进行重命名,多个表之间以逗号分隔。


     rename table tb_admin to tb_user;

    5. 删除表DROP TABLE

     语法格式为:DROP TABLE 数据表名;


    删除数据表的操作应该谨慎使用。一旦删除了数据表,那么表中的数据将会全部清除,没有备份则无法恢复。


    四、MySQL语句操作

     在数据表中插入、浏览、修改和删除记录可以在MySQL命令行中使用SQL语句完成,下面介绍如何在MySQL命令行中执行基本的SQL语句。

    1. 插入记录insert

     在建立一个空的数据库和数据表时,首先需要考虑的是如何向数据表中添加数据,该操作可以使用insert语句来完成。

    语法格式如下:

    insert into 数据表名(column_name,column_name2,...) values (values, value2, ...)

    在MySQL中,一次可以同时插入多行记录,各行记录的值清单在VALUES关键字后以逗号分隔,而标准的SQL语句一次只能插入一行记录。


    2. 查询数据库记录select

    要从数据库中把数据查询出来,就要用到数据查询语句select。select语句是最常用的查询语句,它的使用方式有些复杂,但功能强大。

    select语句的语法格式如下:

    select selection_list                  //要查询的内容,选择哪些列

    from 数据表名                          //指定数据表

    where primary_constraint        //查询时需要满足的条件,行必须满足的条件

    group by grouping_columns     //如何对结果进行分组

    order by sorting_columns         //如何对结果进行排序

    having secondary_constraint     //查询时满足的第二个条件

    limit count                              //限定输出的查询结果

    (1)查询数据表:select * from 数据表名;


    (2)查询表中一列或多列

    针对表中的多列进行查询,只要在select后面指定要查询的列名即可,多列之间用逗号分隔。例如:


    select id,user,password,email from tb_admin where id=1;

    (3)多表查询

    针对多个数据表进行查询,关键是where子句中查询条件的设置,要查找的字段名最好用“表名.字段名”表示,这样可以防止因表之间字段重名而无法获知该字段属于哪个表,在where子句中多个表之间所形成的联动关系应按照如下形式书写:表1.字段=表2.字段 and 其他查询条件

    多表查询的SQL语句格式如下:

    select 字段名 from 表1,表2...... where 表1.字段=表2.字段 and 其他查询条件

    例如:select * from tb_student,tb_sscore where tb_student.userid=tb_sscore.sid and tb_student.userid=001

    对于SQL语句的使用,是一个很丰富的知识点,合理地运用SQL语句,能够提高程序查询、输出数据的速度。后续将继续对这一块知识进行深入研究。

    3. 修改记录update

    要执行修改的操作可以使用update语句,该语句的格式如下:

    update 数据表名 set column_name = new_value1,column_name2 = new_value2, ...[where condition]

    其中,set子句指出要修改的列和它们给定的值,where子句是可选的,如果给出它将指定记录中哪行应该被更新,否则,所有的记录行都将被更新。


     update tb_admin set password = '123' where user = '乐乐';

    注意:更新时一定要保证where子句的正确性,一旦where子句出错,将会破坏所有改变的数据。

    4. 删除记录delete

     在数据库中,有些数据已经失去意义或者错误时就需要将它们删除,此时可以使用delete语句,该语句的格式如下:

    delete from 数据表名 where condition

    delete from tb_admin where user = '乐乐';


    注意:该语句在执行过程中,如果没有指定where条件,将删除所有的记录;如果指定了where条件,将按照指定的条件进行删除。在实际的应用中,执行删除操作时,执行删除的条件一般应该为数据的id,而不是具体的某个字段值,这样可以避免一些不必要的错误发生。

    五、MySQL数据库备份和恢复

    1.数据的备份

     在命令行模式下(必要时对电脑的环境变量进行设置)完成对数据的备份,使用的是MYSQLDUMP命令。通过该命令可以将数据以文本文件的形式存储到指定的文件夹下。

     语法格式:

    mysqldump -uroot -ppassword db_database>F:db_database.txt


    在该命令的结尾处没有任何的结束符,只要按Enter键即可。

    可以看到db_admin.txt的内容:

    -- MySQL dump 10.13 Distrib 5.6.11, for Win32 (x86)
    --
    -- Host: localhost Database: db_admin
    -- ------------------------------------------------------
    -- Server version 5.6.11

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

    --
    -- Table structure for table `tb_admin`
    --

    DROP TABLE IF EXISTS `tb_admin`;
    /*!40101 SET @saved_cs_client = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `tb_admin` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user` varchar(40) CHARACTER SET gbk NOT NULL,
    `password` varchar(30) NOT NULL,
    `createtime` datetime NOT NULL,
    `email` varchar(50) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
    /*!40101 SET character_set_client = @saved_cs_client */;

    --
    -- Dumping data for table `tb_admin`
    --

    LOCK TABLES `tb_admin` WRITE;
    /*!40000 ALTER TABLE `tb_admin` DISABLE KEYS */;
    INSERT INTO `tb_admin` VALUES (1,'乐乐','123','2017-03-01 09:11:59','lele@fintech.com'),(2,'天天','112','2017-03-01 09:12:59','tiantian@fintech.com'),(3,'圆圆','112','2017-03-01 09:13:59','yuanyuan@fintech.com');
    /*!40000 ALTER TABLE `tb_admin` ENABLE KEYS */;
    UNLOCK TABLES;
    /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

    -- Dump completed on 2017-03-02 19:52:57

    2.数据的恢复

     命令格式:

    mysql -uroot -ppassword db_admin <F:db_amin.txt


     究其原因,从txt内容可以看出在执行备份时并未生成创建数据库语句,仅仅只是把数据库中的数据表给备份了。解决方法是先创建数据库db_admin之后再导入db_admin.txt。

     


     从上述的操作可以看到,并不能真正的备份数据库,而只能对数据表进行备份,因此删除数据库意义并不是很大,如果你是为了备份的话。

  • 相关阅读:
    腾讯云学习笔记
    STL常见容器的理解
    C++STL
    Ubuntu:查看目录或文件信息 ls
    安装Ubuntu(通过U盘启动盘)
    C++基础知识
    C++ OpenCV常用的一些函数
    sqlite3主键,外键
    Windows下 Qt添加新模块
    IDE将C++源码生成为可执行文件过程
  • 原文地址:https://www.cnblogs.com/ioveNature/p/6486672.html
Copyright © 2020-2023  润新知