数据库定义:存储数据的仓库 php
应用:金融机构,游戏网站,购物网站,论坛网站 java
提供数据库软件:Oracle,DB2,SQL server,MySQL,Mariadb,mongodb,redis (红色不开源;SQL server不跨平台,蓝色非关系型数据库) mysql
数据迁移: redis
MySQL介绍:关系型数据库,跨平台,可移植性好,支持多种编程语言(php .net java) sql
mysql-community-client(MySQL工具包),mysql-community-server(MySQL服务包) mongodb
服务名:mysqld;端口:3306;协议:tcp; 主配置文件:/etc/my.cnf 数据库目录:/var/lib/mysql 用户和用户组:root 数据库
SQL语言分类: 编程
DDL:数据定义语言 缓存
DML:数据操做语言 安全
DCL:数据控制语言
DTL:数据事物语言
MySQL体系结构:
管理工具:安装mysql数据库服务软件后自带的命令
connection pool:链接池
检查是否有空闲的线程和是否有硬件资源分配给线程使用。
SQL Interface: SQL接口
把SQL命令传递给mysqld进程。
Parser: 解析器
检查执行的SQL命令是否语法错误。
Optimizer: 查询优化器
优化执行的SQL命令,以最节省硬件资源的方式运行。
Cache和Buffer: 查询缓存
存储客户端曾经查找过的sql记录(相似交换机工做原理)
Engine :存储引擎
访问表时,决定对表加锁的粒度
文件系统:存储数据的存储设备(如硬盘)
常见管理工具:
登录
mysql -h 主机名 -u 用户名 -p
注:登录初始密码在"/var/log/mysqld.log"文件的"localhost:"字符串后,若密码有!用''引发
退出登陆
Quit;(\q)
注释:
#
--
COMMENT '内容' 给字段添加注释
察看手册:
HELP command;
? command;
\h command;
取消当前命令
\c
将日志文件保存(结束)到文本文件
\T 文件路径 (\t)
当前打开的数据库名称
SELECT DATABASE();
选择数据库
两种方式对数据库进行使用的选择:
一: 在登陆数据库时指定, 命令: mysql -D dbname -h 主机名 -u 用户名 -p
例如登陆时选择刚刚建立的数据库: mysql -D samp_db -u root -p
二: 在登陆后使用 use 语句指定, 命令: use dbname;
use 语句能够不加分号, 执行 use samp_db 来选择刚刚建立的数据库, 选择成功后会提示: Database changed
库级知识
显示数据库: show databases;
建立数据库(指定编码方式): create database dbname [charset utf8]; #库名支持数字,字母,下划线,不能纯数字,区分大小写
更改数据库编码方式:ALTER DATABASE dbname DEFAULT CHARSET utf8;
删除数据库: drop database dbname;
察看数据库建立时语法:SHOW CREATE DATABASE dbname; \G #参数用于格式化输出
表级操做:
显示库下面的表 show tables;
查看表的结构: desc tableName;
查看表的建立过程: show create table tableName;
查看表的内容:select * from tableName;
建立表:
create table tbName (
列名称1列类型[列参数][not null default ],
....列2… , #无符号,在数据类型下添加UNSIGNED
....列3… ,#零填充,在数据以前以0填充ZEROFILL
---列n #最后一列不能有逗号
);
删除表:
DROP TABLE tbName;
更改表名:
ALTER TABLE tal_name RENAME [TO|AS] new_name;
RENAME TABLE tbl_name TO new_name;
移动数据表:
RENAME TABLE 库1.表名 TO 库2.表名; #把表从库1移动到库2
复制表:
CREATE TABLE 库.表 sql查询; #将查询结果复制到新表,key属性不会复制,查询无结果就只复制表结构
向表中插入记录:
INSERT tbl_name VALUE|VALUES(值…..); 插入全部
INSERT TableName (col1,col2,……) VALUES (val1,val2……); -- 插入指定列
INSERT TableName VALUES 一次插入多行
(val1,val2……),
(val1,val2……),
(val1,val2……);
删除表中的数据:
删除全部数据:TRUNCATE TABLE tablename;
删除指定数据:DELETE FROM tablename WHERE 条件;
修改数据
UPDATE TableName
SET
Col1=newval1,
Col2=newval2,
Coln=newvaln #此处没有逗号
WHERE 条件; #此处有分号
基本用法:
ALTER TABLE 表名 执行动做
执行动做:
添加新字段 ADD 字段名1 类型(宽度) 约束条件 [选项];
选项:
AFTER 字段名2 #添加在字段名2后面
FIRST #添加最前面
注:默认添加到最后
删除已有字段 DROP 字段名
修改字段 MODIFY 字段名 类型(宽度) 约束条件;
注:新约束不能和已有数据冲突
修改字段名 CHANGE 原字段名 新字段名 类型(宽度) 约束条件;
注:也能够更改字段
数据导入,导出:
导入:
LOAD DATA INFILE "目录名/文件名"
INTO TABLE 表名
FIELDS TERMINATED BY "分隔符"
LINES TERMINATED BY "\n";
注:查找导入位置show variables like "secure_file_priv",win下能够接完整路径
修改导入位置:secure_file_priv="路径"加在/etc/my.cnf,路径存在并mysql有权限
记一次故障排除:导入数据提示"ERROR 1265 (01000): Data truncated for column 'Id' at row 1"数据导入截断,分隔符改成","
导出:
sql查询 INTO OUTFILE "目录/文件名" #能够只有这一句
FIELDS TERMINATED BY "分隔符"
LINES TERMINATED BY "\n";
#分隔符可自定义
存储引擎:
指表的类型,数据库的存储方式.
察看支持的数据引擎: SHOW ENGINES; #显示引擎名,是否默认,描述,是否支持事务,
察看默认存储引擎:SHOW VARIABLES LIKE 'storage_engine';
经常使用存储引擎特色:
innoDB
提供事务,提交,回滚,多事务并发控制;支持外键;缺点:数据空间大,速度慢
共享表空间,表文件:*.frm(表结构),*.ibd(表索引,表数据)
行级锁(对表访问时,只给被访问行加锁)
注:事务:一次数据访问从开始到结束的过程;
事务回滚:访问过程当中任意一步失败,把操做恢复到操做以前的状态。(经过事务日志文件记录)
MyISAM
占用空间小,速度快 缺点:不支持事务,不支持外键,安全性差;
独享表空间,表文件:*.frm(表结构),*.myi(表索引),*.myd(表数据)
表级锁(对表访问时,给一张表加锁)
注:锁解决并发访问冲突问题,锁分为读锁和写锁
处理写操做多的表适合innoDB,处理读操做多的表适合myisam
MEMORY
提升表的处理速度;服务器内存大 缺点:断电影响数据(数据存在内存中)
修改默认存储引擎(/etc/my.cnf):在【mysqld】下添加default-storage-engine=引擎名
建表指定存储引擎:
create table 表名(
……
)engine=引擎名;
修改表存储引擎:ALTER TABLE 表名 engine=存储引擎名;