🤖 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撤消包含表的格式、表中所有元组、由该表导出的视图等相关的所有内容,所以使用要特别注意。