MySQL (2)建表约束

1.-  主键约束
    它是唯一确定一张表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得改字段不重复且不为空 
  1. 每个字段后方添加
    create table user(
        id int primary key,
        name varchar(20)
    )engine=innodb default charset=utf8;
    当我们两次插入 primary key 的 id 时:
     insert into user values(1, '张三');
    insert into user values(1, '张三');
    [SQL]insert into user values(1, '张三');
    [Err] 1062 - Duplicate entry '1' for key 'PRIMARY'
    由于存在主键约束,添加重复的值就会出现错误。
    当我们接着插入null值的时候:
     INSERT INTO user VALUES(NULL,'李四');
     [SQL]INSERT INTO user VALUES(NULL,'李四');
    [Err] 1048 - Column 'id' cannot be null
    不能为空。
    主键条件: 这个字段不能重复且不能为空
    目的:就是唯一确定记录
  1. 放在创建语句最后一起添加
    双键约束: 联合主键
    -- 只要联合的主键加起来不重复就可以
     create table user2(
        id int,
        name varchar(20),
        password varchar(20),
        primary key(id, name)
    )engine=innodb default charset=utf8;
     INSERT INTO user2 VALUES(1,'张三','123');
    INSERT into user2 VALUES(2,'张三','123');
    INSERT INTO uesr2 VALUES(1,'李四','123');
    主键中存在任意一个不同字段即可完成添加
     INSERT INTO uesr2 VALUES(1,'李四','123');
     [SQL]INSERT INTO user2 VALUES(NULL,'李四','123');
    [Err] 1048 - Column 'id' cannot be null
    但对于添加而言,字段值仍然不能为空
2.-  自增约束
    当主键约束+自增约束时,会自动帮我们管控值
     INSERT INTO user3 (name) VALUES ('张三');
     INSERT INTO user3 (name) VALUES ('张三');
    此时,id会自增
    -- 此外,如果我们创建表时,忘记创建主键约束了,如何解决
     CREATE TABLE user4(
        id INT,
        name varchar(20)
    )engine=innodb default charset=utf8;
        
        可以通过如下: 修改表结构,添加主键约束
     ALTER table user4 add PRIMARY key(id);
     [SQL]ALTER TABLE user10 ADD  PRIMARY key(id);
    [Err] 1062 - Duplicate entry '1' for key 'PRIMARY'
     添加主键约束 ,但表中有数据时,未出现提示表中有约束,解决方法,删除表中数据
    删除主键约束
     ALTER TABLE user4 drop PRIMARY KEY;
   修改主键约束,使用modify
    ALTER TABLE 表名  modify  字段名 数据类型 PRIMARY KEY;
3.- 唯一约束
    约束修饰的字段的值不能重复
     CREATE TABLE user5(
    id int,
    name varchar;
    );
    UNIQUE 限制字段唯一,无法重复
     ALTER TABLE user5 ADD UNIQUE (name);
    
     INSERT INTO user5 VALUES(1,'zhangsan');
     INSERT INTO user5 VALUES(1,'zhangsan');
    [SQL]INSERT INTO user5 VALUES(1,'zhangsan');
    [Err] 1062 - Duplicate entry 'zhangsan' for key 'name'
     create table user6(
        id int,
        name varchar(20),
        UNIQUE(name)
    );
    DESCRIBE user6;
    CREATE TABLE user7 (
        id int ,
        name varchar(20) UNIQUE
    );
    DESCRIBE user7;
    CREATE TABLE user8 (
        id int ,
        name varchar(20)
        UNIQUE(id,name)
    );
    
        结果显示user6和user7表格结构中key相同
    删除唯一约束
    alter table user8  drop  index name;
     modify  添加
    alrter table user8 modify name varchar(20) unique;
          总结
  1. 建表时就添加约束
  2. 可以使用alter ... add ...
  3. alter ... modify ...
  4. 删除alter ... drop ...
    
-- 非空约束
    create table user9(
        in int,
        name varchar(20) not null
    )engine=innodb default charset=utf8;
    insert into user9(id) values(1,'张三');
-- 默认约束
    当我们插入字段值的时候,如果没有传值,就会使用默认值
    CREATE TABLE user9 (
        id int,
        name varchar(20),
        age int DEFAULT 10
    ) ENGINE=INNODB DEFAULT charset=utf8;
    INSERT INTO user10 (id,name) VALUES (1,'张三');
    SELECT * from user10; 
    
    
-- 外键约束
   ​涉及到两个表:父表,子表
    主表,副表。
    -- 班级
     CREATE TABLE classes(
        id INT PRIMARY KEY,
        name varchar(20)
    )ENGINE=INNODB DEFAULT charset=utf8;
    -- 学生
     CREATE TABLE students(
        id INT PRIMARY KEY,
        name varchar(20),
        class_id int,
        foreign KEY(class_id) REFERENCES classes(id)
    )ENGINE=INNODB DEFAULT charset=utf8;
    desc classes;
    desc students;
    
     INSERT into students VALUES(1001,'张三',1);
    INSERT into students VALUES(1002,'张三',2);
    INSERT into students VALUES(1003,'张三',3);
    INSERT into students VALUES(1004,'张三',4);
     SELECT * from students;
     [SQL]INSERT INTO students VALUES(1005,'李四',5);
    [Err] 1452 - Cannot add or update a child row: a foreign key constraint fails (`hello`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
     INSERT INTO  classes VALUES (1,'一班');
    INSERT INTO  classes VALUES (2,'二班');
    INSERT INTO  classes VALUES (3,'三班');
    INSERT INTO  classes VALUES (4,'四班');
     SELECT * FROM classes;
    
  1. 主表中 classes 中没有的数据值,在副表中,是不可以被使用的。
  2. 主表中的记录被副表引用时,是不可以被删除的
     [SQL]DELETE from classes WHERE id=4;
    [Err] 1451 - Cannot delete or update a parent row: a foreign key constraint fails (`hello`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL中,可以通过约束来保证中数据的完整性和一致性。常见的约束有主键约束、唯一约束、非空约束和外键约束等。下面是MySQL时的约束介绍: 1. 主键约束:主键是一种特殊的唯一约束,它能够唯一确定一张中的一条记录。在MySQL中,可以通过以下两种方式添加主键约束: ①在创时添加主键约束: ```mysql CREATE TABLE user ( id INT PRIMARY KEY, # 添加主键约束 name VARCHAR(20), age INT ); ``` ②在创后添加主键约束: ```mysql ALTER TABLE user ADD PRIMARY KEY (id); # 添加主键约束 ``` 2. 唯一约束:唯一约束用于保证某个字段的值在中是唯一的。在MySQL中,可以通过以下两种方式添加唯一约束: ①在创时添加唯一约束: ```mysql CREATE TABLE user ( id INT, name VARCHAR(20) UNIQUE, # 添加唯一约束 age INT ); ``` ②在创后添加唯一约束: ```mysql ALTER TABLE user ADD UNIQUE (name); # 添加唯一约束 ``` 3. 非空约束:非空约束用于保证某个字段的值不为空。在MySQL中,可以通过以下两种方式添加非空约束: ①在创时添加非空约束: ```mysql CREATE TABLE user ( id INT, name VARCHAR(20) NOT NULL, # 添加非空约束 age INT ); ``` ②在创后添加非空约束: ```mysql ALTER TABLE user MODIFY name VARCHAR(20) NOT NULL; # 添加非空约束 ``` 4. 外键约束:外键约束用于保证之间的数据一致性。在MySQL中,可以通过以下两种方式添加外键约束: ①在创时添加外键约束: ```mysql CREATE TABLE order ( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) # 添加外键约束 ); ``` ②在创后添加外键约束: ```mysql ALTER TABLE order ADD FOREIGN KEY (user_id) REFERENCES user(id); # 添加外键约束 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值