mysql基础
数据模型:
数据模型:层次模型、网状模型、关系模型、……
关系模型:
二维关系:表 行:row, entity 列:colume, attribution 索引:数据结构,辅助完成数据查找; 较少的代价,完成数据查找 但是带来的副作用时,导致数据修改速度变慢。 原始数据发送改变,索引也要改变。
数据库管理系统
DMBS:DataBase Management System RDBMS:Relational DBMS
关系型数据库: SQL引擎:向用户提供逻辑视图 存储引擎:Storage Engine 将数据以块级别存储在磁盘设备上。一定程度上有类似文件系统的功能。 注:关系型数据提供两种视图,向用户提供逻辑布局,存储上提供物理布局。并能够将物理布局完美的映射到逻辑布局 逻辑布局:逻辑上是表结构 物理布局:物理上存储上的数据流
SQL接口(SQL引擎):
客户端要与SQL交互,就能够与SQL的API交互。交互的方式使用SQL协议进行交互。 SQL解释用户的SQL语句,交给存储引擎处理。
SQL:Structure Query Language 结构化查询语言 ANSI:SQL-标准,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, ... SQL代码:支持脚本 存储例程:storage routing 存储过程:storage procedure 过程没有返回值 过程调用使用call 存储函数:storage function 函数有返回值 函数调用使用select 触发器:trigger 有一个监视器,监视对象一旦满足某个条件或动作就执行某个行为。 事件调度器:event scheduler 类似系统计划任务,定期或周期性的执行某个代码
SQL引擎和存储引擎的关系像shell和内核之间的关系。
事务:一个由单个或多个SQL语句组成的不可分割原子操作(一般为写入语句),Transaction;
A:20000 B: 3000 A给B转账5000,A要减去5000,B要加上5000 关系型数据库是否满足事物,要通过ACID测试 ACID: A: 原子性;不可分割,要么都执行,要么都不执行。 C:一致性;从一个一致状态转到另一个一致状态。 I:隔离性;只有一个事物结束,才能执行另一个事物 比如一个人用A的账户给B转账10000,另一个人在异地取款1500.两个事物不能交叉进行。 D:持久性;存储到设备中,不能事物结束后,还没写入设备。否则断电数据丢失。
满足事物性的数据库,并发性较低。隔离是有级别的,隔离级别低并发较高,隔离级别高并发则较低。
博客作业:amp的各种部署方式;
回顾: fpm、amp编译安装、MariaDB fpm: pm=static|dynamic /pm-status ?json, ?xml, ?html, ?full
amp编译安装: 考虑:如何做到服务开机自启? Unit File, Init Script? MariaDB: 事务:ACID
基础概念:
数据类型: 作用:存储格式、数据范围、所能参与的运算、排序方式
字符型: 定长字符型:CHAR(#),BIARNY(#) 变长字符型:VARCHAR(#),VARBINARY(#) 对象存储: TEXT BLOB 建类型:ENUM,SET 数值型: 精确数值型: INT:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 近似数值型: FLOAT DOUBLE 日期时间型: DATE TIME DATETIME TIMESTAMP YEAR 修饰符:NOT NULL, DEFAULT, 类型符:UNSIGNED
数据库的设计范式:
第一范式:字段是原子性的; 第二范式:存在可用的主键; 第三范式:任何字段都不应该依赖于其它表的非主键字段; 数据约束:向数据表中插入数据时要遵守的限制规则 主键:primary key,表上一个或多个字段的组合,填入主键字段中的数据,必须不同于已经存在的其它行的相同字段上的数据,而且也不能为空;一个表只能存一个主键; 惟一键:unique key,表上一个或多个字段的组合,填入其中字段中的数据,必须不同于已经存在的其它行的相同字段上的数据,但可以为空;一个表可以有多个惟键; 外键:foreign key,一个表中的外键字段中所能够插入的数据取值范围,取决于引用的另一个表上主键字段上的已经存在数据集合; 检查条件约束:check,自定义的逻辑表达式;
MariaDB的基础应用:
MariaDB程序组成:
C:Client mysql mysqladmin mysqldump mysqlbinlog ... S:Server mysqld mysqld_safe mysqld_multi
管理工具程序:
myisampack myisamchk ...
基于套接字通信
IPv4:PORT IPv6:PORT Unix_Sock:/var/lib/mysql/mysql.sock, /tmp/mysql.sock
命令行客户端程序mysql
mysql [OPTIONS] [database] 常用选项: -uUSERNAME -hHOST -pPASSWORD -Ddb_name -S sock_file_path -P port -e 'STATEMENT'
命令:
客户端命令:在客户端执行; mysql> help \?:获取可用的命令帮助; \q:退出客户端程序; \d CHAR:自定义语句结束符; \g:语句结束标记; \G:语句结束标记,竖排显示结果; \! SHELL_CMD:运行shell命令; \s:当前连接及服务器相关的状态信息; \. 服务端命令:SQL语句,发往服务端运行,并取回结果;需要显式的语句结束符; DDL:数据定义语言,主要用于数据库组件,例如数据库、表、索引、视图、触发器、事件调度器、存储过程、存储函数; CREATE, ALTER, DROP DML:数据操纵语言,CRUD操作,主要用于操作表中的数据; INSERT,DELETE,UPDATE,SELECT DCL:数据控制语言 GRANT, REVOKE
SQL语句:
获取帮助: mysql> help KEYWORD mysql> help contents
数据库管理:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name DROP {DATABASE | SCHEMA} [IF EXISTS] db_name 相关命令: SHOW CHARACTER SET SHOW COLLATION SHOW CREATE DATABASE db_name
表管理:
表创建: CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] create_definition:由逗号分隔的列表 字段定义: column_name column_defination 约束定义: PRIMARY KEY(col1[,col2, ....]) UNIQUE KEY FOREIGN KEY CHECK(expr) 索引定义: {INDEX|KEY} {FULLTEXT|SPATIAL} column_definition: data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] table_option: ENGINE [=] engine_name 查看数据库支持的存储引擎种类: SHOW ENGINES; 查看表状态信息: SHOW TABLE STATUS [WHERE CLAUSE] [LIKE CLAUSE] 表修改: ALTER TABLE tbl_name [alter_specification [, alter_specification] ...] alter_specification: (1) 表选项 ENGINE=engine_name ... (2) 表定义 (a) 字段 ADD DROP CHANGE MODIFY (b) 键和索引 ADD {PRIMARY|UNIQUE|FOREIGN} key (col1, col2, ...) ADD INDEX(col1, col2, ...) DROP {PRIMARY|UNIQUE|FOREIGN} KEY key_name; DROP INDEX index_name; 查看表上的索引信息: SHOW INDEXES FROM tbl_name; 表删除: DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ... 查看表创建语句: SHOW CREATE TABLE tbl_name
索引管理:
创建: CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC] 删除: DROP INDEX index_name ON tbl_name 查看: SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]
DML语句:
INSERT,SELECT,DELETE,UPDATE INSERT: INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... SELECT: (1) SELECT * FROM tbl_name; (2) SELECT col1, col2, ... FROM tbl_name; 字段别名:col1 AS ALIAS (3) ELECT col1, col2, ... FROM tbl_name WHERE CLUASE; WHERE expr:布尔表达式; col_name OPERATOR value|col_name; 操作符: >, <, <=, >=, =, != BETWEEN ... AND ... LIKE 'PATTERN': 通配符: _:匹配任意单个字符; %:任意长度的任意字符; RLIKE 'PATTERN': IN(list) 组合条件: and, or, not (4) SELECT col1, ... FROM tbl1_name [WEHRE CLAUSE] ORDER BY col1, col2, ... [ASC|DESC] DELETE: DELETE FROM tbl_name [WHERE where_condition] UPDATE: UPDATE table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]
图形管理工具:
phpMyAdmin Navicat mysql-front SQLyog ToadForMySQL
原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/56571