mariadb or mysql:
DBMS
RDBMS:关系型数据库管理系统
C/S:通过专有协议
关系模型:表(行、列),二维关系
范式:第一范式、第二范式、第三范式
关系运算:
选择
投影
数据库:表,索引,视图(虚表)
SQL:structurequery language
DDL,DML
编程接口:
存储过程
存储函数
触发器
事件调度器
过程式编程:选择,循环
三层模型:
物理层
逻辑层
视图层
解决方案:
oracle,sybase,infomix,DB2
mysql,mariadb,postgreSQL
mariaDB
插件式多线程
连接线程
守护线程
配置文件:集中式的配置,能够为msql的个应用程序提供配置信息
[mysqld] [mysqld_safe] [mysqld_multi] [server] [mysql] [mysqldump] parameter=value skip-name-resolve skip_name=resolve 查找路径/etc/my.cnf-->/etc/mysql/my.cnf-->$MYSQL_HOME/my.cnf-->--default-extra-file=/path/to/somedir/my.cnf-->~/.my.cnf安装方法:
osvendor:rpm
MYSQL:
rpm
展开即用
源码
centos7安装mariadb:
yum -y install mariadb-server mariadb mysql_secure_installation安装后的设定:
(1)为所有root用户设定密码
mysql>SET PASSWORD mysql>update mysql.user SET password=PASSWORD(‘your password’) WHERE clause;(2)删除所有匿名用户
mysql>DROP USER ‘’@’localhost’;上述两步骤可运行命令:mysql_sercure_installation替换
授权主机:
GRANT ALL PRIVILEGES ON *.* to ‘root’@'%' IDENTIFIED BY '密码';*.*:所有数据库所有表
‘root@%’:所有主机可通过root用户登录
(3)建议关闭主机名反解功能
元数据数据库:mysql
user,host等
mysql-->mysqld
客户端程序: mysqld:交互式的CLI工具: mysqldump:备份工具,基于mysql发起查询请求,并将查到的所有数据转换成insert等语句保存在文本文件中 mysqladmin:基于mysql协议管理mysqld mysqlimport:数据导入工具 非客户端工具: mysqlsamchk,myisampack如何获取程序默认使用的配置:
mysql --print-defaults mysqld --print-defaults客户端类应用程序的可用选项:
-u,--user= -h,--host= -p,--password= -P,--port= --protocol= -S,--socket= -D,--database= -C,--compress mysql –e “SQL”mysql的使用模式:
交互式模式:
可运行命令有两类:
\h,help
服务端命令:
SQL,需要语句结束符
脚本模式:
#mysql –uUSERNAME –pPASSWORD < /path/from/somefile.sql #mysql> soure /path/from/somefile.sql服务端(mysqld):工作特性有多重定义方式
命令行选项
配置文件参数
获取可用参数列表
mysqld –help –verbose获取运行中的mysql进程使用各服务器参数及其值
mysql> SHOW GLOBAL VARIABLES; mysql> SHOW [SESSION] VARIABLES;注意:其中有些参数支持运行时修改,会立即生效,有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效。
修改服务器变量的值:
mysql> help SET 全局: mysql> SET GLOBAL system_var_name=value; mysql> SET @@global.system_var_name=value; 会话: mysql>SET [SESSION] system_var_name=value; mysql>SET @@[session.] system_var_name=value; 状态变量:用于保存mysqld运行中的统计数据的变量 mysql>SHOW GLOBAL STATUS; mysql>SHOW [SESSION] STATUS;MySQL数据类型:
字符型 数值型 日期时间型 内建类型 字符型: CHAR,BINARY:定长数据类型 VARCHAR,VARBINARY:变长数据类型,需要结束符 TEXT:TINTEXT,TEXT,MEDIUMTEXT,LONGTEXT BLOB:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB ENUM,SET 数值型: 精确数值型: 整型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 十进制型:DECIMAL 近似数值型: 浮点型: FLOAT DOUBLE BIT 日期时间型: DATE TIME DATETIME TIMESTAMP YEAR(2),YEAR(4) 字符类型修饰符: NOT NULL:非空约束 NULL: DEFAULT ‘STRING’:指明默认值 CHARACTER SET ‘’:使用的字符集 COLLATION:使用的排序规则 mysql>SHOW CHARACTER SET; mysql>SHOW COLLECTION; 整型数据修饰 NOT NULL NULL DEFAULT NUMBER AUTO_INCREAMENT: UNSIGNED PRIMARY KEY|UNIQUE KEY NOT NULL mysql>SELECT LAST_INSERT_ID(); 日期时间类型修饰符; NOT NULL NULL DEFAULTSQL MODE:定义mysqld对约束等的响应行为:
修改方式: mysql>SET GLOBAL sql_mode=’MODE’; mysql>SET @@global.sql_mode=’MODE’; 需要修改权限:进队修改后新创建的会话有效,对已经建立的会话无效 mysql>SET SESSION sql_mode=’MODE’; mysql>SET @@session.sql_mode=’MODE; 常用MODE:TRADTTIONAL,STRICT_TRANS_TABLES,OR STRICT_ALL_TABLES;SQL:DDL,DML
DDL:数据定义语言
CREATE,ALTER,DROP
DB组件:数据库、表、索引、视图、用户、存储过程、触发器、事件调度器等
CREATE的常用命令:
CREATE DATABSE CREATE EVENT CREATE FUNCTION CREATE FUNCTION UDF CREATE INDEX CREATE PROCEDURE CREATE SERVER CREATE TABLE CREATE TABLESPACE CREATE TRIGGER CREATE USER CREATE VIEWDML:数据操作语言
INSERT,DELETE,UPDATE,SELECT数据库:
CREATE,ALTER,DROP {DATABASE|SCHEMA} [IF EXISTS] [IF NOT EXISTS]表:二维关系
设计表:遵循规范
定义:字段,索引
字段L字段名,字段数据类型,修饰符
约束,索引:应该创建在经常用作查询条件的字段上
索引:实现级别在存储引擎
B+索引,hash索引,R树索引,全文索引
聚焦索引,非聚焦索引
创建表:CREATE,TABLE
获取帮助:
在mysql交互环境中
MariaDB [(none)]>help create table
(1)直接创建
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options](2)通过查询现存的表创建,新表会直接插入查询到的数据
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [partition_options] select_statement(3)通过复制现存的表结构创建,不复制数据
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) }注意:storageengine实质表类型,也即在表创建时指明其使用的存储引擎
同一个库中标要使用同一种存储引擎类型
查看表结构
describe tablename;查看表状态信息
show tables; SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]修改表:alter table
删除表:drop table
MYSQL基础
单进程多线程
用户连接:连接线程
MYSQL数据文件类型
数据文件、索引文件
重做日志、撤销日志、二进制日志、错误日志、查询日志。慢查询日志、(中继日志)
DDL & DML:
按特定数据结构存储的数据
索引类型:
聚焦索引、费聚焦索引:数据是否与索引存储在一起
主键索引、辅助索引
稠密索、稀疏索引:是否索引了每一个数据项
B+ TREE、HASH、R TREE
简单索引、组合索引
左前缀索引
覆盖索引
管理索引的途径
创建索引:创建表时指定:create index
创建或删除索引:修改表的命令
删除索引:drop index
查看表上的索引:
show {index | indexes | keys} {from | in } tab_name [from | in] db_name] [where expr] explain视图:VIEW
虚表:
创建方法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]删除视图:
DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]DML:insert,delete,update,select
insert:一次插入一行或多行
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] Or: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] Or: INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]update:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]注意:一定要有限制条件,否则将修改所有行的指定字段
where
limit
delete:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]注意:一定要有限制条件,否则将清空表中的所有数据
where
limit
查询:
查询执行路径中的组件:查询花村、解析器、预处理器、优化器、查询执行引擎、存储引擎
select语句的执行流程
from clause-->where clause-->group by -->having clause-->order by-->select-->limit单表查询:
SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]distinct:数据去重
SQL_CACHE:显式指定存储查询结果与缓存之中 SQL_NO_CACHE:显式指定查询结果不予缓存 show global variables like ‘query%’; query_cache_type的值为’ON’时,查询缓存功能打开 select的结果符合缓存条件即会缓存,否则,不予缓存 显式指定SQL_NO_cache,不予缓存 quer_cache_type的值为’DEMAND’时,查询缓存功能按需进行 显式指定SQL_CACHE的select语句才会缓存,其他均不会缓存字段显示可以使用别名:
col1 as name1,col1 name1
where字句:指明过滤条件实现“选择”功能
过滤条件:布尔型表达式 算术操作符:+,-,*,/,% 比较操作符:=,!=,>,<,<>,>=,<=,<=> begin min_num and max_num in (element1,element2,…) is null is not null like: %:任意长度的任意字符 _:任意单个字符 rlike: regepx:匹配字符串可用正则表达式书写模式 逻辑操作符: not and or xor group:根据指定的条件吧查询结果进行“分组”以用于做“聚合” avg(),max(),min(),count(),sum() order by:根据指定字段对查询结果进行排序 升序:ASC,默认 降序:AESC limit[[offset,]row_count]:对查询的结果进行输出行行数限制 对查询结果中的数据请求施加“锁”。 for update:写锁 lock in share mode:读锁,共享锁多表查询:
交叉连接:笛卡尔积
内连接:
等值连接:让表之间的字段以“等值”建立连接关系
不等值连接
自然连接
外连接:
左外连接
from tb1 left join tb2 on tb1.col=tb2.col右外连接
from tb1 right join tb2 on tb1.col=tb2.col子查询:在查询语句嵌套者查询语句
基于某语句的查询结果再次进行的查询
用在where字句中的子查询:
(1)用于比较表达式中的子查询:子查询仅能返回单个值
select name,age from students where age>(selsct avg(age) from students);(2)用于in中的子查询:
select name ,age from students where age in (select age from teachers);(3)用于exists
用于from子句中的子查询:
使用格式:select tb_alias.col,… from (select clause) as tb_alias where clause; 示例:select s.aage,s,classid from select avg(age) as aage,classid from students shere classid is not null group by classid) as s shere s.aage>30;联合查询:union,合并结果
select name,age from students union select name,age from teachers;执行语句时前面加上explain,后面加上\G会显示语句的详细信息。
如explain select* from wp_users\G
注意后面没有分号。
MariaDB [worldpress]> explain select * from wp_users\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: wp_users type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 1 Extra: 1 row in set (0.00 sec) MariaDB [worldpress]>