最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL示例講解數(shù)據(jù)庫約束以及表的設(shè)計

 更新時間:2022年06月16日 09:58:08   作者:亞太地區(qū)百大最帥面孔第101名  
約束主要完成對數(shù)據(jù)的檢驗,保證數(shù)據(jù)庫數(shù)據(jù)的完整性;如果有相互依賴數(shù)據(jù),保證該數(shù)據(jù)不被刪除,本篇文章教你如何給表設(shè)置約束及設(shè)計

數(shù)據(jù)庫約束

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

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

default

規(guī)定給列賦值時的默認(rèn)值

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

primary key 主鍵

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

auto_increment 自增特點:

1.如果表中沒有記錄,自增從1開始

2.如果有數(shù)據(jù),從上一條記錄往下自增

3.插入再刪掉數(shù)據(jù),自增的值不會重復(fù)利用,會按刪掉的那條開始自增

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 外鍵

外鍵約束,在表一中的數(shù)據(jù)必須在表二中存在,要參照完整性準(zhǔn)則

外鍵約束描述的是兩張表的兩個列之間的“依賴關(guān)系”

外鍵約束會影響表的刪除,例如下面的實例的class表被關(guān)聯(lián),所以它不能被輕易刪除

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

指定一個條件,通過條件來對值進(jìn)行判定

但是mysql并不支持

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

表的設(shè)計

一對一

一對一設(shè)計表就比如學(xué)生表和賬戶表,一個賬戶對應(yīng)到一個學(xué)生,一個學(xué)生也只有一個賬戶

表示方法

1.可以把這兩個實體用一張表來表示

2.可以用兩張表來表示,其中一張表包含了另一個表的id

一對多

一個學(xué)生應(yīng)該處于一個班級中,一個班級可以包含多個學(xué)生

表示方法:

1.在班級表中,新增一列,表示這個班級里的學(xué)生id都有啥(mysql沒有數(shù)組類型,redis可以)

2.班級表不變,學(xué)生表中,新增一列classId

多對多

多對多設(shè)計表就好比學(xué)生表和課程表,一個學(xué)生可以選多個課程,一個課程也可以被多個學(xué)生選擇

表示方法 :

使用一個關(guān)聯(lián)表,來表示兩個實體之間的關(guān)系

多對多建表實例

-- 學(xué)生表
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)

插入數(shù)據(jù)到實例實現(xiàn)多對多

mysql> insert into test_student values (1, 'listen');
Query OK, 1 row affected (0.01 sec)

mysql> insert into test_course values (1, '數(shù)學(xué)');
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, '數(shù)學(xué)');
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 | 數(shù)學(xué)   |
|  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)

到此這篇關(guān)于MySQL示例講解數(shù)據(jù)庫約束以及表的設(shè)計的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)庫約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql 5.5.x zip直接解壓版安裝方法

    mysql 5.5.x zip直接解壓版安裝方法

    這篇文章主要介紹了mysql 5.5.x zip直接解壓版安裝方法 ,需要的朋友可以參考下
    2016-04-04
  • MySQL視圖(view)的基本用法及說明

    MySQL視圖(view)的基本用法及說明

    這篇文章主要介紹了MySQL視圖(view)的基本用法及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySql數(shù)據(jù)庫基礎(chǔ)之子查詢詳解

    MySql數(shù)據(jù)庫基礎(chǔ)之子查詢詳解

    所謂子查詢是指在一個查詢中嵌套了其他的若干查詢,即在一個SELECT查詢語句的WHERE或FROM子句中包含另一個SELECT查詢語句,下面這篇文章主要給大家介紹了關(guān)于MySQL子查詢的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • mysql 復(fù)制過濾重復(fù)如何解決

    mysql 復(fù)制過濾重復(fù)如何解決

    在進(jìn)行mysql復(fù)制過程中,會出現(xiàn)數(shù)據(jù)重復(fù)的現(xiàn)象,怎樣利用mysql 過濾重復(fù)的數(shù)據(jù)呢?本文將提供詳細(xì)的解決方法,需要了解的朋友可以參考下
    2012-11-11
  • Mac下安裝mysql5.7.18的詳細(xì)步驟

    Mac下安裝mysql5.7.18的詳細(xì)步驟

    這篇文章主要為大家詳細(xì)介紹了]Mac下安裝mysql5.7.18的詳細(xì)步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • MySQL安裝報錯找不到MSVCR120.dll文件丟失的解決方案

    MySQL安裝報錯找不到MSVCR120.dll文件丟失的解決方案

    文章介紹了解決MSVCR120.dll丟失問題的幾種方法,包括重新安裝Microsoft Visual C++ Redistributable、手動下載DLL文件、運行系統(tǒng)文件檢查工具、檢查系統(tǒng)更新以及卸載并重新安裝相關(guān)軟件
    2024-12-12
  • mysql死鎖和分庫分表問題詳解

    mysql死鎖和分庫分表問題詳解

    這篇文章主要給大家介紹了關(guān)于mysql死鎖和分庫分表問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    Binlog日志是二進(jìn)制日志文件,有兩個作用,一個是增量備份,另一個是主從復(fù)制,即主節(jié)點維護(hù)一個binlog日志文件,從節(jié)點從binlog中同步數(shù)據(jù),也可以通過binlog日志來恢復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于如何通過日志文件恢復(fù)MySQL數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • MySQL數(shù)據(jù)庫表的增刪改查操作(進(jìn)階)

    MySQL數(shù)據(jù)庫表的增刪改查操作(進(jìn)階)

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫表的增刪改查操作,文章記錄常用的SQL查詢語句,包括數(shù)據(jù)庫、表和數(shù)據(jù)的增刪改查,逐漸擴展到其他比較復(fù)雜的查詢語句,需要的朋友可以參考下
    2023-11-11
  • mysql中DATE_FORMAT()函數(shù)的具體使用

    mysql中DATE_FORMAT()函數(shù)的具體使用

    在MySQL中,DATE_FORMAT()函數(shù)用于將日期/時間類型的值按照指定的格式進(jìn)行格式化輸出,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05

最新評論

柏乡县| 承德市| 海林市| 望江县| 儋州市| 托克逊县| 井冈山市| 绥江县| 龙南县| 东源县| 城步| 嵊州市| 黄石市| 惠东县| 新巴尔虎右旗| 华蓥市| 鄂州市| 隆尧县| 牟定县| 天水市| 都匀市| 绥江县| 韶山市| 自贡市| 怀仁县| 图们市| 南丰县| 汶川县| 九龙县| 河间市| 诏安县| 怀仁县| 龙海市| 教育| 仁怀市| 鹤岗市| 休宁县| 苍溪县| 仙游县| 鄂托克前旗| 徐州市|