什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。
简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。
在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。
例如, 企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个“数据仓库“我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种“数据库“,使其可以利用计算机实现财务、仓库、生产的自动化管理。
严格来说,数据库是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据指的是以一定的数据模型组织、描述和储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为多个用户共享。
这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查由统一软件进行管理和控制。从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的。
数据管理模型:
层次模型:用树状<层次>结构来表示实体类型和实体间联系的数据模型。
网状模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
关系模型:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
数据分类:
结构化数据:能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号。传统的关系数据模型、行数据,存储于数据库,可用二维表结构表示。
半结构化数据:介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,XML、HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。
非结构化数据:指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)。非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等
关系模型:
数据库:一个方案、一个项目
二维关系:
表:row, column
索引:index
视图:view
SQL接口:Structured Query Language
类似于OS的shell接口;也提供编程功能
ANSI(美国国家标准委员会): SQL标准,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, …
各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充
PL-SQL,T-SQL,…
结构化查询语言(Structured Query Language):
简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言包含6个部分:
一:数据查询语言(DQL:Data Query Language):
其语句,也称为“数据检索 语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字 SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
二:数据操作语言(DML:Data Manipulation Language):
其语句包括动词 INSERT, UPDATE和 DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
三:事务处理语言(TPL:Dransaction Processing Language):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:数据控制语言(DCL:DataBase Control Language):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
五:数据定义语言(DDL:Data Definition Language):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
六:指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
DDL:Data Defined Language(数据定义)
CREATE, ALTER, DROP、SHOW (增删改查)
DML: Data Manapulating Language(数据操作)
INSERT, DELETE, UPDATE, SELECT (增删改查)
SQL代码:
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler
例程:routine
用户和权限:
用户:用户名和密码
权限:管理类、程序类、数据库、表、字段
DBMS(数据库管理系统):DataBase Management System
一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据, 数据库管理员也通过DBMS进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。
RDBMS(关系型数据库管理系统):Relational Database Management System
将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的数据库软件有Oracle、SQL Server等。它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。
关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
RDMBS设计范式基础概念:
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
(1) 第一范式(1NF)
所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。
(2) 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
(3) 第三范式(3NF)
第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不能包含已在其它关系已包含的非主关键字信息。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。
MySQL:单进程,多线程
插件式存储引擎:存储引擎也称为表类型
用户连接:通过线程来实现
线程池:
PostgreSQL(是一种先进的对象关系型数据库管理系统):
PostgreSQL is an advanced Object-Relational database management system (DBMS).
PostgreSQL是一种先进的对象关系型数据库管理系统(DBMS)。
SQLite:
是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式库中。它是D.RichardHipp建立的公有领域项目。不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。
事务(Transaction):组织多个操作为一个整体,要么全部都成功执行,要么失败回滚
“回滚”, rollback
例:
Bob: 账户中有8000,给Alice2000 8000-2000
Alice: 账户中有5000,再加上Bob给的2000 5000+2000
一个存储系统是否支持事务,测试标准:
ACID:
ACID是数据库事务正确执行的四个基本要素的缩写,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有ACID特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
A:原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
C:一致性
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性
I:隔离性
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据
D:持久性
在事务完成以后,该事务对数据库所作的更改持久的保存在数据库之中,并不会被回滚。
由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新以及修改的资料一次操作完毕,但实际上并不可行。 目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式(现代数据库均基于这种方式)。第二种是Shadow paging。
数据库:数据集合
表:为了满足范式设计要求,将一个数据集分拆为多个
约束:constraint,向数据表插入的数据要遵守的限制规则
主键:一个或多个字段的组合,填入主键中的数据,必须不同于已存在的数据;而且不能为空;一个表只能有一个Primary KEY(主键)
外键:一个表中某字段中能插入的数据,取决于另外一张表的主键中的数据
惟一键:一个或多个字段的组合,填入惟一键中的数据,必须不同于已存在的数据可以为空;一个表可存在多个Unique Key
检查性约束:取决于表达式的要求
索引:将表中的某一个或某些字段抽取出来,单独将其组织一个独特的数据结构中
常用的索引类型:
B+ Tree:Balance Tree(树形索引)
hash:
关系运算:
选择:挑选出符合条件的行
投影:挑选出符合需要的列
连接:将多张表关联起来
数据抽象:
物理层:决定数据的存储格式,即如何将数据组织成为物理文件;
逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系;
视图层:描述DB中的部分数据
关系模型的分类:
关系模型
实体–关系模型
基于对象的关系模型
半结构化关系模型
MariaDB(mysql):
可用版本:
MySQL:
MariaDB(延伸版)
Percona-Server
AliSQL
TiDB
MariaDB的特性:
插件式存储引擎:存储管理器有多种实现版本,彼此间的功能和特性可能略有区别;用户可根据需要灵活选择
存储引擎也称为“表类型”
(1) 更多的存储引擎
MyISAM:不支持事务,表级锁,崩溃后不保证安全恢复
MyISAM –> Aria
InnoDB –> XtraDB :支持事务,行级锁,外键,热备
(2) 诸多扩展和新特性
(3) 提供了较多的测试组件
(4) truly open source
安装和使用MariaDB:
安装方式:
(1) rpm包;
(a) 由OS的发行商提供
(b) 程序官方提供
(2) 源码包
(3) 通用二进制格式的程序包
命令行交互式客户端程序:mysql
mysql
mysql [OPTIONS] [database]
常用选项:
-u, –user=username:用户名,默认为root
-h, –host=hostname:远程主机(即mysql服务器)地址,默认为localhost; 客户端连接服务端,服务器会反解客户的IP为主机名,关闭此功能(skip_name_resolve=ON)
-p, –password[=PASSWORD]:USERNAME所表示的用户的密码; 默认为空
注意:mysql的用户账号由两部分组成:‘USERNAME’@’HOST’; 其中HOST用于限制此用户可通过哪些远程主机连接当前的mysql服务
HOST的表示方式,支持使用通配符
%:匹配任意长度的任意字符
172.16.%.%, 172.16.0.0/16
_:匹配任意单个字符
-P, –port=#:mysql服务器监听的端口;默认为3306/tcp
-S, –socket=/PATH/TO/mysql.sock:套按字文件路径
-D, –database=DB_name:连接到服务器端之后,设定其处指明的数据库为默认数据库
-e, –execute=’SQL STATEMENT’:连接至服务器并让其执行此命令后直接返回
命令:
客户端命令:本地执行
mysql> help
\u db_name:设定哪个库为默认数据库
\q:退出
\d CHAR:设定新的语句结束符
\g:语句结束标记
\G:语句结束标记,结果竖排方式显式
\s:
\!: 执行shell命令
\.: 装载并运行sql脚本
服务端命令:通过mysql连接发往服务器执行并取回结果(SQL语句);
DDL, DML, DCL
注意:每个语句必须有语句结束符,默认为分号(;)
获取帮助:
mysql> help contents
Administration
Account Management
Data Definition
Data Manipulation
Data Types
myslq> help ‘命令类别‘
数据类型:
表:行和列
创建表:定义表中的字段;
定义字段时,关键的一步即为确定其数据类型;
用于确定:数据存储格式、能参与运算种类、可表示的有效的数据范围;
字符型:字符集
码表:在字符和二进制数字之间建立映射关系;
mysql> SHOW CHARACTER SET;
mysql> SHOW COLLATION;
种类:
字符型:
定长字符型:
CHAR(#):不区分字符大小写(0-255字节)
BINARY(#):区分字符大小写
变长字符型:
VARCHAR(#):多占一个或两个字符空间(最后要有一个字符串结束标记)不区分字符大小写(0-65535 字节)
VARBINARY(#):区分字符大小写
对象存储:
TEXT:不区分字符大小写;TINYTEXT、SMALLTEXT、MEDIUMTEXT、TEXT、LONGTEXT
BLOB:Binary Large OBject,区分字符大小写;TINYBLOB,SMALLBLOB,MEDIUMBLOB,BLOB,LONGBLOB;
内置类型:
SET
ENUM
数值型:
精确数值型:
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
TINYINT |
1 字节 |
(-128,127) |
(0,255) |
小整数值 |
SMALLINT |
2 字节 |
(-32 768,32 767) |
(0,65 535) |
大整数值 |
MEDIUMINT |
3 字节 |
(-8 388 608,8 388 607) |
(0,16 777 215) |
大整数值 |
INT或INTEGER |
4 字节 |
(-2 147 483 648,2 147 483 647) |
(0,4 294 967 295) |
大整数值 |
BIGINT |
8 字节 |
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807) |
(0,18 446 744 073 709 551 615) |
极大整数值 |
FLOAT 近似数值 |
4 字节 |
(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) |
0,(1.175 494 351 E-38,3.402 823 466 E+38) |
单精度 |
DOUBLE |
8 字节 |
(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
双精度 |
DECIMAL |
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 |
依赖于M和D的值 |
依赖于M和D的值 |
小数值 |
近似数值型:
FLOAT
DOBULE
日期时间型:
类型 |
大小(字节) |
范围 |
格式 |
用途 |
DATE |
3 |
1000-01-01/9999-12-31 |
YYYY-MM-DD |
日期值 |
TIME |
3 |
‘-838:59:59’/’838:59:59’ |
HH:MM:SS |
时间值或持续时间 |
YEAR |
1 |
1901/2155 |
YYYY |
年份值 |
DATETIME |
8 |
1000-01-01 00:00:00/9999-12-31 23:59:59 |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值 |
TIMESTAMP |
4 |
1970-01-01 00:00:00/2037 年某时 |
YYYYMMDD HHMMSS |
混合日期和时间值,时间戳 |
字段数据修饰符:
NOT NULL:非空
AUTO_INCREMENT:自动增长
NULL:允许为空
DEFAULT value:默认值
PRIMARY KEY:主键
UNIQUE KEY:惟一键
数据库管理(DDL):
创建:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
CREATE {DATABASE 或SCHEMA}后面指明数据库名称
[DEFAULT] CHARACTER SET [=] charset_name
定义默认字符集
[DEFAULT] COLLATE [=] collation_name
定义排序规则
查看支持的所有字符集:SHOW CHARACTER SET
查看支持的所有排序规则:SHOW COLLATION
修改:
ALTER {DATABASE | SCHEMA} [db_name]
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
删除:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
查看:
SHOW DATABASES LIKE ‘ ’;
表管理:
创建:
CREATE TABLE [IF NOT EXISTS] [db_name.]tbl_name (create_defination) [table_options]
create_defination:
字段:col_name data_type
键:
PRIMARY KEY (col1, col2, …)
UNIQUE KEY (col1, col2,…)
FOREIGN KEY (column)
索引:
KEY|INDEX [index_name] (col1, col2,…)
查看数据库支持的所有存储引擎类型
mysql> SHOW ENGINES;
查看某表的状态信息:
mysql> SHOW TABLES STATUS [LIKE ‘tbl_name’][WHERE clause]
修改:
ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] …]
alter_specification:
字段:
添加:ADD [COLUMN] col_name data_type [FIRST | AFTER col_name ]
删除:DROP [COLUMN] col_name
修改:
CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
键:
添加:ADD {PRIMARY|UNIQUE|FOREIGN} KEY (col1, col2,…)
删除:
主键:DROP PRIMARY KEY
外键:DROP FOREIGN KEY fk_symbol
索引:
添加:ADD {INDEX|KEY} [index_name] (col1, col2,…)
删除:DROP {INDEX|KEY} index_name
表选项:
ENGINE [=] engine_name
查看表上的索引的信息:
mysql> SHOW INDEXES FROM tbl_name;
删除:
DROP TABLE [IF EXISTS] tbl_name [, tbl_name] … (不推荐使用)
表的引用方式:
tbl_name
db_name.tbl_name
第二种创建方式:
复制表结构;
CREATE TABLE tbl_name LIKE other_table_name
第三种创建方式:
复制表数据;
CREATE TABLE tbl_name () SELECT clause
索引管理:
索引是特殊的数据结构;
索引:要有索引名称;
创建:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tbl_name (col1, col2,,…)
删除:
DROP INDEX index_name ON tbl_name
以CentOS 7.3版本为例,由于 MySQL数据库已从默认的程序列表中移除,可以使用 mariadb 代替:
yum install mariadb-server mariadb
mariadb数据库的相关命令是:
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
验证mysql安装
mysqladmin –version
mysqladmin Ver 9.0 Distrib 5.5.52-MariaDB, for Linux on x86_64 该结果基于系统信息
MYSQL相关操作:
你可以在 MySQL Client(Mysql客户端) 使用 mysql 命令连接到Mysql服务器上,默认情况下Mysql服务器的密码为空
[root@localhost ~]#mysql MariaDB [(none)]>
使用以下命令来创建root用户的密码:
[root@localhost ~]#mysqladmin -u root password "******";
通过以下命令来连接到Mysql服务器:
[root@localhost ~]#mysql -u root -p Enter password: ****** #输入上一步的密码 MariaDB [(none)]>
列出 MySQL 数据库管理系统的数据库列表。
MariaDB [mysql]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
MariaDB [(none)]> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> SHOW TABLES; +---------------------------------+ | Tables_in_mysql | +---------------------------------+ | columns_priv | | db | ...... | user | +--------------------------------+ 27 rows in set (0.00 sec)
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
MariaDB [mysql]> SHOW COLUMNS FROM time_zone_transition_type; +--------------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------+---------------------+------+-----+---------+-------+ | Time_zone_id | int(10) unsigned | NO | PRI | NULL | | | Transition_type_id | int(10) unsigned | NO | PRI | NULL | | | Offset | int(11) | NO | | 0 | | | Is_DST | tinyint(3) unsigned | NO | | 0 | | | Abbreviation | char(8) | NO | | | | +--------------------+---------------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
显示数据表的详细索引信息,包括PRIMARY KEY(主键)
MariaDB [mysql]> SHOW INDEX FROM time_zone_transition_type; +---------------------------+------------+----------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +---------------------------+------------+----------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | time_zone_transition_type | 0 | PRIMARY | 1 | Time_zone_id | A | NULL | NULL | NULL | | BTREE | | | | time_zone_transition_type | 0 | PRIMARY | 2 | Transition_type_id | A | 0 | NULL | NULL | | BTREE | | | +---------------------------+------------+----------+--------------+--------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 2 rows in set (0.00 sec)
创建名为hidb的数据库
MariaDB [(none)]> CREATE DATABASE hidb;
如果不存在就创建名为hidb的数据库
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS hidb;
也可在/var/lib/mysql下创建名为testdb的数据库(不建议手动方式创建数据库)
[root@localhost /var/lib/mysql]#mkdir testdb [root@localhost /var/lib/mysql]#chown mysql.mysql testdb/ MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | hidb | | mysql | | performance_schema | | test | | testdb | +--------------------+ 6 rows in set (0.00 sec)
修改hidb的默认字符集改为utf8
MariaDB [(none)]> ALTER DATABASE hidb CHARACTER SET 'utf8';
删除testdb
MariaDB [(none)]> DROP DATABASE testdb;
查看以’db’结尾的数据库
MariaDB [(none)]> SHOW DATABASES LIKE '%db'; +----------------+ | Database (%db) | +----------------+ | hidb | +----------------+ 1 row in set (0.00 sec)
创建表
MariaDB [hidb]> CREATE TABLE tbl1 (id int NOT NULL,name VARBINARY(100) NOT NULL, age tinyint); MariaDB [hidb]> CREATE TABLE tbl2 (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(60) NOT NULL); MariaDB [hidb]> SHOW TABLES; +----------------+ | Tables_in_hidb | +----------------+ | tbl1 | | tbl2 | +----------------+
查看数据库支持的所有存储引擎类型
MariaDB [hidb]> SHOW ENGINES;
查看某表的状态信息
MariaDB [hidb]> SHOW TABLE STATUS; MariaDB [hidb]> SHOW TABLE STATUS\G (也可纵向显示) MariaDB [hidb]> SHOW TABLE STATUS LIKE 'tbl2'\G (查看tbl2的表) MariaDB [hidb]> SHOW TABLE STATUS WHERE Name LIKE 'tbl%'\G (查看tbl2开头的表)
创建tbl3,指明引擎为‘MyISAM’
MariaDB [hidb]> CREATE TABLE tbl3 (classid TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, classname VARCHAR(100) NOT NULL) ENGINE 'MyISAM';
查看引擎为‘MyISAM’的表
MariaDB [hidb]> SHOW TABLE STATUS WHERE Engine='MyISAM'\G
添加
MariaDB [hidb]> DESC tbl2; +-------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | | NULL | | +-------+----------------------+------+-----+---------+----------------+ MariaDB [hidb]> ALTER TABLE tbl2 ADD gender ENUM('F','M'); MariaDB [hidb]> DESC tbl2; +--------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | | NULL | | | gender | enum('F','M') | YES | | NULL | | +--------+----------------------+------+-----+---------+----------------+
删除gender
MariaDB [hidb]> ALTER TABLE tbl2 DROP gender; MariaDB [hidb]> DESC tbl2; +-------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | | NULL | | +-------+----------------------+------+-----+---------+----------------+
在name上创建一个索引
MariaDB [hidb]> ALTER TABLE tbl2 ADD INDEX (name); MariaDB [hidb]> DESC tbl2; +--------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+----------------------+------+-----+---------+----------------+ | stuid | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(60) | NO | MUL | NULL | | | gender | enum('F','M') | YES | | NULL | | +--------+----------------------+------+-----+---------+----------------+
删除索引
MariaDB [hidb]> ALTER TABLE tbl2 DROP INDEX id;
查看表上的索引的信息
MariaDB [hidb]> SHOW INDEXES FROM tbl2;
复制表结构
MariaDB [hidb]> CREATE TABLE tbl7 LIKE mysql.user;
复制表数据
MariaDB [hidb]> CREATE TABLE tbl8 SELECT Host,User,Password FROM mysql.user;
创建索引
MariaDB [hidb]> CREATE INDEX user ON tbl8(User); MariaDB [hidb]> SHOW INDEXES FROM tbl8; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl8 | 1 | user | 1 | User | A | 6 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ MariaDB [hidb]> CREATE UNIQUE INDEX host ON tbl8(Host,User); MariaDB [hidb]> SHOW INDEXES FROM tbl8; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl8 | 0 | host | 1 | Host | A | 6 | NULL | NULL | | BTREE | | | | tbl8 | 0 | host | 2 | User | A | 6 | NULL | NULL | | BTREE | | | | tbl8 | 1 | user | 1 | User | A | 6 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
删除索引
MariaDB [hidb]> DROP INDEX host ON tbl8; (不推荐使用删除) MariaDB [hidb]> SHOW INDEXES FROM tbl8; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tbl8 | 1 | user | 1 | User | A | 6 | NULL | NULL | | BTREE | | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
原创文章,作者:Linux.rookie,如若转载,请注明出处:http://www.178linux.com/79462