提示: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(唯一约束的键)。

mysql中允许为空的命令 sql允许为空怎么写_sql

注意: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

总结

期末考试结束,继续在学习上的路上持之以恒,永不言弃!