MySQL建表約束

MySQL建表約束

約束名稱 描述
not null 非空約束
uniq 唯一約束
default 默認(rèn)約束
primary key 主鍵約束
auto_increment 自增約束
foreign key 外鍵約束

MySQL約束類型

1.[not] null 類型(不為空)

  • 要填都必須填上
drop table if EXISTS author; -- 判斷有沒有author這個表嫌拣,有的話刪除原來的新創(chuàng)一個author表,沒有的話直接創(chuàng)一個author表
create table author(
    aut_id varchar(8) not null,
    aut_name varchar(50) not null,
    country varchar(25) not null,
    home_city char(20) not null
);

2.unique約束(唯一約束)

  • 重復(fù)的值不能插入

方法一:

drop table if EXISTS author;
create table if not EXISTS author(
    aut_id varchar(8) not null,
    aut_name varchar(50) not null,
    country varchar(25) not null,
    unique (aut_id)
);

方法二:

drop table if EXISTS author;
create table if not EXISTS author(
    aut_id varchar(8) not null unique,
    aut_name varchar(50) not null,
    country varchar(25) not null
); 

3.defaule約束(默認(rèn)約束)

<字段名> <數(shù)據(jù)類型> defaule<默認(rèn)值>;

drop table if EXISTS author;
create table if not EXISTS author(
    id INT,
    name VARCHAR(20),
    age INT DEFAULT 10
);
-- 移除非空約束
alter table author(表名) modtfy age(列名) int;

4.primary key 約束(主鍵約束)

唯一確定一張表中的一條記錄.也就是我們通過給某個字段添加約束,就使得該字段不重復(fù)且不為空;

drop table if EXISTS author;
create table if not EXISTS author(
    id int primary key,
    name varchar(20)
);

聯(lián)合主鍵

聯(lián)合主鍵中的每個字段都不能為空,并且加起來不能和已設(shè)置的聯(lián)合主鍵重復(fù)

drop table if EXISTS author;
create table if not EXISTS author(
    id INT,
    name VARCHAR(20),
    password VARCHAR(20),
    PRIMARY KEY(id, name)
);

5.auto_increment約束(自動增長)

  • 需要配合主鍵一起用

    drop table if EXISTS author;
    create table if not EXISTS author(
      id int primary key auto_increment,
        name varchar(20)
    );
    
  • 如果忘記設(shè)置主鍵灶壶,還可以通過sql語句設(shè)置(兩種方式):

1、 alter table author add primary key(id);
2、 alter table author modify id int primary key;
  • 刪除主鍵
alter table author drop primary key;

6.foreign key約束

涉及兩個表:父表和子表

  • 外鍵可以建立多個构回,多個外鍵接著寫就可以
  • 外鍵會產(chǎn)生的效果:
  • 1.刪除表時,如果不刪除引用外鍵的表疏咐,被引用的表不能直接刪除
  • 2.外鍵的值必須來源于引用的表的主鍵字段
create table classes(id int primary key,name VARCHAR(20));-- 班級表
create table students(id int primary key,name VARCHAR(20),class_id int,foreign key(class_id) references classes(id));//學(xué)生表
//有三個班
insert into classes value(1,'class1');
insert into classes value(2,'class2');
insert into classes value(3,'class3');
//插入學(xué)生
insert into students value(1001,'Lily',1);
insert into students value(1002,'Ony',2);
insert into students value(1003,'Poy',3);

-- 1. 主表(父表)classes 中沒有的數(shù)據(jù)值纤掸,在副表(子表)中是不可以使用的
-- 主表的記錄被副表引用,是不能被刪除的

MySQL數(shù)據(jù)查詢語言

  • 該語言用來查詢記錄浑塞,不會修改數(shù)據(jù)庫和表結(jié)構(gòu)

一借跪、單表查詢

1.帶條件的查詢

以slect開頭:

select * from + 表名稱 + 條件

查詢字段

select 字段 from 表名;

模糊查詢

where 字段 like '%不確定%'

distinct :用distinct來返回不重復(fù)字段的條數(shù)(count(distinct id)),其原因是distinct只能返回他的目標(biāo)字段,而無法返回其他字段

2.排序

基本語法:order by 字段

備注:默認(rèn)是升序酌壕,ASC升序掏愁,DESC降序

3.聚合函數(shù)

count():統(tǒng)計記錄數(shù)
avg():平均數(shù)
max():最大值
min():最小值
sum():求和

4.分組查詢

基本語法:select 字段1,字段2卵牍,聚合函數(shù) from + 表名稱 + group by 字段1果港,字段2

備注:group by和having 一起用,主要是對分組結(jié)果進行過濾

5.LIMT子句(MySQL中獨有的語言)

  • 可以被用于強制 SELECT 語句返回指定的記錄數(shù)
  • 接受一個或兩個數(shù)字參數(shù)糊昙。參數(shù)必須是一個整數(shù)常量
  • 如果給定兩個參數(shù)京腥,第一個參數(shù)指定第一個返回記錄行的偏移量,第二個參數(shù)指定返回記錄行的最大數(shù)目溅蛉。
SELECT * from t LIMIT 1;-- 返回第一條記錄 
select * from t LIMIT 3,6;-- 返回六條記錄公浪,從第四條開始計算 
  • Limit的執(zhí)行效率高,是對于一種特定條件下來說的:即數(shù)據(jù)庫的數(shù)量很大船侧,但是只需要查詢一部分?jǐn)?shù)據(jù)的情況欠气。 高效率的原理是:避免全表掃描,提高查詢效率
  • 在sql語句中镜撩,limt關(guān)鍵字是最后才用到的预柒。以下條件的出現(xiàn)順序一般是:where->group by->having->order by->limit

二队塘、多表查詢

union 、 union all

union:用于連接兩個以上的select語句的結(jié)果宜鸯,講結(jié)果組合到一個結(jié)果集中憔古,并刪除重復(fù)數(shù)據(jù)

union all: 用于連接兩個以上的select語句的結(jié)果,講結(jié)果組合到一個結(jié)果集中淋袖,并顯示全部的數(shù)據(jù)

基本語法:

select 字段 from 表1 union[all|distinct] select 字段 from 表2

備注:union即為union distinct鸿市;若為union all,即返回全部結(jié)果集

表結(jié)構(gòu)一致

笛卡爾積:簡單來說就是兩個集合相乘的結(jié)果即碗,集合A和集合B中任意兩個元素結(jié)合在一起

1.內(nèi)連接(inner join)

兩個表重復(fù)的部分

內(nèi)連接即等值連接焰情,獲取兩個表中字段匹配關(guān)系的記錄,可以省略成join剥懒,可理解成集合概念中的交集内舟,關(guān)鍵字段同時存在與兩表的記錄。

2.左連接(left join)

左連接初橘,獲取左邊主表的全部記錄验游,即使右表沒有對應(yīng)的數(shù)據(jù)

3.右連接(right join)

右連接,獲取右邊主表的全部記錄保檐,即使左表沒有對應(yīng)的數(shù)據(jù)

三批狱、子查詢

1.where 型子查詢

將查詢結(jié)果當(dāng)條件

where型子查詢,如果時where列=(內(nèi)層sql)則內(nèi)層sql返回的必須單行單例單個值展东。

where型子查詢赔硫,如果where列in(內(nèi)層sql)則內(nèi)層sq返回的必須是單例,可以是多行

2.from 型子查詢

#如何用子查詢查出掛科兩門及以上同學(xué)的平均分盐肃,where爪膊,from型都可以
select *from stu;
先把掛科2門及以上的同學(xué)找出來
1)不及格的同學(xué):
   select name,count(*) from stu where score <60 group by name;
2)然后將掛科兩門以上的同學(xué)找出來:
   select name,count(*) as gk from stu where score <60 group by name having gk>=2;
3)將人員抽離出來:
   select name from (select name,count(*) as gk from stu where score <60 group by name having gk>=2) as tmp;
4)求平均分:
   select name,acg(score) from score stu where name in(select name from (select name,count(*) as gk from stu where score <60 group by name having gk>=2) as tmp) group by name;

判斷是否為空值用

-- 不為空值
is not null
-- 為空值
is null
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市砸王,隨后出現(xiàn)的幾起案子推盛,更是在濱河造成了極大的恐慌,老刑警劉巖谦铃,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耘成,死亡現(xiàn)場離奇詭異,居然都是意外死亡驹闰,警方通過查閱死者的電腦和手機瘪菌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘹朗,“玉大人师妙,你說我怎么就攤上這事∫倥啵” “怎么了默穴?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵怔檩,是天一觀的道長。 經(jīng)常有香客問我蓄诽,道長薛训,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任仑氛,我火速辦了婚禮乙埃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘调衰。我一直安慰自己膊爪,他們只是感情好自阱,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布嚎莉。 她就那樣靜靜地躺著,像睡著了一般沛豌。 火紅的嫁衣襯著肌膚如雪趋箩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天加派,我揣著相機與錄音叫确,去河邊找鬼。 笑死芍锦,一個胖子當(dāng)著我的面吹牛竹勉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娄琉,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼次乓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了孽水?” 一聲冷哼從身側(cè)響起票腰,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎女气,沒想到半個月后杏慰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡炼鞠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年缘滥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谒主。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡完域,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘩将,到底是詐尸還是另有隱情吟税,我是刑警寧澤凹耙,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站肠仪,受9級特大地震影響肖抱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜异旧,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一意述、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吮蛹,春花似錦荤崇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至每篷,卻和暖如春瓣戚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背焦读。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工子库, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矗晃。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓仑嗅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親张症。 傳聞我的和親對象是個殘疾皇子仓技,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容