数据库的结构(3种):层次,网状,关系型(用的最多);
DBMS的三层模型:
视图层;面向最终用户;
逻辑层;面向程序员或DBA;
物理层;面向系统管理员;
关系型数据库管理系统——RDBMS:
主要的组成部分是表;表是由行(实例,实体,记录)和列(字段,域)组成;
关系型数据库管理系统的实现:
商业方案:Oracle,Sybase{为微软提供了思路出现SQL-server},Infomix{IBM收购},DB2{IBM}
开源方案:PostgreSQL,mysql,MariaDB
SQL:Structured Query Language,结构化查询语言;
ANSI(美国国家标准协会): 1986年定义SQL系列标准,89年实施:
SQL-86(草案)、SQL-89、SQL-92、SQL-99、SQL-2003(现在使用的标准)
关于{RDBMS(关系型数据库管理系统)设计范式基础概念
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(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的基础上,任何非主属性不得传递依赖于主属性。
}
NoSQL:Not-Only SQL,反关系型数据库; //针对关系型数据库提出
Memcached、Redis:键入值,并将数据存储在内存中,查询效率极高
MangoDB:完成数据库切片
Hbase:配合大数据,文档型数据库用来存放大型数据
MySQL:http://www.mysql.com
MariaDB:http://mariadb.org 主流的发行版本有两个:5.5.x 和 10.x.y
Percona XtraDB/MySQL:https://www.percona.com
MySQL/MariaDB:
C/S架构,客户端/服务器架构形式:
客户端工具:
命令行工具:mysql, mysqladmin, mysqldump, ...
图形工具:phpMyAdmin, SQLyog, navicot, ...
服务器端程序:
mysqld_safe(默认)、msyqld、mysqld_multi
客户端到服务器端的连接方式:
1.客户端和服务器端在同一台主机上:
1) Unix Socket
2) IPv4 Socket
3) IPv6 Socket
2.客户端和服务器端分别在不同主机上:
1) IPv4 Socket
2) IPv6 Socket
关系型数据库管理系统:
数据模型:关系模型,这里说的是二维关系
1.表:为了满足范式的设计要求,将一个数据集拆分成多个; //在一个表中,可以没有任何一行,但至少保证有一列;
行:row(实例,实体,记录); //记录数据的特征;
列:column(字段,域); //记录数据的某种属性;
2.视图:view,虚表;包含已知表中的部分列;
3.索引:index,将表中的某一个或某些字段抽取出来,单独将其组织成一个独特的数据结构,以便于提高数据检索效率;
支持B-tree(平衡树)索引{默认使用的索引方式}、hash(哈希)索引、空间索引
如果服务器端的应用程序想要访问数据库,就要有访问数据库的能力,应用程序就需要一个SQL接口,使用SQL语句通过SQL接口发送给数据库管理系统,从而管理数据库。数据库管理系统需要通过存储引擎来存储或删除存储设备中的文件。
SQL接口:计划执行器,分析器,操作求解器,优化器;
提供了一种能够跟数据库管理系统做交互式操作的接口(1),类似于shell;也可以提供编程功能(2);
(1)交互式接口功能:通过SQL接口处理SQL语句;
DDL:Data Definition Language,数据定义语言:CREATE,ALTER,DROP
DML:Data Manipulation Language,数据操纵语言:INSERT,DELETE,UPDATE,SELECT
DCL:Data Control Language,数据控制语言:GRANT,REVOKE
(2)编程功能:变量,函数,循环,选择;
存储过程:Procedure,使用CALL语句调用;
存储函数:Function,使用SELECT语句调用;
触发器(类似条件选择):Trigger;
事件调度器(Event Schedule);基于事件的条件选择,类似于触发器但基于事件
例程:Routine,过程 + 函数
**事务**:Transaction,组织多个操作为一个整体,这个整体所包含的所有操作,要么全部都执行,要么全部不执行;只要有任何操作没有被成功执行,则整个事务回滚(Rollback);
在MySQL中,事务是存储引擎的属性;是否支持事务的判断标准,即:ACID标准(事务四大特性);
A:Atomicity,原子性(不可分割);
C:consistency,一致性(执行开始的状态和结束的结果保持一致);
I:Isolation,隔离性(加锁,多个事务分隔开来不能同时进行);
D:Durability,持久性(对数据修改结果要不发生变化);
**约束**:Constraint,向数据表中插入的数据必须遵守的限制规则(范式);
(1.主键约束:
主键:一个或多个字段构建的能够唯一标识记录的组合;
主键约束:填入主键的数据,必须不能和已经填写的数据相同,而且不能为空;
(2.外键约束:也称为"引用性约束";
外键:一个表中的某个字段和其他表中的字段表达的意义相同;
外键约束:一个表中的某个字段能插入的数据,取决于另一个表的主键中包含的数据;
(3.唯一键约束:
唯一键:一个或多个字段构建的能够唯一标识记录的组合;
唯一键约束:填入唯一键的数据,必须不能和已经填写的数据相同,但可以为空;
(4.检查性约束:
也称为"表达式约束";取决于表达式的书写规范;
关系运算:
选择:根据指定的条件挑选出符合条件的行;
投影:根据指定的条件挑选出符合条件的列;
连接(具有多种连接方式):多表的关联操作;
**数据抽象分布:**
物理层(最底层):决定数据的存储格式,即:如何将数据组织成物理文件;
逻辑抽象层(中间层:存储引擎,用来上下两个层次的衔接转换):描述了数据库存储什么样的数据,以及数据之间存在怎样的关系;
视图层(最顶层):描述了数据库中全部或部分数据,以表的形式进行展示;
关系模型的分类:关系模型、实体-关系模型(E-R模型)、基于对象的关系模型、半结构化的关系模型:XML
MySQL和MariaDB:
共同点:
1.都支持插件式的存储引擎(把存储引擎当做功能模块来使用); //存储引擎就是表类型;
2.MySQL/MariaDB服务端口号:3306/TCP
MariaDB的特性:
1.相对于MySQL而言,可以包含更多的存储引擎;
1)MyISAM:检索高效但是不支持事务;
Aria:增强版的MyISAM,改善了MyISAM中的崩溃处理机制;
2)InnoDB:支持事务;行级锁;
Percona-XtraDB:增强版的InnoDB;
2.诸多的扩展和新特性;
3.提供了非常多的测试组件;
4.Truly Open Source(MariaDB的发行机制:真正开源)
MySQL的发行机制(2种):
Enterprise:企业版,提供了丰富的组件和功能;如:线程池,强大的可视化监控组件等;
Community:社区版,只有简单的数据库功能
安装MySQL或MariaDB:
1.基于包管理器格式的程序包直接安装,如:rpm包,deb包等;
1) OS发行商在光盘镜像中提供; //版本比较老旧
2) 由程序官方提供;
2.官方提供的通用二进制程序包;直接解压缩程序包即可使用;
3.源代码包:编译安装之前,需要先编译安装cmake
安装命令:
CentOS 6:yum install mysql-server
CentOS 7:yum install mariadb-server
MySQL的程序环境:
服务器端程序:mysql-server(CentOS6), mariadb-server(CentOS7)
服务启动脚本:
/etc/rc.d/init.d/mysqld
常用的二进制文件:
/usr/bin/mysql_install_db //做数据库的初始化安装
/usr/bin/mysql_secure_installation //做安全初始化安装;对使用的管理员用户做密码设置,默认是空密码;删除空用户和空数据表;只允许root用户本地登录不允许远程登录
/usr/bin/mysqld_multi //多实例启动mysql,可以一次启动多个mysql进程,不同的进程监听不同的端口号
/usr/bin/mysqld_safe //默认启动safe选项,安全服务进程
数据目录:
/var/lib/mysql //默认的初始化数据库目录,未初始化之前目录中没有内容
主配置文件:
/etc/my.cnf
客户端程序:mysql, mariadb
常用的二进制文件:
/usr/bin/mysql //客户端连接工具
/usr/bin/mysqladmin //非交互式的数据库管理工具
/usr/bin/mysqlbinlog //二进制日志的查看和管理工具
/usr/bin/mysqldump //温备份工具
主配置文件:/etc/my.cnf
ini风格的配置文件:在整个配置文件中,以"[]"划分成多个配置段,每个配置指令仅针对于其上方直接归属的"[]"中表示的组件生效;
在mariadb版本中/etc/my.cnf中添加:
innodb_file_per_table = ON //打开对创建或删除表的影响,主要是删除InnoDB存储引擎的表耗用时间应该更长
skip_name-resolve = ON //跳过名称解析,不做名称反解
保存后重启服务(MariaDB版本一般在CentOS7中):systemctl restart mariadb.service //如果重启不成功,使用 rm -rf /var/lib/mysql/*文件内容清空,因为有其他数据库内容,不能重启数据库
使用rpm包安装的mysql或mariadb的默认配置文件加载顺序:
/etc/mysql/my.cnf (默认文件不存在)--> /etc/my.cnf(一般默认先加载) --> ~/.my.cnf //后加载的配置项会覆盖先前配置项,越靠后的文件生效越优先
在使用mysqld_safe命令启动mysqld服务进程时,可以通过一些选项来更改或附加配置文件的读取顺序;
-c, --defaults-file=name
Like --config-file, except: if first option, then read
this file only, do not read global or per-user config
files; should be the first option
如果在命令行中给出此选项,则此选项必须是第一个选项,此时,仅从此选项指定的配置文件中读取参数值,不会再读取任何其他的配置文件,包括全局的和个人的;
-e, --defaults-extra-file=name
Read this file after the global config file and before
the config file in the users home directory; should be
the first option
如果在命令行中给出此选项,则此选项必须是第一个选项,此时,将所有其他的配置文件按照指定顺序读取完成之后,最后再附加读取此选项指定的配置文件中参数值配置,只要有参数配置冲突,则必然以此选项指定的文件中的参数中为最终生效的参数值;
配置文件的风格:
ini风格的配置文件;即:分段式配置文件;
为MySQL的各应用程序提供与之对应的配置参数信息:
服务器端应用程序:
[server]
socket=
datadir=
basedir=
[mysqld]
socket=
[mysqld_safe]
socket=
[mysqld_multi]
客户端应用程序:
[client]
user=
password=
host=
[mysql]
user=
password=
host=
[mysqladmin]
[mysqldump]
配置文件中各参数的定义方法:
PARAMETER_NAME = VALUE
PARAMETER_NAME=VALUE
PARAMETER_NAME
innodb_file_per_table = ON
innodb-file-per-table = ON
defaults-file=/tmp/my.cnf
defaults_file=/tmp/my.cnf
skip_name_resolve=ON
skip_name_resolve
**mysql相关基本命令:
mysql命令 - 基本的交互式命令行客户端工具;**
格式:mysql [options] [db_name]
常用选项:
--database=db_name, -D db_name
用于指定使用mysql客户端程序连接到mysql服务器之后,默认使用哪个数据库;如果不给定该选项,默认为NULL;
--execute=statement, -e statement
连接至mysql服务器并将后面的SQL语句交给服务器运行之后返回执行结果并直接退出交互式登录模式,返回bash命令提示符;
--host=host_name, -h host_name
用于指定此次mysql程序所连接的mysql服务器的主机名称或主机IP地址;默认是localhost(127.0.0.1);
--user=user_name, -u user_name
用于指定连接mysql服务器时使用的用户名;默认的用户名为:'root'@'localhost'
mysql的用户名:USERNAME@HOSTNAME
USERNAME表示登录的用户名称;
HOSTNAME表示用户通过哪个特定的客户端主机连接到mysql服务器;
如:用户'root'@'172.16.0.1':表示只有172.16.0.1主机可以通过root用户连接至myslq服务器;
HOSTNAME中可以使用通配符:
_:任意单个字符;
%:任意长度的任意字符;
如:'root'@'172.16.%.%'
表示172.16.0.0/16网段中的所有主机都可以使用root用户连接至mysql服务器;
如:'root'@'172.16._.%'
表示172.16.0.0~172.16.9.255地址的主机都可以使用root用户连接至mysql服务器;
注意:默认情况下,所有用户均为空密码,并且还有匿名用户存在,因此,为了增强安全性,可以使用mysql_secure_installation命令完成账户安全初始化;使得mysql服务器仅能让root用户在本地登录,并且移除匿名用户和test数据库;
--password[=password], -p[password]
用于指定连接mysql服务器时,为对应用户指定身份验证所需密码;如果密码部分省略不写,执行命令后需要在新行中给出密码,这种方式相对更安全;
mysql命令提示符下的交互式命令:
客户端命令:mysql程序自身完成或执行的命令,在客户端所在地运行;
clear (c):停止发送当前正在键入的命令或语句并直接返回提示符;
delimiter (d):设置语句结束标记;默认的语句结束标记为";";
ego (G):将其前面的语句送往mysql服务器运行,并将返回的结果纵线显示;
go (g):无需输入语句结束标记,直接将其前面的语句送往服务器执行;
exit,quit (q):退出mysql程序的交互式模式;
status (s):获取mysql服务器的状态信息;
use (u):将指定的数据库作为当前正在使用的数据库;
source (.):可以在mysql交互式模式中执行SQL脚本文件;
?,help (?):获取客户端命令的帮助信息;
服务器端命令:mysql客户端程序通过mysql协议向mysql服务器端发送的SQL语句;
注意:在书写服务器端命令时,每个SQL语句都必须以指定的结束标记结尾,默认是";",修改结束标记的命令为:mysql >d
服务器端命令代表的SQL语句,可以分为三类:
DDL:数据定义语言,主要用于管理数据库及数据库的各组件;
组件例如:数据库,表,视图,索引,用户,存储过程,存储函数,触发器,事件等;
常用的SQL语句:CREATE,DROP,ALTER,SHOW
DML:数据操纵语言,主要用于管理表中的数据,实现数据的增,删,改,查等操作;
常用的SQL语句:INSERT,DELETE,UPDATE,SELECT
DCL:数据控制语言,主要用于管理数据访问的授权;
常用的SQL语句:GRANT,REVOKE
获取指定的SQL语句的帮助信息(所有的SQL语句本身,不区分字符大小写;建议使用小写字母书写SQL语句);
mysql> help SQL_STATEMENT_KEYWORK //mysql版本数据库,一般在CentOS6及以前的版本中
MariaDB [(none)]> help SQL_STATEMENT_KEYWORK //MariaDB版本数据库,一般在CentOS7中使用的默认数据库
在mysql中,database(数据库)和schema(方案)这两个单词是一样的;
利用mysql客户端工具实现mysql数据库的相关管理操作:
数据库管理:
创建数据库:
格式:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [ create_specification ]
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
示例:
创建一个名为mydb的数据库并设定字符集是utf8:
mysql> create database mydb character set = utf8;
字段含义:
DATABASE | SCHEMA:表示要创建的对象的类型为"数据库"或"方案";
IF NOT EXISTS:如果指定要创建的数据库已经存在,则不报错也不执行创建操作;
db_name:要创建的数据库的名称;
CHARACTER SET [=] | charset_name:为新创建的数据库指定其默认的字符集;
示例:mysql> show character set:查看mysql服务器所支持的所有字符集及默认排序规则;
COLLATE [=] | collation_name:
为新创建的数据库指定字符集的排序规则;
示例:mysql> show collation:查看mysql服务器上每种字符集所支持的所有的排序规则;
修改数据库的属性(如果数据库中已经有表,且表中已经插入数据时,更改数据库的字符集和排序规则可能会导致已存数据的乱码):
ALTER {DATABASE | SCHEMA} [db_name] alter_specification ... //要指定数据库名称,否则删除所有存在的数据库
alter_specification:
[DEFAULT] CHARACTER SET [=] charset_name :修改字符集
| [DEFAULT] COLLATE [=] collation_name:修改字符集的排序规则
删除数据库:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name //加上[IF EXISTS],删除一个不存在的数据库执行但不会报错,如果不加[IF EXISTS]删除一个不存在的数据库会执行然后报错,*一定要指定数据库名称,否则或删除所有库*
表管理(关系型数据库的核心,数据都存储于表中):
表:二维表,包括行和列;
行(实体,实例,记录):用来描述某个具体事物的某些属性;对于表来说,表中可以没有任何一行数据,此类表称为"空表";
列(字段,域):用来定义或描述某个具体的属性的格式或定义方式;对于表来说,没有列的表是无意义的,表中至少要有一列;
数据类型:
定义数据类型的意义:
1.决定数据的存储格式;
2.决定数据所能参与的运算;
3.决定数据可以表示的有效范围;
对于mysql来说,支持的数据类型:
数值型:
精确数值型:
MySQL数据类型 括号中m的值(bits) 有符号范围 无符号范围
tinyint(m) 1个字节 (-128~127) (0~256)
smallint(m) 2个字节 (-32768~32767) (0~65536)
mediumint(m) 3个字节 (-8388608~8388607) (0~1677216)
int(m) 4个字节 (-2147483648~2147483647) (0~2147483648*2)
bigint(m) 8个字节 (+-(9.22*10)^18) (0~((9.22*10)^18)*2)
是否有符号,可以在定义时规定,默认为有符号,可以用unsigned标识来表示无符号
通过规定数据的显示宽度,达到统一显示的目的。
注意定义格式:alter table tbl_int add c tinyint(2) zerofill; //需要使用前导零来填充以达到目的:zerofill;其中若数大于显示宽度,则直接显示原数字
近似数值型:
FLOAT:单精度浮点数
示例:一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位
DOUBLE:双精度浮点数
字符串型:
变长字符型:
VARCHAR(length):字符不区分大小写;最大存放65536个字符;
VARCHAR(30)
chenliang$ -- 字符只占了VARCHAR总空间30字节大小中的10字节,末尾的$用来表示字符结束并将字符占用VARCHAR空间大小+1,如果空间已满则不显示$
VARBINARY(length):字符区分大小写;最大存放65536个字符;
定长字符型
CHAR(length):字符不区分大小写;256个字符;
CHAR(30)
chenliang -- 字符虽然只占了9字节存储空间,但是必须要占用30字节的空间
BINARY(length):字符区分大小写;256个字符;
对象存储类型(大型的数据用于存储文本块或图像、声音文件等二进制数据类型,比指定类型支持的最大范围大的值将被自动截短):
TEXT:存储大量的纯文本信息;
TINYTEXT:可最大存放256字节
TEXT:可最大存放65536字节
MEDIUMTEXT:可最大存放16777736字节
LONGTEXT:可最大存放43亿9千万字节
BLOB:存储非纯文本信息经过流式化处理之后的二进制数据;
TINYBLOB:可最大存放256字节
BLOB:可最大存放65536字节
MEDIUMBLOB:可最大存放16777736字节
LONGBLOB:可最大存放43亿9千万字节
日期时间型:
类型 名称 大小(字节) 格式
DATE 日期型 3 YYYY-MM-DD
TIME 时间型 3 HH:MM:SS
TIMESTAMP 时间戳类型 8 YYYYMMDD HHMMSS
DATETIME 日期时间型 8 YYYY-MM-DD HH:MM:SS
YEAR 年份 2/4 YY/YYYY
内置特殊类型:
集合类型:
SET:集合,插入的数据可以是集合中各个元素的任意组合;
SET('a','b','c','d')
a
aa
aab
abdc
枚举类型:
ENUM:枚举,只能存放列举出来的固定的字符或字符串;
ENUM('F','M')
F
M
数据类型相关的修饰符:
与整数类型相关的:
UNSIGNED,无符号整数; //UNSIGNED修饰符必须紧跟在精确数值类型标识符之后;
AUTO_INCREMENT [=] Value:
整型数据的自动递增或自动递减;
通用修饰符:
NOT NULL:非空约束;一般是为主键做约束;
DEFAULT Value:为字段设置默认值;
创建表:
CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options]
create_definition(创建定义项):表中各个列是怎么定义的,列的格式,列的类型
col_name :列的名称
格式: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]
选项:
data_type [NOT NULL | NULL]:数据类型 [不为空|空]
[DEFAULT default_value]:是否设置默认值为多少
[AUTO_INCREMENT]:默认自动增长步长为1
[UNIQUE [KEY]:定义唯一键
[PRIMARY] KEY]:定义主键
[COMMENT 'string']:定义注释内容
[COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]:列的格式{静态|动态|默认格式}
[STORAGE {DISK|MEMORY|DEFAULT}]:存储方式{磁盘|内存|默认位置}
table_options:表选项
ENGINE [=] engine_name | AUTO_INCREMENT [=] value
示例:
mysql> create table stu_info (SID tinyint unsigned not null auto_increment primary key,SName varchar(50) not null,SAge tinyint unsigned,Gender enum('F','M'));
显示表的结构:mysql> desc stu_info;
显示创建表的SQL语句:mysql> show create table stu_info;
删除表:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
示例:mysql> drop table stu_info;
修改表:修改表的各个字段的属性和定义的内容;
ALTER TABLE tbl_name [alter_specification [, alter_specification] ...]
增加表的字段:
ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
示例:mysql> alter table stu_info add Stel_num varchar(20) not null after SAge;
修改表的字段属性
CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
示例:
mysql> alter table stu_info change column Stel_num SMobile char(11) not null after Gender;
mysql> alter table stu_info modify SAge tinyint unsigned after Gender;
删除表的字段:
DROP [COLUMN] col_name //删除字段的操作可能会引起数据的变化,所以,删除字段时要慎重;
示例:mysql> alter table stu_info drop SMobile;
数据管理:实质上就是管理表中的数据;
向表中添加数据:
INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... //如果列名(col_name,...)省略不写,则默认表示为为表的每一列添加数据
Or:
INSERT [INTO] tbl_name SET col_name={expr | DEFAULT}, ...
示例:
mysql> insert into stu_info values (1,'tom','M',25),(2,'jerry','F',28);
mysql> insert into stu_info (SName) values ('Alice'),('James');
mysql> insert into stu_info set SName='zhangsan',Gender='M',SAge=20;
注意:
1.如果向表中插入的value是字符串,则value必须使用引号引用;
2.如果向表中插入的value是数字,则value一定不能用引号引用;
查看表中的数据内容:
SELECT select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition]
1.显示整张表:
SELECT * FROM tbl_name;
2.投影:显示指定的或符合要求的列;
SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name;
示例:mysql> select Host as Hostname,User as Username,Password as Pass from user;
3.选择:显示符合要求或匹配条件的行;
SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition;
WHERE子句用于指明选择时依据的条件:
col_name 操作符 value
操作符:
1) 比较操作符:>, <, >=, <=, ==, !=
2) 逻辑操作符:与:and,或:or,非:not
3) 特殊操作符:
BETWEEN...AND...
LIKE "PATTERN",其中"PATTERN"中可以适当添加通配符,如:%或_;
RLIKE "PATTERN",使用正则表达式对字符串进行模式匹配;在使用RLIKE进行数据检索时,索引不生效,检索效率低,速度慢,不推荐使用;
IS NULL或IS NOT NULL:判断指定字段是否为空;
示例:
mysql> select * from stu_info where SAge >= 30;
mysql> select * from stu_info where SAge >= 10 and SAge <=30;
mysql> select * from stu_info where SAge between 10 and 30;
mysql> select * from stu_info where Gender is [not] null;
mysql> select * from stu_info where SName like '%a%';
mysql> select * from stu_info where SName rlike '^j';
mysql> select * from stu_info where SName rlike 'e$';
4.排序:
SELECT col_name AS con_alias[,col_name AS con_alias,...] FROM tbl_name WHERE condition [ORDER BY {col_name | expr | position} [ASC | DESC], ...]
示例:
mysql> select * from stu_info order by SAge; 默认升序排序;
mysql> select * from stu_info order by SAge desc; 降序排序; //末尾加desc,表示降序
修改表数据内容:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
示例:
mysql> update stu_info set SName='Obama' where SID=5;
mysql> update stu_info set SAge=SAge+1;
mysql> update stu_info set SAge=SAge+100 where SID in (1,3,5,7);
注意:修改数据时,一定要考虑清楚是否要添加where条件子句;如果不写where子句,默认修改全表;
删除表数据:
DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
示例:
mysql> delete from stu_info where SID > 3;
mysql> delete from stu_info;
注意:在使用UPDATE和DELETE语句时,除非必要,否则一定要使用WHERE子句或ORDER BY + LIMIT子句来限制要操作的数据;否则即为全表操作;
mysqladmin命令:
mysqladmin - client for administering a MySQL server
常用选项:
-u, -h, -p, -P, -D, -S
各选项功能同mysql命令的选项功能;
常用子命令:
create db_name:创建数据库;
drop db_name:删除数据库;
flush-hosts:清除服务器缓存中所有信息;
flush-logs:清除日志,让日志滚动;
flush-privileges:刷新授权表;
flush-tables:为表加锁;
password new-password:为指定的用户设置新密码;
start-slave:在msyql的集群服务中的从节点启动用于实施复制功能的线程;
stop-slave:在msyql的集群服务中的从节点关闭用于实施复制功能的线程;
shutdown:停止服务;
mysqld_safe命令:用于启动mysql服务,定义mysql的工作特性;
格式:/usr/bin/mysqld_safe [OPTIONS]
注意:所有给出的 OPTION(--option)都是一次性生效;如果期望配置参数永久有效,需要将此类配置参数及参数值直接定义在配置文件中即可;
服务器运行时变量/服务器运行时参数:MySQL的运行工作特性;这里特性有两种:
1.全局特性:
在全局范围均有效的服务器参数所配置定义的工作特性;将会作为每个mysql的会话连接的默认特性参数;
2.会话特性:
仅针对于本次mysql的连接会话生效的特性参数;
查看已经生效的mysql运行参数(特性,变量)
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
示例:
show [global] variables like '%innodb%';
查看所有名字中包含innodb字样的服务器参数及参数值;可以一次显示多个;
show [global] variables like 'innodb_file_per_table';
仅查看指定名称的服务器参数的参数值;
select @@[global.]innodb_file_per_table;
仅查看指定名称的服务器参数的参数值;
服务器状态参数/服务器状态变量:MySQL工作时的统计信息;有两种状态参数:
1.全局
2.会话
查看与状态及统计信息相关的参数/变量的值;
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
示例:
show [global] status like '%innodb%';
查看所有名字中包含innodb字样的服务器状态参数及其值;可以一次显示多个;
show [global] staus like 'Com_select';
仅查看指定名称的服务器状态参数的值;
服务器变量/服务器参数的修改或调整方法:
1.运行时修改:
MariaDB [(none)]> SET [GLOBAL|SESSION] system_var_name = expr;
MariaDB [(none)]> SET @@[GLOBAL.|SESSION.]system_var_name = expr;
示例:
set global innodb_file_per_table=1;
set @@global.innodb_file_per_table=