mysql基础知识
数据的实体 管理数据的方式和方法
数据库的技术构成
数据的存储技术
裸数据:
数据库自己提供的文件管理系统
工作于存储级,使用块I/O操作或者scsi协议
软件开销低
文件系统:
可用性和恢复性高
适用于更大型的数据存储,例如分布式存储
存储引擎
存储机制
索引的方式
锁
数据的操作技术
SQL语言
数据定义语言 (DDL): DROP CREATE ALTER
数据操作语言(DML): INSERT UPDATE DELETE
数据查询语言(DQL) : SELECT
数据控制语言(DCL):GRANT REVOKE COMMIT
数据库的管理系统:
用户管理
处理数据库连接
缓存
查询
日志
数据库的接口
用于不同的程序设计语言连接和管理数据的访问接口
ODBC
JDBC
PDO
ADO.NET
关系型数据库 : 一种表结构
非关系型数据库: 数据结构化的存储格式
mysql的不同的版本的文件格式是不同的
数据库的库名和表名是区分大小写的。
数据库的技术构成
数据的存储技术
裸数据:
数据库自己提供的文件管理系统
工作于存储级,使用块I/O操作或者scsi协议
软件开销低
文件系统:
可用性和恢复性高
适用于更大型的数据存储,例如分布式存储
存储引擎
存储机制
索引的方式
锁
数据的操作技术
SQL语言
数据定义语言 (DDL): DROP CREATE ALTER
数据操作语言(DML): INSERT UPDATE DELETE
数据查询语言(DQL) : SELECT
数据控制语言(DCL):GRANT REVOKE COMMIT
数据库的管理系统:
用户管理
处理数据库连接
缓存
查询
日志
数据库的接口
用于不同的程序设计语言连接和管理数据的访问接口
ODBC
JDBC
PDO
ADO.NET
关系型数据库 : 一种表结构
非关系型数据库: 数据结构化的存储格式
mysql的不同的版本的文件格式是不同的
数据库的库名和表名是区分大小写的。
mysql的逻辑架构
服务层 : 线程缓存池
核心层
存储引擎层
mysql的执行方式
1.串行执行方式
单线程执行
2. 交叉并发执行
多个事物交叉执行
利用事物的等待时间执行多个任务
3.同时并发执行
多个处理器系统使用
每个处理器处理一个事物
并发执行导致的问题
并发执行面临同读同写的问题,破坏事物的隔离性和数据的不一致
导致的数据不一致
1.丢失修改
2.不可重复读
3. 读取脏数据
并发控制
利用锁来解决上述的问题:
锁将多个事物进行了隔离,加了锁之后,其他的时候不可以获得数据。
基本锁的类型:
读锁:
共享锁:当事物1对数据加了读锁之后其他的事物只能对数据进行读数据,直到事物1释放了锁
写锁:
排他锁: 当事物1对事物加了写锁之后,其他的事物不可以读写数据
悲观锁和乐观锁
本质上是对锁的一种看待的角度
悲观锁 : 在整个的数据处理的过程中,将数据处于锁定的状态
乐观锁: 相对于悲观锁,乐观锁认为数据在一般的情况之下不会造成冲突,所有在数据的处理的过程中,只有在数据提交更新的时候才会正式的对数据的冲突进行检测,如果发现冲突了之后,就返回错误的信息,让用户决定应该如何去做。
mysql的数据类型
整数类型
存储带小数的类型:
浮点数和定点数
定点数: DECIMAL
日期和时间的类型:YEAR TIME DATE DATETIME TIMESTMP
char 固定的长度
varchar 可变的长度
TEXT 数据类型用来存储比较长的非二进制数据字符串
ENUM 枚举类型
SET 集合
二进制数据类型 : 存储二进制数据类型 以 bytes 为单位进行存储 以bytes 为单位比较
msyql 数据库操作
创建一个数据库 : create database lh;
创建的过程中指定数据库的编码格式: create database lh character set utf8;
查看数据库创建时的命令 : show create database lh;
删除一个数据库 : drop database lh;
mysql的表操作:
数据库表的范式:
第一范式: 数据库中的字段都是单一属性的,不可再分。这个单一范式由基本类型构成的。数据的属性要分到不可再分为止,
第二范式: 数据库中的数据是不会相互影响的,减少数据的冗余
第三范式: 通过数据之间的关系设置主键来方便的查询
创建一个数据表:
CREATE TABLE 表名(
列表名1 ,数据类型【约束】【默认值】,
列表名2,数据类型 【约束】 【默认值】
) [ENGINE =存储引擎] [CHARACTER SET = 字符集];
查看所有的表: show tables;
查看表的详细的信息: desc 表名;
查看制定表的详细的信息; show create table 表名/G;
删除数据表: DROP TABLE IF EXISTS 表名; 其中的if exists 可选,如果表不存在,就不执行任何的操作。
数据库的约束:
主键约束: 使用primary key 设置主键 设置了主键之后这个属性就不能再重复
外键约束
外键搭配主键使用,若不为空值,则每一个外键值必须等于另一个表中主键的某个值,
外键数据类型必须和主键的一致。
自增长;
CREATE TABLE T1 (uid primary key auto_increment)
修改一个表的名字: ALTER TABLE 表名 RENAME 修改后的表名
修改字段的数据类型: alter table 表名 modify 字段名 数据类型
修改字段名 alter table 表名 change 旧字段名 新字段名 新数据类型
在当前的表中添加一个新的字段: ALTER TABLE 表名 ADD 新的字段名 数据类型;
在当前的数据表中删除一个字段: ALTER TABLE 表名 DROP 字段名;
修改字段的排列的位置 : ALTER TABLE 表名 MODIFY 字段名 数据类型 FIRST|AFTER 字段名
更改表的数据引擎; ALTER TABLE 表名 ENGINE= 新的数据引擎
删除表的外键的约束 ALTER TABLE 表名 DROP FOREIGN KEY 外键名; 删除了所有的外键之后才能删除对应的主键所在的表
向数据表中插入单行数据: INSERT INTO 表名 SET 属性 数据类型,。。。;
向数据表中插入多行的语句: INSERT INTO 表名
(指定要插入的各种属性)
VALUES
(每个属性分别对应的数据),
.........;
向一个表中插入另一个表中的数据: INSERT INTO t2 (id,name,sex) SELECT id,name,sex FROM t1;
更新数据:
UPDATE t1 SET
属性=数据,...
WHERE condition;
删除数据:
DELETE FROM table_name
.........
WHERE condition;
一个事务:
begain 开始一个数据 rollback 回滚这个事务 commit 提交一个事务
索引:
索引是帮助Mysql高效获取数据结构的数据结构
创建索引:
创建一个普通的索引
create table t1(
id ,int primary key,
name varchar(10),
index(name)); 这里指定name为索引。
创建一个唯一的索引;
create table t2(
id int,
name varchar(10),
unique index idInx (id));
修改索引:
添加一个索引 alter table t1 add index nameindex (name);
删除一个索引: alter table t2 drop index nameindex:
添加一个索引: create index ididx on t1(id);
删除一个索引: drop index ididex on t1;
-------------------------------------- -------------------------------------更新与2015/12/06---------------------------------------------------------------------------
腾飞前的蛰伏