日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库约束,表的设计

發布時間:2024/3/24 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据库约束,表的设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Author: 老九
個人博客:老九的CSDN博客
?? 個人名言:不可控之事 樂觀面對
?? 系列專欄:MySQL通關系列

文章目錄

  • 數據庫約束
    • not null
    • unique
    • default
    • primary key 主鍵
      • auto_increment
    • foreign key 外鍵
    • check
  • 表的設計
    • 一對一
    • 一對多
    • 多對多
      • 多對多建表實例
      • 插入數據到實例實現多對多

數據庫約束

not null

  • 指定某列的存儲不能為null值

    create table student (id int not null,name varchar(20));
    Query OK, 0 rows affected (0.01 sec)

    mysql> desc student;
    ±------±------------±-----±----±--------±------+
    | Field | Type | Null | Key | Default | Extra |
    ±------±------------±-----±----±--------±------+
    | id | int(11) | NO | | NULL | |
    | name | varchar(20) | YES | | NULL | |
    ±------±------------±-----±----±--------±------+
    2 rows in set (0.00 sec)

unique

  • 保證某列必須有唯一的值,插入重復的值就會報錯

default

  • 規定給列賦值時的默認值

    create table student(id int,name varchar(20) default ‘匿名’);

primary key 主鍵

  • 主鍵約束,是not null 與unique的結合,確保某列的賦值不能為null,并且是唯一的

auto_increment

  • 自增特點:
    1.如果表中沒有記錄,自增從1開始
    2.如果有數據,從上一條記錄往下自增
    3.插入再刪掉數據,自增的值不會重復利用,會按刪掉的那條開始自增

    create table student (id int primary key auto_increment,name varchar(20));
    Query OK, 0 rows affected (0.01 sec)

    mysql> desc student;
    ±------±------------±-----±----±--------±---------------+
    | Field | Type | Null | Key | Default | Extra |
    ±------±------------±-----±----±--------±---------------+
    | id | int(11) | NO | PRI | NULL | auto_increment |
    | name | varchar(20) | YES | | NULL | |
    ±------±------------±-----±----±--------±---------------+
    2 rows in set (0.00 sec)

    mysql> insert into student values(null,‘張三’);
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from student;
    ±—±-------+
    | id | name |
    ±—±-------+
    | 1 | 張三 |
    ±—±-------+
    1 row in set (0.00 sec)

foreign key 外鍵

  • 外鍵約束,在表一中的數據必須在表二中存在,要參照完整性準則

  • 外鍵約束描述的是兩張表的兩個列之間的“依賴關系”

  • 外鍵約束會影響表的刪除,例如下面的實例的class表被關聯,所以它不能被輕易刪除

    mysql> create table class (
    -> id int primary key,
    -> name varchar(20) not null
    -> );
    Query OK, 0 rows affected (0.04 sec)

    mysql> create table student (
    -> id int primary key,
    -> name varchar(20) not null,
    -> email varchar(20) default ‘unknow’,
    -> QQ varchar(20) unique,
    -> classId int , foreign key (classId) references class(id)
    -> );
    Query OK, 0 rows affected (0.03 sec)

    mysql> desc class;
    ±------±------------±-----±----±--------±------+
    | Field | Type | Null | Key | Default | Extra |
    ±------±------------±-----±----±--------±------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(20) | NO | | NULL | |
    ±------±------------±-----±----±--------±------+
    2 rows in set (0.02 sec)

    mysql> desc student;
    ±--------±------------±-----±----±--------±------+
    | Field | Type | Null | Key | Default | Extra |
    ±--------±------------±-----±----±--------±------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(20) | NO | | NULL | |
    | email | varchar(20) | YES | | unknow | |
    | QQ | varchar(20) | YES | UNI | NULL | |
    | classId | int(11) | YES | MUL | NULL | |
    ±--------±------------±-----±----±--------±------+
    5 rows in set (0.00 sec)

check

  • 指定一個條件,通過條件來對值進行判定

  • 但是mysql并不支持

    create table test_user (
    id int,
    name varchar(20),
    sex varchar(1),
    check (sex =‘男’ or sex=‘女’)
    );

表的設計

一對一

  • 一對一設計表就比如學生表和賬戶表,一個賬戶對應到一個學生,一個學生也只有一個賬戶
  • 表示方法
    1.可以把這兩個實體用一張表來表示
    2.可以用兩張表來表示,其中一張表包含了另一個表的id

一對多

  • 一個學生應該處于一個班級中,一個班級可以包含多個學生
  • 表示方法:
    1.在班級表中,新增一列,表示這個班級里的學生id都有啥(mysql沒有數組類型,redis可以)
    2.班級表不變,學生表中,新增一列classId

多對多

  • 多對多設計表就好比學生表和課程表,一個學生可以選多個課程,一個課程也可以被多個學生選擇
  • 表示方法 :
    使用一個關聯表,來表示兩個實體之間的關系

多對多建表實例

-- 學生表 mysql> create table test_student (-> id int primary key,-> name varchar(10) default 'unknow'-> ); Query OK, 0 rows affected (0.03 sec) -- 選課表 mysql> create table test_course (-> id int primary key,-> name varchar(20) default 'unknow'-> ); Query OK, 0 rows affected (0.02 sec) -- 成績表 mysql> create table test_score (-> studentId int,-> courseId int,-> score int,-> foreign key (studentId) references test_student(id),-> foreign key (courseId) references test_course(id)-> ); Query OK, 0 rows affected (0.02 sec)mysql> desc test_student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | unknow | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)mysql> desc test_coures; ERROR 1146 (42S02): Table 'java_5_27.test_coures' doesn't exist mysql> desc test_course; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | unknow | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)mysql> desc test_score; +-----------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+---------+------+-----+---------+-------+ | studentId | int(11) | YES | MUL | NULL | | | courseId | int(11) | YES | MUL | NULL | | | score | int(11) | YES | | NULL | | +-----------+---------+------+-----+---------+-------+ 3 rows in set (0.00 sec)

插入數據到實例實現多對多

mysql> insert into test_student values (1, 'listen'); Query OK, 1 row affected (0.01 sec)mysql> insert into test_course values (1, '數學'); Query OK, 1 row affected (0.00 sec)mysql> insert into test_student values (2, 'Faker'); Query OK, 1 row affected (0.00 sec)mysql> insert into test_course values (2, '數學'); Query OK, 1 row affected (0.00 sec)mysql> insert into test_score values(1, 1, 90); Query OK, 1 row affected (0.00 sec)mysql> insert into test_score values (1, 2, 99); Query OK, 1 row affected (0.00 sec)mysql> insert into test_score values (2, 1, 50); Query OK, 1 row affected (0.00 sec)mysql> insert into test_score values (2, 2, 60); Query OK, 1 row affected (0.00 sec)mysql> select * from test_student; +----+--------+ | id | name | +----+--------+ | 1 | listen | | 2 | Faker | +----+--------+ 2 rows in set (0.00 sec)mysql> select * from test_course; +----+--------+ | id | name | +----+--------+ | 1 | 數學 | | 2 | 語文 | +----+--------+ 2 rows in set (0.00 sec)mysql> select * from test_score; +-----------+----------+-------+ | studentId | courseId | score | +-----------+----------+-------+ | 1 | 1 | 90 | | 1 | 2 | 99 | | 2 | 1 | 50 | | 2 | 2 | 60 | +-----------+----------+-------+ 4 rows in set (0.00 sec)

————————————————————————
碼字不易,大家的支持就是我堅持下去的動力
版權聲明:本文為CSDN博主「浦上青天」的原創文章

先自我介紹一下,小編13年上師交大畢業,曾經在小公司待過,去過華為OPPO等大廠,18年進入阿里,直到現在。深知大多數初中級java工程師,想要升技能,往往是需要自己摸索成長或是報班學習,但對于培訓機構動則近萬元的學費,著實壓力不小。自己不成體系的自學效率很低又漫長,而且容易碰到天花板技術停止不前。因此我收集了一份《java開發全套學習資料》送給大家,初衷也很簡單,就是希望幫助到想自學又不知道該從何學起的朋友,同時減輕大家的負擔。添加下方名片,即可獲取全套學習資料哦

總結

以上是生活随笔為你收集整理的MySQL数据库约束,表的设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。