CREATE TABLE test1(
ename VARCHAR(3)
)
#插入三个英文字母、三个汉字
INSERT INTO test1 VALUES('abc')
INSERT INTO test1 VALUES('早上好')
INSERT INTO test1 VALUES('abcd') #Data too long for column
#添加一个定长字段 并重新设置
alter table test1 add sex char(1);
update test1 set ename='dqy',sex='男' where ename='abc'
#索引的管理
CREATE INDEX ename_index ON emp(ENAME)
SHOW INDEX FROM emp
DROP INDEX ename_index ON emp
#查看执行计划
EXPLAIN SELECT * FROM emp WHERE ENAME='smith'
CREATE INDEX sal_index ON emp(SAL)
EXPLAIN SELECT * FROM emp WHERE SAL<1000
DROP INDEX sal_index ON emp
#视图对象
CREATE VIEW view_1 AS SELECT * FROM emp
SELECT * FROM view_1
相关笔记:
/*
一 数据类型
常用整数类型
TINYINT
SMALLINT
INT
BIGINT 相当于Java中的long
字符串类型
1分类
VARCHAR CHAR
2区别
VARCHAR(m):定长可变字符串
定长:当前字段可存储字符个数固定
ename VARCHAR(3) #表示ename字段可存储3个英文字符或3个英文字母
可变:在硬盘上存储空间可根据情况【缩小】
INSERT INTO test1 VALUES('abc') #硬盘 【a】【b】【c】
INSERT INTO test1 VALUES('ef') #硬盘 【e】【f】
CHAR(m):定长不可变字符串
不可变:在硬盘上存储空间不可变
INSERT INTO test1 VALUES('abc') #硬盘 【a】【b】【c】
INSERT INTO test1 VALUES('ef') #硬盘 【e】【f】【空格】
读取数据时将空格抹掉
日期类型
YEAR
TIME
DATE
TIMESTAMP 时间戳
二 约束
1非空约束:管理的字段中不能存放null值
CREATE TABLE test1(
sid INT,
ename VARCHAR(3) NOT NULL
)
2唯一性约束:管理的字段中存放值不能重复 可以有null
CREATE TABLE test1(
sid INT,
ename VARCHAR(3) UNIQUE
)
3主键约束:管理主键字段 不能为null不能重复
CREATE TABLE test1(
sid INT PRIMARY KEY
ename VARCHAR(3)
)
4外键约束:管理外键字段 来自关联的一方表中主键字段值 可以有null值
ALTER TABLE 多方表
ADD CONSTRAINT 外键约束对象名 FOREIGN KEY(外键字段名称)
REFERENCES 一方表(主键字段)
三 索引index
1查询速度
表文件中数据行随着时间时间推移越来越多 而where命令进行遍历 速度会很慢
2索引作用
在表文件中数据行增加时 不大幅降低查询效率
3原理
数据1【100,80,45,50,90,200,17】
数据2【17,25,50,80,90,100,200】
得到最小值? 数据2更快 因为事先排好了顺序
4索引管理
1)将字段内容交给某个索引进行管理
CREATE INDEX 索引名 ON 表名(字段)
2)查看表文件所关联的索引
SHOW INDEX FROM 表名
***在为表文件绑定【主键约束】【唯一性约束】【外键约束】时 MySQL服务器自动将当前字段数据进行索引
3)删除表文件指定索引
DROP INDEX 索引名 ON 表名
三 执行计划 EXPLAIN
1命令格式
EXPLAIN 查询语句
2命令作用
展示当前查询得到结果是否通过索引来进行定位
DBA通过执行计划了解本次查询过程中,是否使用预先创建好的索引
3执行计划对于查询语句执行效率的判断问题
type属性
ALL 最慢 对所有数据进行遍历
TYPE 从索引中抓取 没什么用
RANGE WHERE不进行遍历 直接从索引中得到定位的数据行行数 大幅提升效率 DBA进行SQL优化时保证的最低级别
但不稳定 字段内容发生变化时 容易导致索引失效
REF WHERE不进行遍历 直接从索引中得到定位的数据行行数 同时这种情况根据定位条件一次只得到一个数据行
很稳定 DBA该努力达到这个程度
CONST 根据主键字段进行索引 执行效率最快 但很少用到
四 视图
1定义
MySQL中的一个对象 用于存储查询语句 提高使用效率 避免重复开发
2命令
1)将查询语句交给一个视图对象进行管理
CREATE VIEW 视图名 AS 查询语句
2)通过视图对象调用管理的查询语句
SELECT * FROM 视图名
3额外功能
视图对象拥有对当前查询语句关联的表文件操作能力
1)通过视图对象对关联的表文件的数据行进行插入操作 删除 更新
4视图作用(重点!!!)
1)提高查询语句复用性
2)隐藏业务中涉及表的关系 开发人员通过视图进行操作时不会知道具体操作表的内容
五 存储引擎
1定义 MySQL服务器对表文件内容的管理方式
目前主要采用 INNODB MyIsam两种
2INNODB 在对表文件内容修改时 先进行一次备份 所以相对较慢 但是执行完毕后有备份存在 可以使用备份取消当前操作 增加安全性
...
六 事务 TRANSACTION
1介绍
事务是MySQL服务器提供的一个管理对象 用于对表文件的【备份】进行管理
2使用
START TRANSACTION 通知MySQL提供一个事务对象 这个事务对象对接下来产生的所有备份进行管理
DELETE FROM emp WHERE DEPTNO=30 生成emp.bak
DELETE FROM dept WHERE DEPTNO=30 生成dept.bak
ROLLBACK 通知MySQL服务器将本次操作中所有备份信息覆盖到表文件 来取消本次操作
COMMIT 通知MySQL服务器将本次操作生成的所有备份信息进行删除 即提交操作
*/
MySQL note3CREATE TABLE test1(ename VARCHAR(3))#插入三个英文字母、三个汉字INSERT INTO test1 VALUES('abc')INSERT INTO test1 VALUES('早上好')INSERT INTO test1 VALUES('abcd') #Data too long for column#添加一个定长字段 并重新设置alter table test1 add sex char(1);update test1 set