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。

 


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

 

posted @ 2017-03-01 22:24  当归远志  阅读(526)  评论(0编辑  收藏  举报