mysql約束

-----default 默認(rèn)約束

create table t1(id int default 110, name varchar(10));
創(chuàng)建一個(gè)名為id的表,默認(rèn)值為110 創(chuàng)建name表,數(shù)據(jù)類(lèi)型為VARCHAR,最大長(zhǎng)度為10個(gè)字符
insert into t1(name) value("thenew"),("ameng");
指定了2個(gè)name的數(shù)據(jù) 默認(rèn)id值為110
insert into t1 value(1,'tongyao'),(55,'talent');
這里插入了2個(gè)id值   1    55
如果在插入數(shù)據(jù)時(shí)未指定id的值,MySQL將自動(dòng)使用110作為該字段的值

-----------------not null 非空約束

在MySQL中,當(dāng)你創(chuàng)建一個(gè)表并給某些列設(shè)置NOT NULL約束時(shí),必須為這些列提供值 不能為空

create table t2(id int not null, name varchar(20));
這里定義了id 不能為空 not null 
insert into t2(name)  values("haha");
這里沒(méi)有指定 id
# Field 'id' doesn't have a default value 報(bào)錯(cuò) 因?yàn)閕d既沒(méi)有指定值也沒(méi)有默認(rèn)值

---------unique key 唯一約束

create table t3(id int unique key, name varchar(20) not null);定義了一個(gè) unique key 約束在 id 上
insert into t3 value(1,'xiaoming'); 將 (1, 'xiaoming') 插入到 t3 表中
insert into t3 value(1,'xiaoming'); # 第二條 插入相同的 id 值(1),這違反了 unique key 唯一約束 ,因此 MySQL 會(huì)報(bào)錯(cuò),指出無(wú)法插入相同id的值

----------------primary key 主鍵約束

非空且唯一 就是主鍵約束 要求列中的每個(gè)值都必須是唯一的,而且還不允許有空

create table t4(id int primary key,name varchar(20) not null unique key);
創(chuàng)建t4 id為主鍵 name為 unique key 唯一約束 
insert into t4 values(1,'yy'); id為1   name為 yy

------------------auto_increment 自增長(zhǎng)約束

create table t5(id int primary key auto_increment, name varchar(10));
創(chuàng)建t5表,其中包含 id和name  
id列被定義為主鍵,并且具有AUTO_INCREMENT屬性,當(dāng)插入新記錄時(shí),如果沒(méi)有為id提供值,MySQL會(huì)自動(dòng)生成一個(gè)唯一的遞增值  
insert into t5(name)  values('xiaowang'),('laowang');
向t5表中插入兩行數(shù)據(jù),僅指定了name列的值  id具有AUTO_INCREMENT屬性 會(huì)自動(dòng)自增id數(shù)值
create table tb5(id int primary key auto_increment, name varchar(10))auto_increment=100;
創(chuàng)建一個(gè)名為tb5的表,指定了AUTO_INCREMENT的起始值為100  
向tb5表中插入新數(shù)據(jù)而沒(méi)有為id指定值時(shí),MySQL將從100開(kāi)始生成遞增的id值 

----foreign key 外鍵約束

create table a(a_id int primary key auto_increment, -- a_id 是主鍵,自動(dòng)增長(zhǎng)
               a_name varchar(20) not null    --------a_name 是非空字符串,最大長(zhǎng)度20
              );   創(chuàng)建a列表 
              
insert into a values(1,'a1'),(2,'a2');    -- 向a表插入兩行數(shù)據(jù)

select * from a;
+------+--------+
| a_id | a_name |
+------+--------+
|    1 | a1     |
|    2 | a2     |
+------+--------+


    

create table b(b_id int primary key,         --b_id 是主鍵
               age int not null,    ----年齡,非空
               sex varchar(20),   -性別未插入數(shù)據(jù)
               hei int,                  --身高未插入數(shù)據(jù)
               fy_id int not null,   --fy_id 是外鍵,引用a表的a_id,非空
               foreign key(fy_id) references a(a_id)-- 外鍵約束,確保fy_id在a表的a_id中存在
              );  創(chuàng)建b列表
              
insert into b values(1,19,'nan',178,1),(2,20,'nv',172,2);-- 向b表插入兩行數(shù)據(jù),每行都引用了a表中的一條記錄


mysql> select * from b;


+------+-----+------+------+-------+
| b_id | age | sex  | hei  | fy_id |
+------+-----+------+------+-------+
|    1 |  19 | nan  |  178 |     1 |
|    2 |  20 | nv   |  172 |     2 |
+------+-----+------+------+-------+

------------------表關(guān)系

學(xué)生表

ER模型
    實(shí)體: 張三
    實(shí)體集  全體學(xué)生
    屬性    學(xué)生的學(xué)號(hào)  姓名  年齡 
    域  范圍意思   月的域 (1-12)  系別的域就是(男和女)
    聯(lián)系  老師和學(xué)生之間地關(guān)系 就是 授課關(guān)系  

one to one

 一個(gè)學(xué)校 只能 有一個(gè)校長(zhǎng)
 一個(gè)校長(zhǎng) 也只能擔(dān)任一個(gè)學(xué)校

one to many

一個(gè)學(xué)??梢杂?多個(gè)老師 
每個(gè)老師 只能在 一個(gè)學(xué)校里面任職

many to many

多對(duì)多 一定有一張 中間表 存的是多對(duì)多的關(guān)系

一個(gè)學(xué)生 可以上 N個(gè)課程
每個(gè)課程 可以有多個(gè)學(xué)員進(jìn)行學(xué)習(xí)

學(xué)生表

s_id name
1 張三
2 李四
3 王二
4 麻子
創(chuàng)建student表,包含s_id(主鍵,自動(dòng)增長(zhǎng))和s_name(非空,最大長(zhǎng)度20)
create table student(s_id int primary key auto_increment, -- s_id是主鍵,并且具有auto_incremen   自動(dòng)增長(zhǎng) 屬性
                     s_name varchar(20) not null  s_name(非空,最大長(zhǎng)度20)
                    );
                    
                    
insert into student values(1,'zhangsan'),(2,'lisi'),(3,'wanger'),(4,'mazi');
因?yàn)閕d具有 auto_incremen 自增長(zhǎng)屬性 MySQL會(huì)自動(dòng)為每行生成一個(gè)唯一的遞增的c_id值(1 2 3 4)

課程表

課程表,其中包含了課程的ID(c_id)和課程名稱(chēng)(course)

c_id course
1 python
2 java
3 web
4 c++
create table course(c_id int primary key auto_increment,-- c_id是主鍵,并且具有自auto_increment自增長(zhǎng)屬性
                     c_name varchar(20) not null   -- c_name是非空字符串,最大長(zhǎng)度20
                    );

insert into course values(1,'python'),(2,'java'),(3,'web'),(4,'c++');
c_id具有auto_increment自增長(zhǎng)屬性, MySQL會(huì)自動(dòng)為每行生成一個(gè)唯一的遞增的c_id值  (1 2 3 4)

中間表

s_id c_id
1 張三 1 python
1 張三 2 java
1 張三 3 web
2 李四 2 java
2 3
2 4
4 1 python
4 2 java
4 3 web
4 4 c++
create table zhongjian(ss_id int,   -- 學(xué)生ID的外鍵
                    cc_id int,                  -- 課程ID的外鍵
                    primary key(ss_id, cc_id),  -- 設(shè)定聯(lián)合主鍵
                    foreign key(ss_id) references student(s_id),-- 外鍵約束到student表的s_id
                    foreign key(cc_id) references course(c_id) - 外鍵約束到course表的c_id
                    ); 創(chuàng)建 zhongjian 表 
                    
insert into zhongjian values(1,1),(1,2),(1,3),(2,2);
s_id c_id
1 張三 1 python
1 張三 2 java
1 張三 3 web
2 李四 2 java
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容