首頁  >  文章  >  資料庫  >  MySQL建立表格時的條件有哪些

MySQL建立表格時的條件有哪些

王林
王林轉載
2023-06-03 18:55:031848瀏覽

由於增刪改了emp表中的記錄,因此這裡重新建立了一個腳本並使用

create database bjpowernnode;
use bjpowernode;
source C:\Users\Administrator\Desktop\bjpowernode.sql;

約束

1.什麼是約束?

  • 約束就是表格中的限制條件

  • #約束的關鍵字是:constraint

2. 約束的分類

  • 非空白限制    not null

  • 唯一性限制  unique

  • 主鍵約束    primary key

  • ## 外鍵約束   

    foreign key

  • 檢查約束    MySQL資料庫不支持,Oracle資料庫支援

1. not null(非空約束)

not null約束的字段,不能為null值,必須給具體的資料

建立表,給字段添加非空約束【使用者的郵箱地址不能為空】

drop table if exists t_user;
create table t_user(
        id int(10),
        name varchar(32) not null,
        email varchar (32)
);

MySQL建立表格時的條件有哪些

MySQL建立表格時的條件有哪些

2. unique(唯一性限制)

建立表,保證郵件地址唯一

create table t_user(
id int(10),
name varchar(32) not null,
email varchar(128) unique
);

MySQL建立表格時的條件有哪些

unique約束的欄位不能重複,但是可以為null

MySQL建立表格時的條件有哪些

#以上的約束屬於列級約束

MySQL建立表格時的條件有哪些

MySQL建立表格時的條件有哪些

MySQL建立表格時的條件有哪些

表級約束:

 create table t_user(
     id int(10),
     name varchar(32),
     email varchar(128),
     unique(email)
 );

 1.使用表級約束為多個字段添加約束MySQL建立表格時的條件有哪些

 create table t_user(
     id int(10),
     name varchar(32),
     email varchar(128),
     unique(name,email)
);

2.表級約束可以給約束起名,以後透過這個名字來刪除約束

#
   create table t_user(
       id int(10),
       name varchar(32),
       email varchar(128),
       constraint t_user_email_unique unique(email)
 );

  • #not null 和unique可以結合使用

3. primary key (主鍵約束)

1.主鍵涉及到的術語:

  • 主鍵約束
  • #主鍵欄位
  • 主鍵值

#2.以上三者之間的關係:

  • 表中的某個欄位新增主鍵約束之後,該欄位稱為主鍵欄位
  • 主鍵欄位中出現的每一個資料都稱為主鍵值
  • 3.為某個欄位新增主鍵約束以後,該欄位不能重複,也不能為空
#主鍵約束效果和''not null unique'' 相同,但是本質不同,

主鍵約束除了可以做到''not null unique''之外
  • 主鍵欄位也會預設加入''索引-index''
  • 4. 一張表應給有主鍵字段,如果沒有,表示這張表是無效的

主鍵值是當前行資料的唯一標識
  • 主鍵值是目前行資料的身份證號碼
  • #即使表中的兩行記錄資料是完全相同的,
  • ##但是由於主鍵值不同,就認為這是兩行完全不同的欄位

#5.無論是單一主鍵或複合主鍵,一張表的主鍵限制只能有一個

MySQL建立表格時的條件有哪些

給一個字段添加主鍵約束,被稱為單一主鍵約束

MySQL建立表格時的條件有哪些

#給多個字段聯合添加主鍵約束,被稱為複合主鍵

MySQL建立表格時的條件有哪些

###6.主鍵依性質分類:###############自然主鍵:主鍵值是自然數,這個主鍵和目前的業務沒有關係############業務主鍵:主鍵值和目前業務緊密相關############當業務改變的時候,主鍵值通成會受到影響,所以業務主鍵之用很少。 ############單一主鍵,列級約束###
create table t_user(
    id int(10) primary key,
    name varchar(32)
);
#############單一主鍵,表極約束###
 create table t_user(
     id int(10),
     name varchar(32),
     primary key(id)
);
####### ######複合主鍵:只能用表格級約束###
mysql> create table t_user(
    -> id int(10),
    -> name varchar(32),
    -> primary key(id,name)
    -> );
##########

MySQL建立表格時的條件有哪些

auto_increment:主键自增

MySQL数据管理系统中提供了一个自增的数字,专门用来自动生成主键值

主键值不需要用户维护,也不需要用户提供了,自动生成的,

这个自增的数字默认从1开始以1递增:1,2,3,4,....

mysql> create table t_user(
    -> id int(10) primary key auto_increment,
    -> name varchar(32)
    -> );

MySQL建立表格時的條件有哪些

4. foreign key(外键约束)

1.外键约束涉及到的术语:

  • 外键约束

  • 外键值

  • 外键字段

2.以上三者之间的关系:

  • 某个字段添加外键约束以后称为外键字段

  • 外键字段中的每一个数据称为外键值

3.外键分为单一外键和复合外键

  • 单一外键:给一个字段添加外键约束

  • 复合外键:给多个字段添加外键约束

4.一张表中可以有多个外键字段

设计一个数据库表,用来存储学生和班级信息,给出两种解决方案:

学生信息和班级信息之间的关系:一个班级对应多个学生,这是典型的一对多的关系

在多的一方加外键

第一种设计方案:将学生信息和班级信息存储到一张表中

第二种设计方案:将学生信息和班级信息分开两张表存储,学生表+班级表

  • 学生表 t_student

sno(主键约束) sname classno(外键约束)
1 jack 100
2 lucy 100
3 kk 100
4 smith 200
5 frank 300
6 jhh 300
  • 班级表t_calss

cno(主键约束) cname
100 高三1班
200 高三2班
300 高三3班

为了保证t_student 表中的classno字段中的数据必须来自于t_class表中的cno字段中的数据,有必要给t_student表中的classno字段添加外键约束,classno称为外键字段,该字段中的值称为外键值。

注意:

1.外键值可以为空

2.外键字段必须得引用这张表中的主键吗?

  • 外键字段引用一张表的字段的时候,被引用的字段必须具备唯一性

  • 即具有unique约束,不一定非是主键

3.班级表为父表,学生表为子表

  • 应该先创建父表,再创建子表

  • 删除数据时,应该先删除子表中的数据,再删除父表中的数据

  • 插入数据时,应该先插入父表中的数据,再删除子表中的数据

MySQL建立表格時的條件有哪些

DROP TABLE IF EXISTS t_student;
DROP TABLE IF EXISTS t_class;
 
 CREATE TABLE t_class(
 cno INT(3) PRIMARY KEY,
 cname VARCHAR(128) NOT NULL UNIQUE
 );
 
 CREATE TABLE t_student(
 sno INT(3) PRIMARY KEY,
 sname VARCHAR(32) NOT NULL,
 classno INT(3),-- 外键
 CONSTRAINT t_student_class_fk FOREIGN KEY(classno) REFERENCES t_class(cno)
 );
 
 INSERT INTO t_class(cno,cname) VALUES(100,'高三1班');
 INSERT INTO t_class(cno,cname) VALUES(200,'高三2班');
 INSERT INTO t_class(cno,cname) VALUES(300,'高三3班');
 
 INSERT INTO t_student(sno,sname,classno) VALUES(1,'jack',100);
 INSERT INTO t_student(sno,sname,classno) VALUES(2,'lucy',100);
 INSERT INTO t_student(sno,sname,classno) VALUES(3,'hh',100);
 INSERT INTO t_student(sno,sname,classno) VALUES(4,'frank',200); 
 INSERT INTO t_student(sno,sname,classno) VALUES(5,'smith',300);
 INSERT INTO t_student(sno,sname,classno) VALUES(6,'jhh',300);
 
 SELECT * FROM t_student;
 SELECT * FROM t_class;
 
-- 添加失败,因为有外键约束 
 INSERT INTO t_student(sno,sname,classno) VALUES(8,'kk',500);

重点:典型的一对多关系,设计时在多的一方加外键

5. 级联更新与级联删除

在删除父表中的数据的时候,级联删除子表中的数据

在更新父表中的数据的时候,级联更新子表中的数据

以上的级联更新和级联删除谨慎使用,

因为级联操作会使数据数据改变或删除,数据是无价的。

语法:

  • 级联更新:on update cascase

  • 级联删除:on delete cascase

MySQL建立表格時的條件有哪些

MySQL建立表格時的條件有哪些

MySQL中对于有些约束的修改比较麻烦,所以应该先删除约束,再添加约束

删除外键约束:

alter table t_student drop foreign key t_student_class_fk

添加外键约束并级联更新:

alter table t_student add constraint t_student_class_fk foreign key(classno)
references t_class(no) on delete cascade;

添加外键约束并级联删除:

alter table t_student add constraint t_student_class_fk foreign key(classno)
references t_class(no) on update cascade;

级联删除

MySQL建立表格時的條件有哪些

MySQL建立表格時的條件有哪些

级联更新

MySQL建立表格時的條件有哪些

MySQL建立表格時的條件有哪些

以上是MySQL建立表格時的條件有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除