提示:sql约束的学习
一、SQL
1.sql约束
//约束规定数据表的规则违反约束的行为将被禁止,可在建表前后进行设置。
1.sql create table +constraints
有以下约束:
not null:指某列不能存储null空值。
unique:表明某列的某一行必须有唯一的值。
primary key:not null和unique的结合。确保某列有唯一的标识,为了更快找到记录。
foreign key:可以让一个表的值匹配到另一个表中的值参照完整性。
check:看列中的值是否符合指定的条件。
default:列的默认值
1.not null约束
//强制不能接受null值
1.创建一个表
create table persions(
id int not null,
lastname varchar(255) not null,
firstname varchar(255) not null,
age int
);
添加not null约束,modify:修改,改变
alter table persons modify age int not null;
删除约束把最后的not去掉就行
2.unique约束
//唯一标识数据库中的每一条记录,primary key约束拥有自定义的unique。
注意:每个表中可以拥有多个unique,但只能有一个primary key
1.在persons表创建时,在“P_id“列上创建unique约束
create table persons{
p_id int not null,
lastname varchar(255) not null,
firstname varchar(255),
address varchar(255),
city varchar(255),
unique (p_id)
2.命令unique约束,并定义多个列的unqiue约束时,可使用
create table persons(
p_id int not null,
lastname varchar(255) not null,
firstname varchar(255),
address varchar(255),
city varchar(255),
constraint uc_persionID unique (p_id,lastname)
)
3.表被创建之后增加约束
alter table persons add unique (p_id)
多个增加约束的表示
alter table persons add constraint uc_personID unique(p_id,lastname)
4.撤销unique的约束
mysql中
alter table persons drop index uc_personsID
sql server中
alter table persons drop constraint uc_personID
3.primary key约束
//primary key约束唯一标识数据库中的每一条记录
主键必须包含唯一的值,主键列中不能是null,每个表中都应该有唯一的一个主键。
1.mysql中primary key约束
create table persons{
p_id int not null,
lastname varchar(255) not null,
firstname varchar(255),
address varchar(255),
city varchar(255),
primary key(p_id)
)
定义多个列的primary key约束
constraint uc_personID primary key(p_id,lastname)
在表创建之后添加约束和撤销,和上面的语法一样
4.foreign key约束
//一个表中的foreign key指向另一个表中unique key(唯一约束的键)。
注意:persons中的p_id是person表中的primary key
orders中的p_id是order中的foreign key
foreign key约束用于预防破坏表之间的连接行为。
foreign key约束也能防止非法数据的插入外键行列,因为它指向另一个表的值是唯一的。
1.sql在orders表创建时在p_id上创建foreign key约束
mysql
create table orders(
o_id int not null,
orderno int not null,
p_id int,
primary key(o_id),
foreign key(P_id) references persons(p_id)
)
sql server/oracle
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
定义多个列的foregin key约束时
create table orders(
o_id int not null,
orderno int not null,
p_id int,
primary key (o_id),
constraint fk_perorders foreign key(P_id)
references persons(p_id)
)
2.alter table
//但order表被创建时,如需在p_id列创建foreign key约束
alter table orders add foreign key(p_id) references persons(P_id)
添加多个列的约束时
alter table orders add constraint fk_perorders foreign key (P_id) references persons(p_id)
3.撤销foregin key约束
mysql
alter table orders drop foreign key fk_perorders
sql server/oracle
alter table orders drop constraint fk_perorders
5.check约束
//check约束用于限制列中值的范围。
对单个列定义check约束,该列只允许特定的值。对一个表进行定义每个列都会进行限制。
1.check约束规定P_id列必须包含大于0的整数
mysql中
create table persons
(
p_id int not null,
lastname varchar(255) not null,
city varchar(255)
check (p_id>0)
)
sql server其中上面改变
p_id int not null check(p_id>0)
命名check约束,定义多个列的check约束
```sql
constraint chk_person check (p_id>0 and city="guangzhou")
2.当表被建立时增加约束和撤销约束
alter table persons add check(p_id>0)//使用与mysql/sql server/oracle
alter table persons add constraint chk_person check(p_id>0 and city="guangzhou")//多个列的增加约束
alter table persons drop constraint chk_person //sql server/oracle撤销约束
alter table persons drop check chk_person //mysql撤销约束
6.default约束
//default约束用于向列中插入默认值,如果没有规定的值则默认值将会被插入进去
1.在city上创建default约束
create table persons(
p_id int not null,
city varchar(255) default "guangzhou"
2.表被创建后增加的约束
alter table persons alter city set default "guangzhou"//mysql中
alter table persons add constraint ab_c default "guangzhou" for city//sql server
alter table persons modify city default 'guangzhou'//oracle
3.撤销default约束
alter table persons alter city drop default//mysql
alter table persons alter column city drop default//sql/oracle/ms
7.create index
//在表中创建索引,不读取表的情况下更快的查找到数据
1.创建一个简单的索引,允许重复的值
create index index_name on table_name (column_name)
2.create unique index创建一个唯一的索引。不允许重复的值:两个行不能拥有相同的索引值
create unique index index_name on table_name (column_name)
3.create index例子
在persons表的lastname列上创建一个名为pindex的索引
create index pindex on table persons(lastname)
索引不止一个列,列的名称用逗号隔开
create index pindex on persons(lastname,firstname`在这里插入代码片`)
8.sql撤销索引,撤销表,以及数据库
//使用drop语句
1.drop index语句
alter table table_name drop index index_name//mysql
drop index index_name//oracle
2.drop table
drop table table_name//删除表
drop database database_name//删除数据库
3.仅仅删除表中的数据不删除表
truncate table table_name
总结
期末考试结束,继续在学习上的路上持之以恒,永不言弃!