#创建表并添加数据
CREATE TABLE IF NOT EXISTS mybank(
cid CHAR(4), #卡号
cname VARCHAR(30),#用户名
balance DECIMAL(10,2) #当前余额
);
INSERT INTO mybank(cid,cname,balance)VALUES(4001,'张三',1000);
INSERT INTO mybank(cid,cname,balance)VALUES(4002,'李四',1);
SELECT * FROM MYBANK;
#转账的理想操作(张三账户少500,李四账户加500)
UPDATE MYBANK SET BALANCE = BALANCE - 500 WHERE CID = 4001;
UPDATE MYBANK SET BALANCE = BALANCE + 500 WHERE CID = 4002;
事务(transaction)是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库操作命令要么都执行,要么都不执行。事务是一个不可分割的工作逻辑单元。
实物必须具备以下四个属性,简称ACID属性:
????????????????事务的各部操作时不可分的(原子的),要么都执行,要么都不执行
????????????????当事务完成时,数据必须处于一致状态
????????????????并发事物之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
????????????????事务完成后,它对数据库的修改被永久保持
MySQL中支持事务的存储引擎有InnoDB和BDB
#事务
#方法一:
BEGIN;
UPDATE MYBANK SET BALANCE=BALANCE-500 WHERE CID=4001;
UPDATE MYBANK SET BALANCE=BALANCE+500 WHERE CID=4002;
SELECT * FROM MYBANK;
#COMMIT;
ROLLBACK;
SELECT * FROM MYBANK;
#方法二:
#关闭事务自动提交
SET AUTOCOMMIT = 0;
UPDATE MYBANK SET BALANCE = BALANCE + 500 WHERE CID = 4001;
UPDATE MYBANK SET BALANCE = BALANCE + 500 WHERE CID = 4002;
#手动提交事务
COMMIT;
#回滚事务(撤回)
ROLLBACK;
#开启自动提交
SET AUTOCOMMIT = 1;
视图是一张虚拟表,表示一张表的部分数据或多张表的综合数据。其结构和数据是建立在对表的查询基础上。视图中不存放数据,数据存放在视图所引用的原始表中
一个原始表,根据不同用户的不同需求(权限),可以创建不同的视图
#创建一个视图,显示学生的学号、姓名、性别、年级名称、课程名称、考试时间、考试结果
#创建视图
CREATE VIEW VM_EXAMINFO AS
#查看视图
SELECT S.STUDENTNO,STUDENTNAME,SEX,GRADENAME,SUBJECTNAME,EXAMDATE,STUDENTRESULT
FROM STUDENT S LEFT JOIN GRADE G ON S.GRADEID=G.GRADEID
LEFT JOIN RESULT R ON S.STUDENTNO=R.STUDENTNO
LEFT JOIN `SUBJECT` SU ON SU.SUBJECTNO=R.SUBJECTNO
ORDER BY S.STUDENTNO
#删除视图
DROP VIEW IF EXISTS VM_EXAMINFO;
CREATE VIEW VM_AVG_STUDENTRESULT AS
SELECT STUDENTNAME,SUBJECTNAME,AVGRESULT
FROM STUDENT S LEFT JOIN (
SELECT STUDENTNO,SUBJECTNO,AVG(STUDENTRESULT) AVGRESULT FROM RESULT GROUP BY STUDENTNO,SUBJECTNO
) T ON S.STUDENTNO=T.STUDENTNO
LEFT JOIN `SUBJECT` SU ON SU.SUBJECTNO = T.SUBJECTNO
ORDER BY S.STUDENTNO;
汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等。我们可以根据拼音或偏旁部首,快速查找某个字。
索引是一种有效组合数据的方式,为快速查找到指定记录
MySQL索引按存储类型分类
待完善……