一、数据库介绍

1.什么是数据库

数据库就是⼀个存放计算机数据的仓库,这个仓库是按照⼀定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来对数据进⾏组织和存储的,可以通过数据库提供的多种⽅法来管理其中的数据。
2、数据库的种类
最常⽤的数据库模式主要有两种,即关系型数据库和⾮关系型数据库。

3、⽣产环境常⽤数据库

⽣产环境主流的关系型数据库有 Oracle、Microsoft SQL Server、MySQL/MariaDB等。
⽣产环境主流的⾮关系型数据库有 Mongodb Memcached Redis

4、MySQL 数据库

MySQL 数据库是⼀个中⼩型关系型数据库管理系统,软件开发者为瑞典 MySQL AB 公司。在
2008年1⽉16号被 Sun 公司收购,后 Sun 公司⼜被 Oracle 公司收购。⽬前MySQL 被⼴泛地应⽤
在 Internet 上的⼤中⼩型⽹站中。由于其体积⼩、速度快、总体拥有成本低,尤其是开放源码这
⼀特点,许多⼤中⼩型⽹站为了降低⽹站总体拥有成本⽽选择了 MySQL 作为⽹站数据库,甚⾄国
内知名的淘宝⽹也选择弃⽤ Oracle ⽽更换为更开放的 MySQL。
主要应⽤范围:互联⽹领域,⼤中⼩型⽹站,游戏公司,电商平台等等。

二、数据库操作

1.结构化查询语句分类

SQL(Structured Query Language 即结构化查询语言)SQL是⽤于访问数据库的标准化语⾔。

名称

解释

命令

DDL语句

数据库定义语言

定义和管理数据对象,如数据库、表等

CREATE DROP ALTER

DML语句

数据库操纵语言

用于操作数据库对象中所包含的数据

插入数据INSERT、删除数据DELETE、更新数据UPDATE

DCL语句

数据库控制语言

用于管理数据库的语言,包括管理权限及数据更改

例如控制用户的访问权限GRANT、REVOKE

DQL语句

数据库查询语言

用于查询数据库数据

查询数据SELECT

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

MySQL所使⽤的 SQL 语⾔是⽤于访问数据库的最常⽤标准化语⾔。MySQL 软件采⽤了双授权政策,分为社区版和商业版,由于其体积⼩、速度快、总体拥有成本低,尤其是开放源码这⼀特点,⼀般中⼩型⽹站的开发都选择 MySQL 作为⽹站数据库。

什么是库?

在操作系统里它的本质就是一个目录。

例如:在mysql里创建一个库create database db3;它在文件系统里就是多了一个目录,cd /var/lib/mysql/(yum安装数据库数据存储的位置) 在这里面有一个db3目录,这就是刚刚create database db3做出来的。cd db3,ls  有个初始文件,db.opt。

在数据库创建一张表create table t3(id int);再切过去看会发现多了一个t3.frm。这个是表文件,frm里面存的是表结构,表结构就是一张表一共有几个字段,每个字段叫什么,他把这些东西存到这里了。

数据并没有存到frm,比如要往里面插一条记录/数据,并没有存到这里,存到外面了在cd /var/lib/mysql/,ls   ibdata1,不管现在有几张表,表里的所有数据都会在这里存储,都合到一个文件了。

MySQL数据库一体机 mysql数据数据库_数据库

 假如数据库里有一张表,每一列的第一行叫表头/字段名称,每一列称为字段,假如有五列,就是有五个字段,这五个字段就是表结构。数据就是从第二行开始,每一行称它为记录,记录里存储的就是数据。一整条数据我们就称它为一个记录。有第一个记录也可以有第二个记录,这些数据全部都存在ibdata1文件里,一张表的数据存在这里了,再创建一张表它的数据也是存到这里了。

ibdata1存储数据的文件,也称为表空间/表空间文件。

数据库里面就是由库和表组成。库就是目录,比如有一个db1的库,在目录里面会有表,表创建出来之后,它的表结构文件会存在库里面,数据会存在外面统一的表空间文件里。数据文件。

库操作

系统数据库

information_schema

虚拟库,文件系统根本没有这个库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等

performance_schema

主要存储数据库服务器的性能参数

mysql

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

sys

主要存储数据库服务器的性能参数

这都是系统已经创建好的,默认库,不同的版本,里面的系统库不一样,有的版本是sys。有的是test。最没用的就是test,是空库,做测试用的。也可以自己创建,剩下三个不能改,也不能用。必须知道msyql库,比如创建的用户会存在库里的表里去,用户的权限也会存在库里的某些表,这是最核心的库,初始化之后的库,平时不能动,除非做权限有关的东西。能看见目录的才是真实的库。

MySQL数据库一体机 mysql数据数据库_数据库_02

创建数据库:DDL

两种方法

1.在shell里,用mysqladmin去创建

#mysqladmin -u root -p1 create db1     (-p后面不能加空格)

MySQL数据库一体机 mysql数据数据库_mysql_03

 2.在客户端连到服务器里边之后,用sql语句创建

#mysql> create database k; #k是数据库名称

MySQL数据库一体机 mysql数据数据库_字段_04

数据库命名规则:

区分大小写,库的名字要有意义。,唯一性,不能使用关键字如 create select,不能单独使用数字,每条sql语句都要以;结尾,但是如果列比较多,想看的清楚一点,可以以\G结尾

翻转显示:\G

sql语句后面跟\G,一般适合查看字段比较多的东西,会翻转 select * from user\G,行变成了列,一条记录一个row。

select * from mysql.user\G    绝对路径,加一个库的名字,它就会去mysql库里找user表。把这个写在脚本里,就不用写两条指令了,就不用先切库,再去找表了。直接一条指令就行。

命令行操作数据库脚本

在脚本里这样写,mysql -e ‘show databases;’    e执行,执行后面跟引号,引号里面写sql语句。 能在shell执行也能在脚本里执行,还可以写多条语句用分号隔开就行了。

MySQL数据库一体机 mysql数据数据库_MySQL数据库一体机_05

 mysql -e 后面可以跟sql语句,sql语句直接用分号隔开,这种方法大部分情况没什么问题,但是有的时候需要往里面传变量可能就会有问题了。

MySQL数据库一体机 mysql数据数据库_sql_06

 这样传变量非常容易传,因为外面没有双引号单引号。这些东西完全可以写到脚本里面 ,写到 vim a.sh     bash执行

MySQL数据库一体机 mysql数据数据库_数据库_07

平时sql语句比较少的情况下,不用怎么传变量,直接-e,sql语句比较多就用<<eof

MySQL数据库一体机 mysql数据数据库_sql_08

 echo后面跟sql语句,比如select * from mysql里面的user表通过管道符交给msyql客户端运行,(要是有用户和密码,加上)。这种方法不大好,因为这个想传变量也会有麻烦,最好的方法是直接写到脚本用eof,

# cat a.sh

#! /bin/bash

/usr/local/mysql/bin/mysql -u root -p'Helloworld123!' 2>/dev/null <<eof

select 5-2;

use test;

select * from t1;

eof

查看数据库

mysql> show databases;  查看现有数据库

mysql> show create database db1;  可以看到数据库里面比较详细的一些信息

mysql>select database(); 查看当前所在库或者show tbales;根据里边的表判断一下所在库

切换库 

use db1;切换库

删除数据库

drop database db1;

drop 丢弃    drop删掉的都是大物件   delet 删掉的都是小文件比如删一条记录就用delet,删表删库用drop   字段属大记录小

表操作

是数据库存储数据的基本单位,由若干个字段组成,主要用来存储数据记录。

使用编辑器编辑指令

mysql> edit     (这是一个vi编辑器) 

mysql> \e

edit (这是一个vi编辑器)在里面可以写很多语句,\e和edit是一样的写法

MySQL数据库一体机 mysql数据数据库_MySQL数据库一体机_09

MySQL数据库一体机 mysql数据数据库_数据库_10

 三条指令直接执行了,可以用这种方法去批量的执行各种语句,

 在mysql客户端内执行系统命令

mysql> system ls

mysql> \! ls 

MySQL数据库一体机 mysql数据数据库_sql_11

MySQL数据库一体机 mysql数据数据库_mysql_12

类似在vim执行系统命令一样,vim a 打开一个a文件,在里面可以编辑,但是编辑中途,想查看系统根目录下面有什么东西,又不想保存退出,就输入:! 后面跟上系统命令。

MySQL数据库一体机 mysql数据数据库_mysql_13

MySQL数据库一体机 mysql数据数据库_数据库_14

 这种一般都是我们在没有其他终端可用的情况下,又不想退出当前这个东西,才使用这种方法。

 这种看起来高大上,用处不大,可以直接复制标签,也不用退出去。

创建表

create table class22(id int(10));

create table 表名(字段名称  属性信息[(宽度) 约束条件],

create table固定语法 表的名称小括号里面是字段全都拿逗号隔开  字段名称自己定义,有意义就行,字段名称后面一般都会跟约束或描述都行,有的时候需要设置一些特殊的属性信息,可能需要在后面再跟一些什么什么属性,

表名最好不要是纯数字,在前面加一些字符

MySQL数据库一体机 mysql数据数据库_MySQL数据库一体机_15

查看表

show tables;    查看表

show create table t1; 查看表的创建过程

show table status like 't1'\G      查看表的详细的一些信息,(后面跟表的名字,或者表名里的关键字,它会查看多张表,查看固定的表,把表名写全就好了)

查看表结构 

desc t1;

查看有几个字段,desc t10; 数据少的可以用select * from t10;

【注意】在公司不要这样做,因为在公司数据可能会有上千万条,比如mysql早期的版本,一张表最多支持4千万条记录。这么执行,机器直接爆了,占资源,在公司不要这么干,如果想查字段,最好用desc,这个只查看表结构的文件,不查看数据文件,这个占用的资源不会太多,是可以随便用。

插入数据

1.insert into t1 set id=1,name="k",grade=3;   给一个字段或者两个字段添加数据,(数字不加引号,字符串必须加引号)

2.insert into t1(id,name,grade) value(2,"lilei","4"); 表名的后面加小括号,小括号里面写想要插入数据的字段,分别给他们什么样的值。

同时插入多条记录,接着写小括号,用逗号隔开。

MySQL数据库一体机 mysql数据数据库_MySQL数据库一体机_16

 单引号,双引号在这里一样的用法

3.insert into t1 values(4,"dd",50,100);省略了表后面的小括号,要给所有的字段设置值,后面的会依依赋值给所有字段

查看表的内容

select * from t1; *表示所有的字段    查看所有     

select id,name from t1; 查看单独的某一列或者两列,把字段名称写上,用逗号隔开

修改表的名称

1.rename table t1 to t2;   

2.alter table t2 rename t1;

 添加新的字段   

先查看有几个字段,desc t2;

alter table t2 add grade int(20); 

删除字段 

alter table t2 drop grade;

修改字段数据类型修饰符 

alter table t10 modify name char(10);   修改属性

alter table t10 change name xingming  char(10);     修改名字

MySQL数据库一体机 mysql数据数据库_sql_17

修改字段的位置

first after    修改它的位置  比如;原来是第三个字段现在想把它变成第二个字段

mysql> alter table t1 modify xingming varchar(10) after id;     xingming到中间  after后面跟id的名字

MySQL数据库一体机 mysql数据数据库_数据库_18

 mysql> alter table t1 modify name varchar(10) first;   字段name到第一个

对于平时sql语句的查询来讲,它在哪个位置根本无所谓,因为到时候是按条件查询,它在第几个字段,根本不重要,影响的只是观感。

更新记录   

update t2 set name="lili" where id=5;   只能用set,因为更新是更新其中某一个。不加条件改所有

MySQL数据库一体机 mysql数据数据库_mysql_19

删除记录   

delete from t1 where id=6;   不加条件删所有

mysql> delete from t1; //删除所有记录

MySQL数据库一体机 mysql数据数据库_数据库_20

表复制:key不会被复制: 主键、外键和索引

复制一张表

mysql> create table t10(select * from t3);把t3复制到t10  看起来非常像,但是字段的有些属性是复制不过来的,只把名称复制过来

mysql> create table t10(select id,name from t3);

复制表结构

mysql> create table t10(select * from t3 where 1=8);  加一个永远不成立的条件,这种情况复制的东西只有表结构     单独复制表结构,不复制记录,加一个永远不成立的条件。

mysql> create table t4(select id,name from t3 where 5=4);

复制记录

mysql> insert into t3(select * from t10 where id=9);只复制一条记录

删除单张表   

drop table t2;

MySQL数据库一体机 mysql数据数据库_数据库_21

删除多张表

mysql> drop table t1,t2,t3;  逗号隔开就行