SQL 学习笔记<一> 入门
操作方式 | 创建 | 删除 | 修改 |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX |
TABLE:
数据类型 | 含义 |
CHAR(n) | 长度为n的定长字符串 |
VARCHAR(n) | 最大长度为n的变长字符串 |
INT | 长整数(也可以写作INTEGER) |
SMALLINT | 短整数 |
NUMERIC(p, d) | 定点数,由p位数字(不包括符号,小数点)组成,小数后面有d位数字 |
REAL | 取决于机器精度的浮点数 |
DOUBLE PERCISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 浮点数,精度至少为n位数字 |
DTAE | 时期,包含年、月、日,格式为YYYY-MM-DD |
TIME | 时间,包含一日的时、分、秒,格式为HH:MM:SS |
CREATE TABLE <表名>(<列名><数据类型>[列完整性约束条件][, <列名><数据类型>[列级完整性约束条件]][, <表级完整性约束条件>]);
- CREATE TABLE Student (Sno CHAR(7) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20));
- CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4), Ccredit SMALLINT, FOREIGN KEY(Cpno) REFERENCES Course(Cno));
- CREATE TABLE SC (Sno CHAR(7), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY(Sno, Cno), FOREIGN KEY Sno REFERENCES Student(Sno), FOREIGN KEY(Cno) REFERENCES Course(Cno)) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE <表名>[ADD <新列名><数据类型>[完整性约束]][DROP <完整性约束名>][MODIFY <列名><数据类型>];
- ALTER TABLE Student ADD Scome DATE; //ADD用于增加新列和新的完整性约束条件
- ALTER TABLE Student MODIFY Sage INT; //DROP子句用于删除完整性约束条件
- ALTER TABLE Student DROP NOT NULL(Sname); //MODIFY子句用于修改原有的列定义,包括修改列名和数据类型(MySQL is different: ALTER TABLE Student CHANGE Sname Sname CHAR(8))
DROP TABLE <表名>
- DROP TABLE Student;
INDEX:
CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…);
- <次序>:指定索引值的排列次序,可选ASC(升序) or DESC(降序), 默认值为ASC
- UNIQUE: 表明此索引的每一个索引值只对应唯一的数据记录。
- CLUSTER: 表示要建立的索引是聚簇索引。所谓的聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。例如,执行下面的CREATE INDEX语句:CREATE CLUSTER INDEX Stusname ON Student(Sname); 将会在Student表的Sname()列上建立一个聚簇索引,而且Student表中的记录将按照Sno的值的升序存放。可以在最常查询的列上建立 聚簇索引 以提高查询效率。显然在一个表上最多只能建立一个聚簇索引。建立聚簇索引后,更新索引列数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Student(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC);
DROP INDEX Stusname;
路慢慢其休远羲,吾将上下而求所