MySQL实践

说明:mysql操作命令语句中的标点符号(逗号,引号,分号)都必须是英文字符,如果执行命令过程中有语法错误提示,请先检查是否是使用了中文符号的原因

  • 登陆MySQL

对于一个在远程服务器上已经运行着的MySQL 服务, 我们可以通过本机的MySQL客户端登录到远程MySQL数据库中, 首先打开命令提示符, 输入以下格式的命令(只能用英文输入法):

mysql  -h  192.168.???.???  -u  database_user_name  -p

命令参数说明:

-h : 该参数用于指定所要登录的MySQL主机名或者IP地址, 如果登录当前机器中的mysql服务则该参数可以省略;

-u : 所要登录mysql的用户名;

-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

其它说明:

1、如果登陆远程服务器中的mysql,需要在本机安装mysql客户端工具,并配置环境变量,使用mysql –version命令检查本机mysql安装是否正常。同时需要服务器上的msyql授权外网可以访问,并开放mysql服务响应的端口号。

2、使用如下方式登陆:

(1)首先进入https://sa.big.ac.cn页面,然后使用开通的两个账号登录, 在登录过程中会要求下载VPN链接软件,下载安装后登录即可;然后ssh登陆到远程服务器,服务器IP是192.168.???.???,用户名是xxx,命令如下: ssh xxx@192.168.???.???,回车后输入密码xxxxx

(2)登陆远程主机后,在远程主机上输入如下命令: mysql -u root -p ,回车后输入密码,mysql的root用户密码是******

(3)show databases;  #查看当前用户下的所有数据库

(4)use databases_name;  #使用某个数据库

(5)show tables;  #查看这个库下的表

(6)desc table_name; #查看某个表的字段

  • 创建、删除一个数据库

创建数据库:create database 数据库名 [其他选项];

此处,数据库名建议大家使用自己姓名的汉语拼音(方便区分)。

删除数据库:drop database 数据库名;(删除后很难恢复,请谨慎使用)

   创建your_user_name数据库,命令如下(后面的选项指定了数据库的编码方式为utf8,字符排序规则使用utf8_general_ci,mysql版本5.5.3之后请使用utf8mb4编码,以兼容4字节的unicode字符存储):

create database your_user_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  • 创建、删除数据库中的表

操作表之前需要切换到表所在的数据库,用如下命令进入:use 数据库名;

创建表:create table 表名(列声明);

删除:drop table 表名;

本次课程创建三个表gene、snp、transcript,命令如下:

create table gene

(

gene_id int unsigned not null auto_increment primary key,

gene_name varchar(30),

gene_alias varchar(30),

chrom varchar(30),

strand char(1),

chrom_start int(20),

chrom_end int(20),

gene_type varchar(30),

gene_description varchar(300)

);
create table snp

(

snp_id int unsigned not null auto_increment primary key,

snp_class_id int,

chrom varchar(30),

chrom_start int(20),

chrom_end int(20),

reference_allele varchar(300),

genotype varchar(300),

het_or_hom tinyint(1)

);
create table transcript

(

transcript_id int unsigned not null auto_increment primary key,

transcript_name varchar(30),

gene_name varchar(30),

chrom varchar(30),

strand char(1),

chrom_start int(20),

chrom_end int(20),

source varchar(300)

);

语句解说(以gene表为例):

create table tablename(columns) 为创建数据库表的命令, 列的名称以及该列的数据类型将在括号内完成;

括号内声明了各列内容, gene_id、gene_name等为每列的名称, 后面跟的是数据类型描述, 列与列的描述之间用逗号(,)隔开;

以 "gene_id int unsigned not null auto_increment primary key" 为例进行介绍:

  • "gene_id" 为列的名称;
  • "int" 指定该列的类型为 int(取值范围为 -8388608到8388607), 在后面我们又用 "unsigned" 加以修饰, 表示该类型为无符号型, 此时该列的取值范围为 0到16777215;
  • "not null" 说明该列的值不能为空, 必须要填, 如果不指定该属性, 默认可为空;
  • "auto_increment" 需在整数列中使用, 其作用是在插入数据时若该列为 NULL, MySQL将自动产生一个比现存值更大的唯一标识符值。在每张表中仅能有一个这样的值且所在列必须为索引列。
  • "primary key" 表示该列是表的主键, 本列的值必须唯一, MySQL将自动索引该列。

补充说明---MySQL数据类型:

MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:

  • 数字类型
    • 整数: tinyint、smallint、mediumint、int、bigint
    • 浮点数: float、double、real、decimal
  • 日期和时间: date、time、datetime、timestamp、year
  • 字符串类型
    • 字符串: char、varchar
    • 文本: tinytext、text、mediumtext、longtext
    • 二进制(可用来存储图片等): tinyblob、blob、mediumblob、longblob

  • 操作数据库中的表

1、向表中插入数据(insert)

insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:

insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

其中 [] 中的内容是可选的,如果省略列名,后面的各值顺序要跟表中的各字段顺序一致;

例如, 要给gene表插入一条记录, 执行语句:

insert gene values(NULL, "ENSCAFG00000000001", "ENPP1", "1 ", "+", 247829, 322180, "mRNA", "ectonucleotide pyrophosphatase/phosphodiesterase 1");
insert gene values(NULL, "ENSCAFG00000000005", "PARD6G", "1", "-", 509125, 565905, "mRNA", "par-6 family cell polarity regulator gamma");

由于gene_id是auto_increment primary key(自增的主键),所以插入时它的值可以是自己指定数字1,2,3,也可以设置为NULL,mysql引擎会根据当前的值自增后写入。

2、查询表中的数据(select)

select 语句是根据一定的查询规则从数据库表中获取数据, 其基本用法为:

select 列名1列名2 from 表名 where [查询条件];

select * from 表名 where [查询条件];

其中通配符 * 代表查询表中所有列的内容;

示例:

1)查询gene表中所有的基因名称和别名:

select gene_name, gene_alias from gene; 

2)查询gene表中gene_id大于3的所有列的内容:

select * from gene where gene_id > 1; 

复杂查询语句:

select  列名1, 列名2, ...

from    表名1

[inner | left | right] join 表名2 on 连接条件

where  [查询条件]

group by 列名1  having 分组条件

order by 列名1  [asc | desc]

limit [偏移量,]  [行数];

说明:

 

2) group by从字面意义上理解就是根据by指定的对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行聚合函数处理(求和,最大,最小,数量);having条件子句是对group by子句定义的小分组进行过滤,作用类似于where子句;

3) order by是根据指定的列对返回的所有行进行升序(默认值)或降序排列;其具体实现方式分为两种:一是通过索引扫描生成有序结果,二是借助内存或磁盘使用文件排序(filesort)来生成有序结果;

4) limit是限制返回行数;其接受一个或者两个整数常量,如果给定两个参数,第一个数代表的是偏移量(默认值是0),可以理解为先跳转到某处然后开始,第二个数代表的是需要返回的行数;

示例:

1)通过gene_name关联,联合查询transcript表和gene表的所有列信息:

select * from transcript t join gene g on t.gene_name = g.gene_name;

2)分组查询gene表中strand分别为+,-的行数:

select strand, count(*) from gene group by strand;

3)对gene表中gene_alias列进行降序排序:

select * from gene order by gene_alias desc;

4)查询gene表中第2行往后的3行信息:

select * from gene limit 2, 3;

3、更新表中的数据(update)

update 语句可用来修改表中的数据, 基本的使用形式为:

update 表名 set 列名=新值 where 更新条件;

示例:

update gene set gene_type="RNA" where gene_id=2;

4、删除表中的数据(delete)

delete 语句用于删除表中某些行的数据, 基本用法为:

delete from 表名 where 删除条件;

示例:

delete from gene where gene_id=2;

  • 对已创建表的修改
  1. 添加列

 alter table 表名 add 列名 列数据类型 [after 插入位置];

示例

alter table gene add gene_property varchar(300) after gene_type;

  1. 修改列

 alter table 表名 change 列名 列新名称 新数据类型;

示例

alter table gene change gene_property gene_new_property varchar(255);

  1. 删除列

alter table 表名 drop 列名;

示例

alter table gene drop gene_new_property;

  1. 重命名表

alter table 表名 rename 新表名;

示例

alter table gene rename gene_new_table

  • 导入sql文件的方式

创建完数据库后,比如创建的名称为testdb。

在mysql登录模式下使用source xxx.sql

如:

mysql> source /home/zhaowm/sql/create_table.sql;
mysql> source /home/zhaowm/sql/insert.sql;

你可能感兴趣的:(mysql,数据库,服务器)