主键约束要求主键列的数据非空且唯一
1. 在定义列时指定主键,语法规则如下
字段名 数据类型 primary key
create table book
(
bno Varchar(6) primary key, //主键
bname Varchar(70),
press Varchar(30),
price Decimal(8,2),
author varchar(30)
)
2. 在定义完所有列之后指定主键。
constraint 约束名 primary key (字段名);
如:
create table book
(
bno Varchar(6),
bname Varchar(70),
press Varchar(30),
price Decimal(8,2),
author varchar(30),
//括号里可以输入多个字段,用逗号隔开,约束名随意
constraint pk primary key(bno)
)
3.在创建表之后添加与删除主键
alter table 表名 modify 字段名 数据类型 primary key; //添加
alter table 表名 drop primary key; //删除
alter table book modify bno varchar(6) primary key;
alter table book drop primary key;
外键用来让表与表产生关系,定义外键后,不允许删除另一个表中具有关联的字段。
外键的作用是保证数据引用的完整性。
创建外键的语法规则如下:
[constraint 外键名] foreign key (字段名) reference 主表名 主表列名;
“外键名”定义了外键约束的名称,一个表中不能有相同名称的外键。
(1) 在创建表时创建外键
create table reader
(
id int(8),
name varchar(40),
constraint reader_book_fk foreign key (id) references book (bno)
)
以上语句执行后,即在表reader中添加了名为reader_book_fk的外键约束,将此表中的id字段与book表中的主键bno关联了起来。(子表的外键必须关联父表的主键)
(2) 在创建表之后添加与删除外键
alter table 表名 add constraint 外键名 foreign key (字段名) references 主表名 (主表列名称); //添加
alter table 表名 drop foreign key 外键名; //删除
alter table reader add constraint reader_book_fk foreign key (id) references book (bno);
alter table reader drop foreign key reader_book_fk;
alter table reader drop foreign key reader_book_fk;
当操作主表时,系统会自动的操作从表。
例如:employee的 dep_id 字段 与 department表中的 id 字段之间添加了外键约束,这时,要修改或删除department表中的id的值变得很麻烦
添加了级联操作后,
修改department表中的id值,employee表中的dep_id值会自动进行修改。
删除department表中的id为1的记录,employee表中的dep_id值为1的记录会被自动删除。
添加级联操作语法:
alter table 表名 add constraint 外键名 foreign key (字段名) references 主表名
(主表列名称) on update cascade on delete cascade;
非空约束指字段的值不能为空,语法规则如下:
字段名 数据类型 not null
(1) 创建表时添加非空约束
create table book3
(
bno Varchar(6) primary key, //主键
bname Varchar(70) not null,
press Varchar(30),
price Decimal(8,2),
author varchar(30)
)
执行后,插入数据时bname不能为空。
(2) 创建表后添加与删除非空约束,即修改字段
alter table 表名 modify 字段名 数据类型;
alter table 表名 modify 字段名 数据类型 not null;
alter table book3 modify bname varchar(6);
alter table book3 modify bname varchar(6) not null;
要求该列唯一,可为空,但只能出现一个空值,语法规则如下:
字段名 数据类型 nuique
(1) 创建表时添加唯一约束
create table book4
(
bno Varchar(6) nuique,
bname Varchar(70),
)
指定bno的唯一性
(2) 创建表后添加与删除唯一约束
alter table 表名 modify 字段名 数据类型 unique;
alter table 表名 drop index 字段名;
alter table book4 modify bno varchar(6) unique;
alter table book4 drop index bno;
注意:mysql中唯一约束限定的值可以有多个null
默认约束可以指定某列的默认值,语法规则如下:
字段名 数据类型 default 默认值
例如:
create table book5
(
id int(8) default 01,
bname Varchar(70),
press Varchar(30),
)
执行后id便有了个默认值01。
在MySQL中auto_increment的初始值为1,每增一条记录,字段值自动加 1,该字段必须为主键的一部分。语法规则如下:
字段名 数据类型 auto_incerment
(1) 在创建表时添加自增长约束
create table book6
(
id int primary key auto_incerment,
bname varchar(70),
press varchar(30),
)
(2)在创建表之后添加与删除自增长约束
alter table 表名 modify id int auto_incerment; //添加
alter table 表名 modify id int; //删除
alter table book6 modify id int auto_incerment;
alter table book6 modify id int;