数据库的结构(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-8九、SQL-9二、SQL-9九、SQL-2003(如今使用的标准)
关于{RDBMS(关系型数据库管理系统)设计范式基础概念php
设计关系数据库时,听从不一样的规范要求,设计出合理的关系型数据库,这些不一样的规范要求被称为不一样的范式,各类范式呈递次规范,越高的范式数据库冗余越小。css
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。知足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步知足更多规范要求的称为第二范式(2NF),其他范式以次类推。通常说来,数据库只需知足第三范式(3NF)就好了。html
(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
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/TCPsql
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.源代码包:编译安装以前,须要先编译安装cmakeshell
安装命令:
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=0; 2.永久修改: 经过在配置文件中直接书写服务器参数或变量的赋值语句;重启服务便可生效; innodb_file_per_table = ON mysql_secure_installation:安全初始化脚本; **MySQL的用户和权限管理:** 用户帐号: 'Username'@'Hostname' skip_name_resolve = ON 'user'@