mysql_约束
来源:互联网 发布:淘宝卖家打印机 编辑:程序博客网 时间:2024/05/29 11:59
-- 1.默认值: DEFAULT
-- 对默认值字段可以插入null
CREATE TABLE stu(
id INT,
NAME VARCHAR(20),
address VARCHAR(20) DEFAULT '北京'
);
SELECT * FROM stu;
INSERT INTO stu (id,NAME,address) VALUES(1,'张三','河南');
INSERT INTO stu(id,NAME) VALUES(2,'李四');
INSERT INTO stu (id,NAME,address) VALUES(3,'王五','');
-- 2.非空:NOT NULL
-- 限制字段必须赋值
CREATE TABLE stu1(
id INT,
NAME VARCHAR(20),
num VARCHAR(20) NOT NULL
);
SELECT * FROM stu1;
INSERT INTO stu1 (id,NAME,num) VALUES(1,'张三','11');
-- 非空字段不能插入null
INSERT INTO stu1(id,NAME,num) VALUES(2,'李四','22');
-- 3.唯一性:UNIQUE ,对当前的字段不能进行重复
-- 唯一性 可以允许插入null值,并且允许插入多个null值
CREATE TABLE stu2(
id INT,
NAME VARCHAR(20),
num VARCHAR(20) UNIQUE
);
SELECT * FROM stu2;
INSERT INTO stu2(id,NAME,num) VALUES(1,'张三','111');
INSERT INTO stu2(id,NAME,num) VALUES(2,'李四','111');--出错:Duplicate entry '111' for key 'num'
INSERT INTO stu2(id,NAME,num) VALUES(3,'王一',NULL);
INSERT INTO stu2(id,NAME,num) VALUES(4,'王二',NULL);
-- 4.主键:PRIMARY KEY ,满足唯一性+非空两个条件
-- 一般情况下 每张表 都会设置一个主键字段 用于标记表中的每条记录都是唯一性
-- 建议不要选择表的包含业务含义的字段作为在主键,建议给每张表都独立的设计一个非业务含义的字段,如id字段当做主键
CREATE TABLE stu3(
id INT NOT NULL UNIQUE,
NAME VARCHAR(20)
);
SELECT * FROM stu3;
INSERT INTO stu3(id,NAME) VALUES(1,'张三');
INSERT INTO stu3(id,NAME) VALUES(NULL,'李四');--出错:id不能为空
CREATE TABLE stu4(
id INT PRIMARY KEY,
NAME VARCHAR(10)
);
SELECT * FROM stu4;
INSERT INTO stu4(id,NAME) VALUES(1,'张三');
-- 主键可以是空字符,但是也要唯一
INSERT INTO stu4(id,NAME) VALUES('','李四');
INSERT INTO stu4(id,NAME) VALUES('','李四');
-- 5.自增长:AUTO_INCREMENT
-- 自动的递增
CREATE TABLE stu5(
-- id自动增长,有4位数
id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR(20)
);
INSERT INTO stu5(NAME) VALUES('张三');
SELECT * FROM stu5;
DELETE FROM stu5;-- 只能删除数据不能删除约束
TRUNCATE TABLE stu5;-- 删除约束 也可以删除数据
-- 6.外键
-- 什么时候使用外键:
-- 出现两张表的时候并且数据冗余比较高,然后把数据冗余比较高的,单独作为一张表
-- 创建主表:约束别人的表被称为主表
CREATE TABLE dept(
id INT PRIMARY KEY,
deptname VARCHAR(20)
);
INSERT INTO dept(id,deptname) VALUES(1,'开发部');
INSERT INTO dept(id,deptname) VALUES(2,'秘书部');
SELECT * FROM dept;
-- 创建副表:被约束的表被称为副表 外键设置在副表上面
CREATE TABLE emp(
id INT PRIMARY KEY,
empname VARCHAR(20),
deptid INT,
-- 定义外键约束
CONSTRAINT emp_dept_fk FOREIGN KEY (deptid) REFERENCES dept(id)
-- 外键名 外键 --关联表(参考字段)
);
SELECT * FROM emp;
INSERT INTO emp(id,empname,deptid) VALUES(1,'张三',1);
-- deptid是外键,主表中没有id为5的,所以没法插入
INSERT INTO emp(id,empname,deptid) VALUES(2,'李四',5);
-- 添加几条数据便于操作
INSERT INTO dept(id,deptname) VALUES(3,'总经办');
INSERT INTO dept(id,deptname) VALUES(4,'财务部');
INSERT INTO emp(id,empname,deptid) VALUES(2,'张三',2);
INSERT INTO emp(id,empname,deptid) VALUES(3,'李四',3);
INSERT INTO emp(id,empname,deptid) VALUES(4,'王五',4);
-- 删除部门编号为id=1的部门信息
-- 不能直接进行删除部门信息 1.先删除副表当中的数据 在删除主表当中数据
SELECT * FROM emp;
DELETE FROM emp WHERE deptid=1;
DELETE FROM dept WHERE id=1;
SELECT * FROM dept;
-- 添加的时候 先添加主表再添加副表
-- 修改 把部门编号为2的部门信息修改为 开发部
UPDATE dept SET deptname='开发部' WHERE id=2;
-- 修改 把部门编号为2的部门编号修改为8;
UPDATE dept SET id=8 WHERE id=2;
-- 修改员工信息 把部门编号为2的下的所有的员工修改为其他部门去 然后在修改部
-- 门编号 在然后 把原来的员工信息修改回来
UPDATE emp SET deptid=4 WHERE deptid=2;
UPDATE dept SET id=8 WHERE id=2;
UPDATE emp SET deptid=8 WHERE deptid=4;
-- 7.级联操作:当有了外键约束的时候,我们不能直接删除或者是修改主表当中的内容
-- 但是多数情况下 我们需要直接进行操作主表当中的数据从而要影响副表当中数据
-- 那么这个时候就需要使用级联操作
SELECT * FROM dept;
CREATE TABLE emppp(
id INT PRIMARY KEY,
NAME VARCHAR(20),
deptid INT,
CONSTRAINT emppp_dept_fk FOREIGN KEY(deptid) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE
);
SELECT * FROM emppp;
INSERT INTO emppp(id,NAME,deptid) VALUES(1,'李四',8);
UPDATE dept SET id=2 WHERE id=8;
- mysql_约束
- MySQL_外键约束
- MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
- mysql_ auto_increment
- MYSQL_配置
- MySql_安装
- mysql_索引
- Mysql_函数
- mysql_触发器
- mysql_权限
- mysql_视图
- mysql_事务
- mysql_分组
- mysql_触发器
- mysql_入门
- mysql_权限
- mysql_学习笔记_09
- Mysql_命令归类
- 【剑指offer】最小的k个数
- leetcode 第11题 Container With Most Water
- JSP学习一
- 以太网知识2:Mac与Phy组成原理的简单分析
- numpy函数:arange()详解
- mysql_约束
- 神经网络与深度学习(三)CPP神经网络库
- 给linux增加虚拟内存(swap)的方法
- hibernate一级缓存和二级缓存的区别
- 『ORACLE』 PLSQL动态游标的使用(11g)
- 在java中调用python方法
- 求偏序集中的极大元与极小元
- 一次失败的广告转化率预估比赛
- PHP跳出循环的方法及continue、break、exit的区别