MySQL数据库 |
您所在的位置:网站首页 › uuid不能为空是什么意思 › MySQL数据库 |
目录 1 表的约束约束,是对表中的数据进行限定,保证数据的正确性、有效性和完整性,约束分为以下几类: 主键约束:primary key非空约束:not null唯一约束:unique外键约束:foreign key1.1 非空约束:not null1)在创建表时添加约束: CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 );2)创建表后再添加非空约束: ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;3)删除name的非空约束: ALTER TABLE stu MODIFY NAME VARCHAR(20)1.2 唯一约束:unique,值不能重复1)创建表时添加唯一约束: CREATE TABLE stu( id INT, number VARCHAR(20) UNIQUE );注意:MySQL中唯一约束限定的列的值可以有多个null 2)删除唯一约束: -- alter table stu modify number varchar(20); 不同于非空约束的删除方法 ALTER TABLE stu DROP INDEX number;3)创建表后添加唯一约束: ALTER TABLE stu MODIFY number VARCHAR(20) UNIQUE;1.3 主键约束:primary key1)注意: 若某一列添加了该约束,则代表了非空,且唯一;一张表只能有一个字段为主键;主键就是表中记录的唯一标识;2)创建表时添加主键约束 CREATE TABLE stu( id INT PRIMARY KEY, number VARCHAR(20) );3)删除主键 -- 错误方式 ALTER TABLE stu MODIFY id int; ALTER TABLE stu DROP PRIMARY KEY;4)创建完表后添加主键 ALTER TABLE stu MODIFY id INT PRIMARY KEY;5)自动增长:若某一列是数值类型的,使用关键字auto_increment 可以来完成值得自动增长。 在创建 表时添加主键约束,且完成主键自增长 CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT, number VARCHAR(20) );删除自动增长ALTER TABLE stu MODIFY id INT;创建后,添加自动增长ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;1.4 外键约束:foreign key【引例】我们创建一张职工表如下,但是发现存在明显的缺陷: 数据冗余;后期还会出现增删改的问题;![]() 所以,基于以上问题,我们可以通过拆表解决,一张员工表,一张部门表,员工表中的dep_id 对应部门表中的id ![]() 以上仍然存在一个问题,当在员工表中输入不存的部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用外键约束来解决。 【概念】什么是外键约束? 外键,就是从表中与主表主键对应的那一列,如:员工表中的dep_id,其中,主表是一方,用来约束别人的表,从表可以是多方,被别人约束的表。 注意:外键可以为NULL,但是不能是不存在的外键值。 ![]() 1)创建表时添加外键 语法: create table 表名( ... 外键列 constraint 外键名称 foreign key (外键列名称) references 主表名称(主表主键名称) ); -- 创建部门表(id,dep_name,dep_location) -- 一方,主表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(20), dep_location VARCHAR(20) ); -- 创建员工表(id,name,age,dep_id) -- 多方,从表 CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT, dep_id INT, -- 外键对应主表的主键 CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id) ); -- 外键对应主表的主键 -- 添加2个部门 INSERT INTO department VALUES(NULL, '研发部','广州'); INSERT INTO department VALUES(NULL, '销售部','深圳'); -- 添加员工,dep_id表示员工所在的部门 INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1); INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2); INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2); SELECT * FROM employee; SELECT * FROM department;因为有外键的约束,在员工表中添加一个不在部门表范围内的内容,则无法保存: ![]() 2)删除外键:ALTER TABLE 表名称 DROP FOREIGN KEY 外键名称; -- 删除外键 ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;3)在创建表后添加外键: ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称); -- 添加外键 ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id);4)级联操作 若希望改动部门表的id,同时希望自动改动员工表中的id,这时就需要进行级联操作,需要在添加外键的时候设置级联: 添加级联操作:ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;分类:级联更新 ON UPDATE CASCADE 级联删除 ON DELETE CASCADE本文为博主原创文章,转载请注明出处! |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |