• 数据约束


    数据约束

    1 什么是数据约束?

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

    2 默认值

    作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值。

    CREATE TABLE user01(

          uid INT,

          uname VARCHAR(10),

          address VARCHAR(20)DEFAULT'艾欧尼亚'

    )

    INSERT INTO user01 VALUES (1,'泰隆','比尔吉沃特');

    INSERT INTO user01(uid,uname) VALUES (2,'艾瑞莉娅');

    INSERT INTO user01 VALUES (3,'菲兹',NULL);

    SELECT * FROM user01;

     

    3 非空约束

    作用: 限制字段必须赋值

    注意:

          1)非空字符必须赋值

          2)非空字符不能赋null

    CREATE TABLE user01(

          uid INT NOT NULL,

          uname VARCHAR(10),

          address VARCHAR(20)DEFAULT'艾欧尼亚'

    )

    INSERT INTO user01 VALUES(1,'卡特','暗影岛');

    可以插入卡特这一条 但是执行下面这条时

    INSERT INTO user01(uname) VALUES('特朗德尔');

    4 唯一

    作用: 对字段的值不能重复

    注意:

          1)唯一字段可以插入null                     

          2)唯一字段可以插入多个null

    CREATE TABLE user01(

          uid INT NOT NULL,

          uname VARCHAR(10) UNIQUE,

          address VARCHAR(20)DEFAULT'艾欧尼亚'

    )

    INSERT INTO user01(uid,uname) VALUES (1,'安妮');

    当再次输入上面这句话时

     

    5 主键

    作用: 非空+唯一

    注意:            

          1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。

          2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的id字段。

    CREATE TABLE emp(

          eid INT PRIMARY KEY AUTO_INCREMENT,

          ename VARCHAR(10),

          deptid INT

    )

    INSERT INTO emp(ename,deptid) VALUES('张三',1);

    INSERT INTO emp(ename,deptid) VALUES('李四',2);

    SELECT * FROM emp;

     

    其中PRIMARY KEY为主键   AUTO_INCREMENT为自增长

    自增长字段可以不赋值,自动递增

    DELETE FROM student; -- 不能影响自增长约束

    TRUNCATE TABLE student; -- 可以影响自增长约束

    6 外键

    作用:约束两种表的数据

              

    出现两种表的情况:

          解决数据冗余高问题: 独立出一张表      

          例如: 员工表  和  部门表

          问题出现:在插入员工表数据的时候,员工表的部门ID字段可以随便插入!!!!!    

          使用外键约束:约束插入员工表的部门ID字段值

          解决办法: 在员工表的部门ID字段添加一个外键约束

    CREATE TABLE dept(    先建主表

          id INT PRIMARY KEY AUTO_INCREMENT,

          dname VARCHAR(15)

    )

    CREATE TABLE emp(     后建附表

          eid INT PRIMARY KEY AUTO_INCREMENT,

          ename VARCHAR(10),

          deptid INT,

          CONSTRAINT emp_dept_fk FOREIGN KEY(deptid)REFERENCES dept(id)

    )

    INSERT INTO dept(dname) VALUES ('测试部');

    INSERT INTO dept(dname) VALUES ('市场部');

    INSERT INTO dept(dname) VALUES ('销售部');

    SELECT * FROM dept;

    INSERT INTO emp(ename,deptid) VALUES('猪八戒',3);

    INSERT INTO emp(ename,deptid) VALUES('孙悟空',2);

    INSERT INTO emp(ename,deptid) VALUES('白骨精',1);

    SELECT * FROM emp;

    注意:

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

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

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

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

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

     

    当插入主表没有的值时

    INSERT INTO emp(ename,deptid) VALUES('唐三藏',4);

     

    l  两种全表删除的区别

    首先我们新建一个表test插入数据 其中主键id 自增长

    CREATE TABLE test(

          id INT PRIMARY KEY AUTO_INCREMENT,

          tname VARCHAR(10)

    )

    INSERT INTO test(tname) VALUES('小红');

    INSERT INTO test(tname) VALUES('小蓝');

    INSERT INTO test(tname) VALUES('小绿');

     

    首先是delete from删除

    DELETE FROM test;

    删除后再添加:INSERT INTO test(tname) VALUES('小红');

    INSERT INTO test(tname) VALUES('小蓝');

    INSERT INTO test(tname) VALUES('小绿');

    这时:

    而truncate table 的运行结果为

  • 相关阅读:
    eslint 验证vue文件 报错 unexpected token =解决方法
    启动3ds Max报 d3dx9_43.dll丢失 解决方法
    windows下webpack不是内部命令 解决方法
    修改node.js默认的npm安装目录
    tp5 重定向缺少index.php报错(No input file specified)
    PHP单表操作mysqli数据库类的封装
    php 常见图片处理函数封装
    php图像处理函数image_type_to_extension、image_type_to_mime_type 的区别
    kubernetes集群部署mysql 8.0
    Maven ResourceBundle.getBundle读取Properties异常MissingResourceException: Can't find bundlei解决方法
  • 原文地址:https://www.cnblogs.com/zzq123/p/9967738.html
Copyright © 2020-2023  润新知