java 企業(yè)網(wǎng)站開發(fā)搜索引擎優(yōu)化簡稱seo
刪除數(shù)據(jù)
刪除表中的一行數(shù)據(jù),也必須加上 WHERE條件,否則整列的數(shù)據(jù)都會被刪除。刪除語句:
delete from 表名 where 條件;
他會將所有的符合條件的數(shù)據(jù)刪除,如果不寫條件,則表中的數(shù)據(jù)全部刪除:
如果不添加where:
首先我們的工具會提醒我們這個語句非常的危險,這是工具自帶的功能,如果你使用的是黑窗口則不會有這種提示,我們無視風(fēng)險,繼續(xù)執(zhí)行:
那么表中的數(shù)據(jù)就全部都被刪除了。
我們再找一個有數(shù)據(jù)的表:
那么我們使用另一個語句也可以刪除數(shù)據(jù):
命令格式是這樣的:
truncate table 表名;
演示一下:
truncate與delete的區(qū)別在之后詳細的介紹的時候會說到,現(xiàn)在只需要記住這個語句也可以做到刪除數(shù)據(jù)的效果就可以了。
約束是什么
約束是一種限制,它通過對表的行或列的數(shù)據(jù)做出限制,來確保表的數(shù)據(jù)的完整性、唯一性。本節(jié)實驗將在實踐操作中熟悉 MySQL中的幾種約束。
SQL中最常用的 SELECT語句,用來在表中選取數(shù)據(jù),本節(jié)實驗中將通過一系列的動手操作詳細學(xué)習(xí)SELECT語句的用法。
. SQL約束
. SELECT基本語法
·數(shù)學(xué)符號條件
·AND OR IN
·通配符
·排序
. SQL內(nèi)置函數(shù)和計算
·子查詢與連接查詢
SQL約束分類
聽名字就知道,約束是一種限制,它通過對表的行或列的數(shù)據(jù)做出限制,來確保表的數(shù)據(jù)的完整性、唯一性。
比如,規(guī)定一個用戶的用戶名不能為空值且沒有重復(fù)的記錄,這就是一種約束規(guī)則。
在MySQL中,通常有這幾種約束:
約束類型 | 主鍵 | 默認值 | 唯一 | 外鍵 | 非空 |
關(guān)鍵字 | PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY | NOT NULL |
建立含有約束的表
在之前我們介紹創(chuàng)建表的格式的時候,添加約束的地方是在字段類型的后面,我們直接添加對應(yīng)的約束即可:
create table if not exists book( id int primary key , name varchar(20) unique , age varchar(3) not null , address varchar(20) default '背景' );
我們創(chuàng)建了一個表,這個表中的每一列都帶有一個約束,從上到下分別是主鍵約束,唯一約束,非空約束,默認約束,我們接下來會分別介紹這集中約束的作用。
主鍵
在數(shù)據(jù)庫中,如果有兩行記錄數(shù)據(jù)完全一樣,那么如何來區(qū)分呢?答案是無法區(qū)分,如果有兩行記錄完全相同,那么對于MySQL就會認定它們是同一個實體,這于現(xiàn)實生活是存在差別的。
假如我們要存儲一個學(xué)生的信息,信息包含姓名,身高,性別,年齡。
不幸的是有兩個女孩都叫小夢,且她們的身高和年齡相同,數(shù)據(jù)庫將無法區(qū)分這兩個實體,這時就需要用到主鍵了。
主鍵(PRIMARY KEY)是用于約束表中的一行,作為這一行的唯一標識符,在一張表中通過主鍵就能準確定位到一行,因此主鍵十分重要,主鍵不能有重復(fù)記錄且不能為空。
我們向表中插入一行數(shù)據(jù):
我們表中的id這一列已經(jīng)添加了主鍵約束,那么按照主鍵約束的規(guī)則,不能重復(fù)且不能為空,如果我們再次填寫一個id的值和他一樣則會出錯:
當我們插入同樣的id時,由于id字段有主鍵約束,則會報錯,報錯信息是重復(fù)的主鍵的值。
并且當我們不填充數(shù)據(jù)的數(shù)據(jù)也會報錯:
報錯信息是不能為空,是因為我們添加了主鍵約束才會報這個錯。
聯(lián)合主鍵
在有些時候,單一的主鍵并不能滿足于使用,那么就需要使用多個列組成聯(lián)合主鍵,聯(lián)合主鍵的生命格式如下:
create table if not exists book1( id int , u_id int, name varchar(20) unique , age varchar(3) not null , address varchar(20) default '北京', primary key (id,u_id) );
聯(lián)合主鍵的定義就不能在字段后面定義,需要在建表語句的最后使用primary key ()關(guān)鍵字定義,括號內(nèi)的參數(shù)就是要組成聯(lián)合主鍵的字段名,多個字段名之間用逗號隔開。
主鍵自增
主鍵的值是固定的,有時候我們在自己添加的時候可能會忘記自己添加到那里了,或者如果中間有空行就會出錯,不如直接讓主鍵列自己增長,我們不用手動填入主鍵的值,就可以在表中自己填入正確的主鍵值:
在主鍵列的主鍵關(guān)鍵字primary key后面使用另一個關(guān)鍵字auto_increment,就可以在添加主鍵的時候填入一個null,之后就可以在表中自己填入對應(yīng)的值:
可以看到,我們在插入數(shù)據(jù)的時候填入的是null,但是我們在數(shù)據(jù)庫中顯示的數(shù)字是按照1,2,3……這樣自動增長的,這就是主鍵自增。
默認值約束
默認值約束(DEFAULT)規(guī)定,當有DEFAULT約束的列,插入數(shù)據(jù)為空時,將使用默認值。
默認值常用于—些可有可無的字段,比如用戶的個性簽名,如果用戶沒有設(shè)置,系統(tǒng)給他應(yīng)該設(shè)定一個默認的文本,比如空文本或‘這個人太懶了,沒有留下任何信息'
在之前的案例中,第四個字段使用的就是默認值約束:
當這個字段我們不填充任何的值的時候,那么default后面的值就會被自動填充進去:
注意,是不填充任何的值,如果你最后寫了一個null,那么最后的顯示結(jié)果是這樣的:
可以看到默認值約束并沒有應(yīng)用上去,這里涉及到一個MySQL的null值和空值的區(qū)別,其實這個null也是一種數(shù)值,這個在之后我們會深入討論他的問題。
這里我們只需要知道,如果要default約束被應(yīng)用只需要填充的時候使用選擇列填充的方式,不填充任何內(nèi)容在自動約束所在的列中即可。
唯一約束
唯—約束(UNIQUE)比較簡單,它規(guī)定—張表中指定的一列的值必須不能有重復(fù)值,即這一列每個值都是唯一的。
我們之間案例中的第二個字段就添加了非空約束,我們先看一下表中已有的數(shù)據(jù):
當前表中的name的值是添加了唯一約束的,并且此時沒有重復(fù)的值,那么現(xiàn)在我添加一個重復(fù)的值:
當添加了唯一約束的字段中添加了重復(fù)的值,那么就會報錯,報錯信息是重復(fù)的鍵值,在book2表的name字段上。
那么如果是兩個null值的話,會怎么樣呢?
null并不算做是重復(fù)的值,現(xiàn)在理解比較好理解,就是沒有值也就沒有比較的對象嘛,但是之后我們介紹null的細節(jié)的時候,我們再詳細的展開null到底代表的是什么。
外鍵約束
外鍵(FOREIGN KEY)既能確保數(shù)據(jù)完整性,也能表現(xiàn)表之間的關(guān)系。
比如,現(xiàn)在有用戶表和文章表,給文章表中添加一個指向用戶id 的外鍵,表示這篇文章所屬的用戶id,外鍵將確保這個外鍵指向的記錄是存在的,如果你嘗試刪除一個用戶,而這個用戶還有文章存在于數(shù)據(jù)庫中,那么操作將無法完成并報錯。因為你刪除了該用戶過后,他發(fā)布的文章都沒有所屬用戶了,而這樣的情況是不被允許的。同理,你在創(chuàng)建一篇文章的時候也不能為它指定一個不存在的用戶id。
一個表可以有多個外鍵,每個外鍵必須REFERENCES(參考)另—個表的主鍵,被外鍵約束的列,取值必須在它參考的列中有對應(yīng)值。
外鍵約束是什么呢,就是我現(xiàn)在有一個表,我的表中的某一個列添加了外鍵約束,這個外鍵約束參考了另一個表中的主鍵列,那么我在向添加了外鍵約束的字段中插入值的時候,這個值的取值范圍只能是另一個表中主鍵列已經(jīng)存在的值,否則會插入失敗。類似于ENUM,只能從一個范圍中取值,只不過這個范圍在另一個表上。
現(xiàn)在我創(chuàng)建了兩張表,一張student,一張stu_cord,現(xiàn)在stu_cord表的c_id添加了外鍵約束,在插入數(shù)據(jù)的時候,stu_cord的c_id的值只能插入student表中的id字段已有的值:
我先給student插入一些數(shù)據(jù),然后向stu_cord中插入一些數(shù)據(jù):
現(xiàn)在是一切正常,但是如果我這么操作:
插入失敗了,為什么呢?就是因為當我向c_id列中插入數(shù)據(jù)的時候,c_id列添加了外鍵約束,這個列中插入的數(shù)值要參考student的id字段的值,只能插入id字段中已有的值,現(xiàn)在student表中的數(shù)值是這樣的:
很顯然,我要插入的4并不在他的id中,所以我插入失敗了,這就是外鍵約束的一個體現(xiàn),當你插入的數(shù)值不在我參考的列中,那么你的值無法插入。