MYSQL的约束规则:primary key、foreign key、unique、check(mysql不能很好的支持)、default、not null
primary key:主键约束,可以唯一的表示每一行,不能为null,当是组合主键时,两列组合起来唯一标识某一行,若其中单独一列可以标识一行,则不符合组合主键的规则。
用法:
创建时添加主键:
CREATE TABLE tb_test0
(
id int(11) primary key,
name varchar(10)
);
CREATE TABLE tb_test1
(
id int(11) ,
name varchar(10),
constraint pk_id primary key(id)
);
因为主键在表中只有一个,所以可以不需要约束名pk_id;
创建后添加主键:
alter table tb_test
add primary key(id);
删除主键约束:
alter table tb_test
drop primary key;
foreign key:外键约束,可以有多个外键,用于连接父表的主键。需要先创建父表
创建时添加外键:
mysql> CREATE TABLE tb_dept1
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22) NOT NULL,
-> location VARCHAR(50)
-> );
mysql> CREATE TABLE tb_emp6
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CONSTRAINT fk_emp_dept1
-> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
-> );
创建后添加外键:
mysql> ALTER TABLE tb_emp2
-> ADD CONSTRAINT fk_tb_dept1
-> FOREIGN KEY(deptId)
-> REFERENCES tb_dept1(id);
需要创建外键名fk_tb_dept1,用于删除操作;
删除外键:
mysql> ALTER TABLE tb_emp2
-> DROP FOREIGN KEY fk_tb_dept1;
Unique:唯一约束,唯一,与主键区别,可以为null。
创建表时添加:
和primary key一样的
创建表后添加:
mysql> ALTER TABLE tb_dept1
-> ADD CONSTRAINT unique_name UNIQUE(name);
删除:
mysql> ALTER TABLE tb_dept1
-> DROP INDEX unique_name;
check:检查约束,MYSQL支持的不好,添加check约束后没什么效果,可以用枚举或者触发器来实现check检查约束。
创建表时添加:
mysql> CREATE TABLE tb_emp7
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CHECK(salary>0 AND salary<100),
-> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
-> );
创建表后添加:
sql> ALTER TABLE tb_emp7
-> ADD CONSTRAINT check_id
-> CHECK(id>0);
删除:
修改表时删除检查约束的语法规则如下:
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;
MYSQL好像不支持删除。
not null和default约束规则:
不需要规则名字,建表时直接添加在每一项的后面,不能单独添加。
使用alter table tb_test change column col1 col1_new int(11) not null default 1
使用alter table tb_test change column col1 col1_new int(11) null default null
使用alter table tb_test alter column col1 set default 1
使用alter table tb_test alter column col1 set default null
使用alter table tb_test alter column col1 drop default