• 数据库-数据约束


    数据库-数据约束

    对用户操作表的数据进行约束

    CREATE TABLE sclass(
    	cid INT,
    	cname VARCHAR(20),
    	adress VARCHAR(20)DEFAULT '东南角'
    );
    -- 默认值约束(缺省约束)
    作用:当用户对使用默认值的字段不插入值的时候,就使用默认值
    注意:
    1.对默认值字段插入null是可以的
    2.对默认值字段可以插入非null
    INSERT INTO sclass VALUES(1,'太阳班','西北角') INSERT INTO sclass(cid,cname) VALUES(2,'小草班') INSERT INTO sclass VALUES(3,'小花班',NULL) -- 非空约束
    注意:
    1.非空字段必须赋值
    2.非空字段不能赋null CREATE TABLE sclass( cid INT, cname VARCHAR(20) NOT NULL,-- 非空约束 adress VARCHAR(20)DEFAULT '东南角' ); INSERT INTO sclass VALUES(1,'太阳班','西北角') -- Field 'cname' doesn't have a default value(报错) INSERT INTO sclass(cid) VALUES(2) -- Column 'cname' cannot be null(报错) INSERT INTO sclass VALUES(2,NULL,'东北角') -- 唯一约束 不能重复
    注意:
    1.唯一字段可以插入null;
    2.唯一字段可以插入多个null CREATE TABLE sclass( cid INT, cname VARCHAR(20) NOT NULL,-- 非空约束 adress VARCHAR(20)DEFAULT '东南角',-- 默认值 phone VARCHAR(16) UNIQUE -- 唯一约束(多个约束用空格) ); INSERT INTO sclass VALUES(1,'小河班', '西南角','110') -- Duplicate entry '110' for key 'phone'(报错) INSERT INTO sclass VALUES(2,'大海班','西南角','110') INSERT INTO sclass(cid,cname) VALUES(2,'小鸟班') INSERT INTO sclass(cid,cname) VALUES(3,'小花班') -- 唯一约束可以插入多个null值 -- 主键约束 非空+唯一 CREATE TABLE sclass( cid INT PRIMARY KEY,-- 主键约束 cname VARCHAR(20) NOT NULL,-- 非空约束 adress VARCHAR(20) DEFAULT '东南角', phone VARCHAR(16) UNIQUE -- 唯一约束(多个约束空格) ); INSERT INTO sclass VALUES(1,'小河班', '西南角','110') -- Duplicate entry '1' for key 'PRIMARY'(报错) INSERT INTO sclass VALUES(1,'大海班', '西南角','110') -- Field 'cid' doesn't have a default value(报错) INSERT INTO sclass(cname) VALUES('大海班') -- Column 'cid' cannot be null(报错) INSERT INTO sclass(cid,cname) VALUES(NULL,'大海班') -- 自增长 从0开始增长 CREATE TABLE sclass( cid INT PRIMARY KEY AUTO_INCREMENT,-- 主键约束 自增长 cname VARCHAR(20) NOT NULL,-- 非空约束 adress VARCHAR(20) DEFAULT '东南角', phone VARCHAR(16) UNIQUE -- 唯一约束(多个约束空格) );
    自增长约束:必须是INT类型的主键约束才可以 -- Field 'cid' doesn't have a default value(报错) INSERT INTO sclass(cname,phone) VALUES('小河班','110') INSERT INTO sclass(cname,phone) VALUES('小河班','200') INSERT INTO sclass(cid,cname,phone) VALUES(100,'小河班','180')
    自增长:从哪里结束的增长,再从哪里开始增长 -- 清空表 DELETE FROM sclass; -- 不能约束自增长效果 TRUNCATE TABLE sclass; -- 删除表约束产生的效果,不能删除表本身,作为结构一部分,只能用drop删除 -- 零填充 DROP TABLE sclass; CREATE TABLE sclass( cid INT(5) ZEROFILL PRIMARY KEY AUTO_INCREMENT,-- 零填充 主键约束 自增长 cname VARCHAR(20) NOT NULL,-- 非空约束 adress VARCHAR(20) DEFAULT '东南角', phone VARCHAR(16) UNIQUE -- 唯一约束(多个约束空格) ); INSERT INTO sclass(cname,phone) VALUES('小河班','110')
    SELECT * FROM sclass;
    -- 外键 先创建主表,再创建外表
    作用:用于解决两张表的数据冗余问题
    注意:

    1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!

    2)主表的参考字段通用为主键!

    3)添加数据: 先添加主表,再添加副表

    4)修改数据: 先修改副表,再修改主表

    5)删除数据: 先删除副表,再删除主表


    -- 创建主表
    CREATE TABLE dept( did INT PRIMARY KEY AUTO_INCREMENT, -- 主键 自增长约束 INT类型 dname VARCHAR(10), mgr VARCHAR(10) );
    -- 创建外表 CREATE TABLE emp( eid INT PRIMARY KEY AUTO_INCREMENT, -- 外表主键 ename VARCHAR(10), did INT, -- 外键 CONSTRAINT fk_emp_dept FOREIGN KEY(did) -- 括号里声明外键是哪个 REFERENCES dept(did) -- 外键约束 );
    CONSTRAINT:建立约束; FOREIGN KEY:外键; REFERENCES:保持数据一致性,完整性 SELECT * FROM emp; SELECT * FROM dept;

     

    -- 外键约束
    -- 修改数据 先改附表,再改主表
    UPDATE emp SET did=2 WHERE eid=4; UPDATE dept SET did=4 WHERE did=3; -- 删除数据 DELETE FROM emp WHERE did=2; DELETE FROM dept WHERE did=2; SELECT * FROM emp; SELECT * FROM dept;

    -- 链接查询(多表查询)

    连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”,这只是一种内存形态,并不是真的形成了一个新的数据表

    -- 交叉链接(没有 on 这个条件)

    实际上,交叉连接是将两个表不设定任何条件的连接结果

    SELECT * FROM emp JOIN dept
    -- 内连接
    SELECT * FROM emp JOIN dept ON emp.did=dept.did
    -- 查询海绵宝宝所在的部门名称
    SELECT dname FROM emp JOIN dept ON emp.did=dept.did
    WHERE ename='海绵宝宝'
    -- 查询开发部所有员工信息
    SELECT * FROM emp JOIN dept ON emp.did=dept.did   -- on后面是因为有重复,因此设置连接名
    WHERE dname='开发部';
    -- 左(外)连接
    SELECT * FROM dept LEFT JOIN emp ON dept.did=emp.did   -- left是这其中的关键字
    -- 右(外)连接
    SELECT * FROM emp RIGHT JOIN dept ON dept.did=emp.did  -- right是这其中的关键字
    
  • 相关阅读:
    【剑指offer】数字在排序数组中出现的次数
    移动互联网的架构设计浅谈一
    Android开发中遇到的adb问题解决方法
    Datagrid分页、排序、删除代码
    新辰:关于个人站点安全问题的分析及对策探讨
    Android开发中,activity页面跳转后是空白
    实战——二、c#窗体(2)
    实战——一、c#窗体(1)
    c#的sealed修饰符
    c#中,类的重写中,new和override的区别
  • 原文地址:https://www.cnblogs.com/xinzong/p/14250514.html
Copyright © 2020-2023  润新知