SQL: 增删改,过程抽象,数据抽象,遍历访问
本部分包含:
表修改操作
增删改查:权限
查询不影响原表
修改操作语法上表现为SELECT外添加前缀(与新选项),或缺省SELECT(更具体的语义)
INSERT行插入(权限足够)
1.插入完整的行(部分列缺省)——字面量
2.插入查询结果——对象
INSERT INTO 表(更安全:改用关键字参数,可以缺省(前提:表必须允许NULL,或有默认值))
VALUES(逐个字面量)
INTO是否存在与其他语句的组合?
否——省略
INSERT
SELCET
WHERE
(是否保持完整的选项(子语句)?)
插入检索结果行
INSERT INTO插入现有表
SELECT INTO复制到新表
增删改查
UPDATE
DELETE
UPDATE
SET(删:设为NULL,前提:允许)
WHERE
DELETE(整行)
FROM
WHERE
删列:UPDATE
CREATE TABLE 表名
(
列名 数据类型 是否允许NULL DEFAULT val
)
不可重名:拒绝覆写
NULL !=空字串
对象=值+结构
删表
DROP TABlE
复杂表结构(列结构)更改:
1.创建新表
2.复制数据(映射:计算字段,转换函数;归总:聚集值)
3.检验新表?
4.重命名(且删)旧表
5.重新创建触发器,存储过程,索引,外键
视图:
SELECT
FROM 视图
WHERE
缺省表名:作为函数?
依然指定表名
是虚拟表(过程)不是数据——表可能更新——python property——对表运行时迟邦定
重用语句
保护数据?设定权限?
映射:修改值,格式,表示
可嵌套:性能低
视图不能索引,不能带触发器与默认值?
部分DBMS权限:只读
表更新对视图的影响?
视图作为生成器?
CREATE VIEW name AS
SELECT
(其余子语句完整性)
嵌套 IN SELECT
平行WHERE &| UNION
抽象 VIEW
存储过程:抽象
状态——状态——状态——状态
状态——变化——变化——状态
存储过程相同则结果相同——Docker
存储编译后的结果——部分存储独立内容的编译结果——python存储编译后的正则表达式
SQL存储语法不同——可移植性差
EXECUTE name(
参数列表
)
不传递主键:自动化生成ID?
调用时动作:
参数与签名验证
生成主键ID
执行动作:增删改
参数:
默认值
关键字参数
输出参数,返回值用于修改(哪个函数的)参数?
使用SELECT检索
输出值
CREATE PROCEDURE name(
listName IN/OUT/INOUT typr
)
IS
name type???
BEGIN
END
局部变量?
事务处理
打包SQL语句,并保证原子性(执行/不执行)
出现异常——恢复到执行前——保证数据库完整性
发生错误——回卷——异常
正常——提交
在沙盒中处理??
可回退:INSERT,UPDATE,DELETE——增删改
不可:SELECT——查
打包方式:标出代码块
BEGIN
COMMIT隐式提交——要求显式提交
ROLLBACK
撤销一次
保留点:历史记录
SAVEPOINT 标记
回滚到保留点
ROLLBACK 标记
游标
整体处理——随机访问
(数组作为指针)
游标修改权限:作为存取器入口:增?删?改?查权限
访问方式:随机,相对
列的存取权限控制:可修改,不可修改列
主要用于交互
使用:
声明:创建
定义:绑定表
读写数据
关闭,释放
创建:
DECLARE name CURSOR
FOR
SELECT
FROM
WHERE
使用:
OPEN CURSER curser
(LOOP——END)
FETCH curser INTO date
CLOSE
能否使用多个CURSER?
多个数据如何使用?外部接收者(隐式迭代?)?