表类型:即为表的存储引擎
存储引擎类型:
MyISAM: 不支持事务 表级别索 mysql默认的引擎 每个表都会对应一个文件--> ls data/library/
InnoDB: 支持事务 行级别加锁 外键
Archive:做归档引擎的 对数据压缩 挖掘的 不允许索引 只支持insert select
Federted: 支持跨数据库连接表
MERGE : 实现表联合或分开的 是一个虚拟表 临时表
BLACKHOLE: 实现复制的中继的 并没有实现数据的真正存储
CSV: 底层是文本文件 实现向不兼容的非sql的跨数据库转换
Memory:内存引擎 比普通快30%
Cluster:或NDB 运行内存中,用于集群中 实现节点之间数据的快速提取的
percona公司开发的xtradb支持事务
命令:
修改表类型:改表的数据引擎 表中已有数据引擎要谨慎
查看表的引擎:SHOW TABLE STATUS\G
查看当前系统引擎: SHOW ENGINES
修改表引擎:ALTER TABLE books ENGINE=innodb
ALTER TABLE class.mask ENGINE=InnoDB 不在class数据库中的 调用
主键的定义:
create table stu (
id INT NOT NULL,
name CHAR(6) NOT NULL,
sex CHAR(1) NOT NULL,
PRIMARY KEY (name,sex)
);
create table course (
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
course VARCHAR(255) NOT NULL DEFAULT 'RH033',
starttime DATE NOT NULL DEFAULT ' 2011-01-09 '
);
设置字段默认参数:ALTER TABLE stu MODIFY sex CHAR(1) NOT NULL DEFAULT 'm' 默认性别都为男
外键的定义:表与表之间定义 在表的引擎里要支持
FOREIGN KEY () REFERENCES 外键指定的表
ALTER TABLE stu ADD course TINYINT UNSIGNED DEFAULT '2'
ALTER TABLE stu ADD FOREIGN KEY(course)<--键值 REFERENCES course(id)<--表
表中数据不完成时有要引用数据的完成性可以:置空SET NULL 删除DELECT 或 field
FOREIGN KEY (course) REFERENCES course(field| SET NULL|DELECT)
级联
数据库的视图:为一个表创建一个虚拟表 即为另一个表的镜像 原表为基表 新表就为虚表
create view 视图名 as select 子句
视图可以更新和添加数据(基表也会同步显示)
create view test as selcet name
数据库的索引: 快速查找数据 更新时会较慢 安行row存储、显示数据
存储数据: 行 mysql会自动为行添加源数据(源数据与本身的表无关) 源数据有行id、page id
mysql表数据存储在文件中
1、mysql读取数据时按照页面来的
2、查询数据时要进行一个全表扫描:scanning
1和2造成效率降低---->索引
索引会对应表中的数据
一般对查询语句经常用的字段作索引
索引类型: BTREE:平衡树索引 逐层的
RTREE :
HASH :
FULLTEXT:全文索引
索引的创建:
create table 表名 index关键字
alter table 表名字 add index 索引名
create index 索引名 on 表名(col1,col2)
CREATE INDEX stu_age_index ON stu(age) USING BTREE
SHOW CREATE TABLE stu;
数据库的事务:语句的组合被看做一个整体
ACID:事务所遵循的原则
原子性 atomicity
一致性 consistency 数据不一致时会回滚的 以日志为基准
隔离性: 事务隔离级别 写入的过程中文件会被锁定
MyISAM-->表锁定
innodb--> 行锁定
读锁:共享的 写锁:独占的
持久性:durability
事务的创建:myisam不支持事务
启动事务 START TRANSACTTION 为提交之前其他用户是看不到的 可回滚自己看到
回滚: ROLLBACK
提交 COMMIT
保存修改内容: SAVEPOINT jing<--保存名
指定到回滚到某一点:ROLLBACK TO SAVEPOINT jing 回滚到jing这一点
没有明确指定提交事务 隐式会自动提交数据
事务的隔离级别:
read uncommitted 读未提交
read committed 读提交
repeatable read 重读 mysql默认级别
serialable 串行化
select @@xt_isolation 查询mysql的事务隔离级别
变量: 全局变量
会话变量
变量 :静态 动态:执行过程就可修改的
设置: set global variable=值 设置全局变量
mysql的开发:
存储过程 存储函数 触发器 调度事件
存储例程:存储过程 存储函数 把常用的命令集合起来以方便后续使用 把sql语句模块化
存储过程: stored procedures
\d // \d // 改变结束符号为//
create procedure name() 创建存储过程 create procedure select()
begin begin
statement;可以有多个 select * from stu;
end// end//
\d ; \d ;
调用存储过程 call name() call select()
删除存储过程 drop procedure select()//
存储过程: 支持自定义的变量@ set设置 系统的用@@ 参数的输入
存储函数:只能返回标量 字符串 值
if条件测试
调用存储函数 select name()函数名;
\d //
CREATE FUNCTION day()
RETUNRNS VARCHAR(255)
BEGIN
DECLARE message VARCHAR(255);
IF DAYOFWEEK(NOW()) BETWEENT 2 END 6 THEN
END IF;
RETURE message;
END//
调用:SECLECT day()//
触发器:TRIGGER 执行时附加额外的动作
mysql支持的触发器: insert delete update
调度事件:scheduled events 定时执行的 相当于crontab
查看:SHOW CREATE PROCEDURE select; 查看存储过程
SHOW CREATE FUNCTION select; 查看存储函数
改变表的默认字符集
ALTER TABLE
GUI 工具:
SQLyog 远程连接
phpMyAdmin
MySQL Query Browser
MySQL Administrator
MySQL Workbench
mysql认证:1、登陆认证
2、对象认证:连接进来是否有命令执行的权限