文章目录
article
DDL
AI文章摘要
qwen-turbo-latest
加载中...
CREATE
CREATE DATABASE
CREATE DATABASE database_name ;
CREATE TABLE
CREATE TABLE "tableName"(
["colName" DATATYPE [DEFAULT defVal] [[NOT] NULL] [col_cONstraint],]
["colName" DATATYPE [DEFAULT defVal] [[NOT] NULL] [col_cONstraint],]
...
"colName" DATATYPE [DEFAULT defVal] [[NOT] NULL] [col_cONstraint]
[,table_cONstraint]
);
-- col_cONstraint
[ CONSTRAINT <constraintName> ]{
PRIMARY KEY
| UNIQUE
| CHECK(predicate)
| REFERENCES tbName [(colName)][[ON [DELETE|UPDATE] CASCADE] | SET NULL] }
-- table_cONstraint
[ CONSTRAINT <constraintName> ] {
PRIMARY KEY (colName,...)
| UNIQUE ( colName,...] )
| CHECK(predicate)
| FOREIGN KEY (colname,...) REFERENCES tbName [(colname,...)][ON [DELETE|UPDATE] CASCADE | SET NULL]
DATETYPE
- 字符串: CHAR(n), 定长字符串; VARCHAR(n), 可变长字符串
- 整形: INT, 有些系统写作INTEGER
- 浮点: NUMERIC(p. q), 小数点左边p位,右边p-q位; REAL:有些系统写作float(n)n是小数点位数
- 日期: DATA, 日期(如2003-09-12)
- 时间: TIME, 时间(如23:15:003)
1.2.2 CONSTRAINT
- DEFAULT: 默认值
- [NOT] NULL: 是否允许空值
- 域完整性约束可以取一个名字方便日后进行修改
- PRIMARY KEY是主键, 约束非空唯一
- UNIQUE是唯一约束, 可空唯一, 且只能有一个null值
- CHECK(CHECK_cONditiON)是条件约束, 条件和where中的语法一致
- reference是外键约束, 当外键和参照表主键同名时可省略, 不同名要加上!!! 当参照表删除记录时, 这个外键做相应的处理, CASCADE时级联删除, SET NULL置空
CREATE VIEW
CREATE VIEW "viewName" [(
["colName",]
["colName"],
...
"colName"
)]
As( select_statement )
[WITH CHECK OPTION]
- WITH CHECK OPTION: 当要修改数据时, 检查是否满足子查询中定义的条件表达式
- 视图注意事项:
- 如果视图的select目标列包含聚集函数,则不能更新
- 如果视图的select子句使用了UNIQUE或distinct ,则不能更新
- 如果视图中包括了group by子句,则不能更新
- 如果视图中包括经算术表达式计算出来的列,则不能更新
- 如果视图是由单个表的列构成,但并没有包括主键,则不能更新(添加主键可更新)
CREATE TRIGGER
SQL实现Dynamic CONstraint使用的是触发器Trigger机制 Trigger是一种过程完整性约束(相比之下, Create Table中定义的都是非过程性约束), 它是一段程序,该程序可以在特定的时刻被自动触发执行
1. 语法格式:
Create Trigger trigger_name
{Before | After} {Insert | DELETE | UPDATE | [OF colname [,colname][,colname].......]
ON table_name [Referencing corr_name_def[,corr_name_def][,corr_name_def].... ]}
[FOR EACH ROW | FOR EACH STATEMENT] //针对更新事件中的行触发还是语句触发
[WHEN (检索条件) ]
statement | [Begin statement1; statement2; statement3;..... end]
//定义程序(R)(O), 多个statement要是有Begin...end表示, 单个statement可以不用
//定义检索条件(P),满足条件执行下面的程序, 缺省默认执行程序
对于UPDATEEvent的定义如下:
//指定更新的操作
DBMS能区分将写(Before)和已写(After)两个时刻
执行触发器操作需处理两组值:更新前的值和更新后的值,由corr_name_def定义
Old [Row] [As] Old_Row_name | New [Row] [As] New_Row_name |
Old Table [As] Old_ Table_name | New Table [As] New_Table_name
corr_name_def 就是定义更新前和更新后的元组或者表变量
注意: UPDATE可以定义Old 和 New, DELETE 只能定义Old, Insert 只能定义New
CREATE ASSERTION
断言就是一个谓词表达式, 它是数据库总能满足的条件, 每当数据库出现更改, 就会触发这个谓词表达式进行判断(表约束和列约束就是一些特殊的断言) 它会极大的削弱数据库的性能, 需要谨慎使用
CREATE ASSERTION assertionName CHECK check_option
ALTER
ALTER DATABASE
ALTER DATABASE
ALTER TABLE
ALTER TABLE "tableName"
[ADD "colName" DATATYPE, ....... ]
[DROP 完整性约束名]
[MODIFY "colName" DATATYPE [cONstraint…] , ....... ]
- ADD: 后跟增加字段名和域
- DROP:
- MODIFY: 后跟需要修改的字段名和要修改成的域和约束. 添加UNIQUE需确保数据独立, 缺省约束则删除约束
ALTER VIEW
ALTER VIEW
DROP
DROP DATABASE
DROP DATABASE
DROP TABLE
DROP TABLE
DROP VIEW
DROP VIEW
DELETE语句只是删除表中的元组,drop table撤消包含表的格式、表中所有元组、由该表导出的视图等相关的所有内容,所以使用要特别注意。