10.3 primary key 主键必须包含唯一的值,主键不能为null,每个表都应该有一个主键,并且是唯一的。
示例:参照unique,将其中的unique替换为 primary key即可。 上述有添加多个unique示例,如果改为primary 可以意思就是主键由添加的几个列组成。
10.4 foreign key 约束
a.可以用来预防破坏表之间连接的行为
b.防止非法数据插入外键列,因为它必须是指向的那个表中的值之一
示例:MYSQL
create table websites(
id int(11) NOT NULL,
name char(20) NOT NULL,
url varchar(255) NOT NULL,
alexa int(11) NOT NULL,
country char(10) NOT NULL,
primary key (id),
foreign KEY (id) references apps(id)
);
示例:SQL server/oracle
CREATE TABLE websites
(
Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id int FOREIGN KEY REFERENCES apps(Id)
);
示例:MySQL/SQL Server/Oracle
CREATE TABLE websites
(
Id int NOT NULL,
OrderNo int NOT NULL,
Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id)
REFERENCES apps(Id)
);
alter table 使用foreign key约束
示例:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
示例:如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
撤销FOREIGN KEY约束
示例:mysql
alter table Orders drop index fk_PerOrders;
示例:SQL
alter table Orders drop constraint fk_PerOrders;
10.5 CHECK 约束
用于限制列中的值的范围
示例:MYSQL
create table websites(
id int(11) NOT NULL,
name char(20) NOT NULL,
url varchar(255) NOT NULL,
alexa int(11) NOT NULL,
country char(10) NOT NULL,
check (id>0)
);
alter table 使用check约束alter table websites add check (id>0);
撤销check约束(参照unique约束中的alter table)alter table websites drop check constraint_name;
10.6 DEFAULT 约束
1.用于向列中插入默认值
2.如果没有规定其它值,那么将默认值添加到所有的记录
示例:MYSQL
create table student_information (
student_id INT (10) NOT NULL,
student_name CHAR (4),
student_class CHAR (10) DEFAULT '' comment '班级',
student_tele INT (11),
student_add VARCHAR (255)
); comment 是为 字段或列的属性添加注释用的
alter table 使用 default
示例:MYSQL
alter table websites
alter country set default 'CN';
示例:SQL serveralter table websites add constraint ad_c default 'CN' for country;
示例:oraclealter table websites modify country default 'CN';
撤销default约束
示例:MYSQL
alter table websites
alter country drop default;
示例:SQL server/oracle
alter tables websites
alter column country drop default;
- create index 用于在表中创建索引
在表中创建索引可以更高效的查询数据,用户无法查看到索引,他们只能被用来加速搜索/查询。
注:更新一个包含索引的表所耗费的时间比没有索引表的时间更长,这是由于索引本身也需要更新。因此,理想的做法是仅仅在尝尝被所有的列(及表)上面创建索引。
语法:创建一个简单的索引,允许使用重复的值create index index_name ON table_name (column_name);
语法:在表中创建唯一的索引,不允许使用重复的值(create unique table):唯一的索引意味着两个行不能拥有相同的索引值。create UNIQUE index index_name ON table_name (column_name);
示例:将websites表中name列中创建名为web_index的索引。create index web_index ON websites (name);
12.drop 可以删除表,索引和数据库
DROP INDEX 语句用于删除表中的索引。
用于 SQL Server 的 DROP INDEX 语法:DROP INDEX table_name.index_name
用于 DB2/Oracle 的 DROP INDEX 语法:DROP INDEX index_name
用于 MySQL 的 DROP INDEX 语法:ALTER TABLE table_name DROP INDEX index_name
DROP TABLE 语句用于删除表。
DROP DATABASE 语句用于删除数据库。
仅仅需要删除表内的数据,但并不删除表本身TRUNCATE TABLE table_name
13.ALTER TABLE 用于在已有的表中添加、删除或修改列。
添加列的语法:ALTER TABLE table_name ADD column_name datatype;
删除表中的列语法:ALTER TABLE table_name DROP COLUMN column_name datatype;
改变表中数据类型语法:ALTER TABLE table_name MODIFY COLUMN column_name datatype;
示例: 在website表中添加名为column_date的列,然后修改列的数据类型,删除添加的列
alter table websites add column_date date; 添加
alter table websites modify column column_date year;修改
alter table websites drop column column_date; 删除