Mysql 约束简介

Mysql高级特性
                    约束            
                    约束得概念:约束得作用与表中列得规则,用于限制加入表得数据,约束得存在保证了数据库中数据得正确性,有效性,和完整性
                    约束得分类
                            非空约束(NOT NULL)        保证列中所有数据不能由null值
                            唯一约束(UNIQUE)        保证列中所有数据各有不同
                            主键约束(PRIMARY KEY)        主键是一行数据得唯一标识,要求非空且唯一
                            检查约束(CHECK)        保证列中得值满足某一条件
                            默认约束(DEFAULT)    保存数据时,未指定值则采用默认值
                            外键约束(FOREIGN KEY)        外键用来让连个表得数据建立连接,保证数据得一致性和完整性
                        注意MYSQL不支持检查约束
                        示例:
                        案例,根据需求,为表添加合适得约束
                        先创建一个表
                      

 --员工表
                        CREATE TABLE emp(
                            id INT,--员工id 主键且自增长
                            ename VARCHAR(50),--员工姓名,非空且唯一
                            joindate DATE,--入职日期,非空
                            salary DOUBLE(7,2),--工资,非空
                            bonus DOUBLE(7,2)--奖金,如果没有奖金默认为0
                            );
                            -- 添加一条数据
                            INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','2022-5-8',4200,500);
                            -- 尝试着查看是否成功
                            SELECT *FROM emp;
                            DELETE FROM emp;
                            
                            -- 演示主键约束 
                            INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','2022-5-8',4200,500);
                            -- 会报错  端口号重复  Duplicate entry '1' for key 'PRIMARY'
                            INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES('张三','2022-5-8',4200,500);
                            -- 会报错  端口号为空Column count doesn't match value count at row 1
                            -- 演示非空约束:not NULL
                            INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(2,NULL,'2022-5-8',4200,500);
                            -- Column 'ename' cannot be null  名称不能为null
                            -- 显示唯一约束 
                            INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,'张三','2022-5-8',4200,500);
                            -- Duplicate entry '张三' for key 'ename'  已经有张三了 不能再添加了

                            -- 显示默认约束 
                            INSERT INTO emp(id,ename,joindate,salary) VALUES(4,'sx','2022-5-8',4200);
                            -- 数据添加成功 以前添加数据失败 默认值为null  现在默认值为0  
                            -- 如果奖金值给null得话  不会走默认值0 会认为你给的null  null是一个特殊得值
                            
                            -- 演示自动增长 auto_increment  
                            -- 要求 1.数字 2.唯一
                            -- 创建第一条数据 
                            INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','2022-5-8',4200,500);
                            -- 创建第二条数据  不给id赋值
                            INSERT INTO emp(ename,joindate,salary,bonus) VALUES('李四','2022-5-8',4200,500);
                            -- 第二条数据则会为2


                            
                            
                 外键约束:
                        概念:外键时用来让两个表得数据建立连接,保证数据得一致性和完整性
                        语法
                        1.添加外键约束
                        CREATE TABLE 表名(
                            列名 数据类型,
                            列名 数据类型,
                            ...
                            [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
                        );
                        2.建完表后添加外键约束
                        ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
                        3.删除外键约束
                        ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
                      

 -- 删除表
                        DROP TABLE IF EXISTS emp;
                        DROP TABLE IF EXISTS dept;
                        
                        
                        -- 部门表
                        CREATE TABLE dept(
                            id int primary key auto_increment,
                            dep_name varchar(20),
                            addr varchar(20)
                        );
                        -- 员工表 
                        CREATE TABLE emp(
                            id int primary key auto_increment,
                            name varchar(20),
                            age int,
                            dep_id int,
                            
                            CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
                            
                        );                        
                        -- 添加 2 个部门
                        insert into dept(dep_name,addr) values
                        ('研发部','广州'),('销售部', '深圳');
                        
                        -- 添加员工,dep_id 表示员工所在的部门
                        INSERT INTO emp (NAME, age, dep_id) VALUES 
                        ('张三', 20, 1),
                        ('李四', 20, 1),
                        ('王五', 20, 1),
                        ('赵六', 20, 2),
                        ('孙七', 22, 2),
                        ('周八', 18, 2);
                        
                        -- ------------------
                        select * from emp;

-- 删除外键
ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;

-- 添加外键
ALTER TABLE emp add CONSTRAINT fk_emp_dept FOREIGN KEY (dep_id) REFERENCES (id);

                        


                        
                        
                    注意:优先添加部门表和部门数据,其次是员工表和员工数据,否则会报错

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值