Online DDL 工具:pt-osc
對於 MySQL Online DDL 目前主流的有三種工具:
原生 Online DDL;
pt-osc(online-schema-change),
gh-ost
本文主要講解 pt-online-schema-change 的使用以及三種工具的簡單對比。
一、原理及限制
1.1 原理
1.創建一個與原表結構相同的空表,表名是_new後綴;
2. 修改步驟 1 創建的空表的表結構;
3. 在原表上加三個觸發器:delete/update/insert,用於 數據過程中,將原表中要執行的語句在新表中執行;
4. 將原表數據以數據塊(chunk)的形式 到新表;
5. rename 原表為 old 表,並把新表 rename 為原表名,然後刪除舊表;
6. 刪除觸發器。
⑵ MYSQL數據表名稱修改
喜歡的話就採納吧 資料庫從最初的數據文件的簡單集合發展到今天的大型資料庫管理系統已經成為我們日常生活中不可缺少的組成部分。如果不藉助資料庫的幫助,許多簡單的工作將變得冗長乏味,甚至難以實現。尤其是象銀行、院校和圖書館這樣的大型組織更加依靠資料庫系統實現其正常的運作。再看互聯網上,從搜索引擎到在線商場,從網上聊天到郵件列表,都離不開資料庫。 目前,市面上的資料庫產品多種多樣,從大型企業的解決方案到中小企業或個人用戶的小型應用系統,可以滿足用戶的多樣化需求。這里,我們所要向大家介紹的MySQL資料庫是眾多的關系型資料庫產品中的一個,相比較其它系統而言,MySQL資料庫可以稱得上是目前運行速度最快的SQL語言資料庫。除了具有許多其它資料庫所不具備的功能和選擇之外,MySQL資料庫是一種完全免費的產品,用戶可以直接從網上下載資料庫,用於個人或商業用途,而不必支付任何費用(推薦下載站點http://www.mysql.com)。 總體來說,MySQL資料庫具有以下主要特點: 1. 同時訪問資料庫的用戶數量不受限制; 2. 可以保存超過50,000,000條記錄; 3. 是目前市場上現有產品中運行速度最快的資料庫系統; 4. 用戶許可權設置簡單、有效。 如今,包括Siemens和Silicon Graphics這樣的國際知名公司也開始把MySQL作為其資料庫管理系統,這就更加證明了MySQL資料庫的優越性能和廣闊的市場發展前景。 本文將重點向讀者介紹MySQL資料庫的一些基本操作,包括如何與資料庫建立連接,如果設置資料庫,以及如何執行基本的命令等。希望能夠對讀者學習和掌握MySQL資料庫有所助益。 入門 一般來說,我們訪問MySQL資料庫時,首先需要使用telnet遠程登錄安裝資料庫系統的伺服器,然後再進入MySQL資料庫。MySQL資料庫的連接命令如下: mysql -h hostname -u username -p[password] 或者: mysql -h hostname -u username --password=password 其中,hostname為裝有MySQL資料庫的伺服器名稱,username和password分別是用戶的登錄名稱和口令。 如果MySQL資料庫安裝和配置正確的話,用戶在輸入上述命令之後會得到如下系統反饋信息: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 49 to server version: 3.21.23-beta-log Type help for help. mysql> 這樣,用戶就成功進入了MySQL資料庫系統,可以在mysql>命令提示符之後輸入各種命令。下面,我們列出一些MySQL資料庫的主要管理命令供讀者參考,用戶也可以通過在命令符之後輸入help,\h或?得到以下命令的簡單說明。 mysql> help help (\h) 顯示命令幫助 ? (\h) 作用同上 clear (\c) 清除屏幕內容 connect (\r) 重新連接伺服器,可選參數為 db(資料庫)和 host(伺服器) exit (\) 退出mysql資料庫,作用與quit命令相同 go (\g) 將命令傳送至mysql資料庫 print (\p) 列印當前命令 quit (\q) 退出mysql資料庫 status (\s) 顯示伺服器當前信息 use (\u) 打開資料庫,以資料庫名稱作為命令參數 上述命令主要用於MySQL資料庫的系統管理,如果用戶需要對某個具體的資料庫進行操作,可以使用use命令進入該資料庫,格式如下: mysql> use dbname; 這里需要提醒讀者注意的一點就是MySQL資料庫要求使用者在所有命令的結尾處使用「;」作為命令結束符。 數據類型和數據表 從本質上說,資料庫就是一種不斷增長的復雜的數據組織結構。在MySQL資料庫中,用於保存數據記錄的結構被稱為數據表。而每一條數據記錄則是由更小的數據對象,即數據類型組成。因此,總體來說,一個或多個數據類型組成一條數據記錄,一條或多條數據記錄組成一個數據表,一個或多個數據表組成一個資料庫。我們可以把上述結構理解為如下形式: Database < Table < Record < Datatype 數據類型分為不同的格式和大小,可以方便資料庫的設計人員創建最理想的數據結構。能否正確的選擇恰當的數據類型對最終資料庫的性能具有重要的影響,因此,我們有必要首先對數據類型的有關概念進行較為詳細的介紹。 MySQL 數據類型 MySQL 資料庫提供了多種數據類型,其中較為常用的幾種如下: CHAR (M) CHAR數據類型用於表示固定長度的字元串,可以包含最多達255個字元。其中M代表字元串的長度。 舉例如下: car_model CHAR(10); VARCHAR (M) VARCHAR是一種比CHAR更加靈活的數據類型,同樣用於表示字元數據,但是VARCHAR可以保存可變長度的字元串。其中M代表該數據類型所允許保存的字元串的最大長度,只要長度小於該最大值的字元串都可以被保存在該數據類型中。因此,對於那些難以估計確切長度的數據對象來說,使用VARCHAR數據類型更加明智。VARCHAR數據類型所支持的最大長度也是255個字元。 這里需要提醒讀者注意的一點是,雖然VARCHAR使用起來較為靈活,但是從整個系統的性能角度來說,CHAR數據類型的處理速度更快,有時甚至可以超出VARCHAR處理速度的50%。因此,用戶在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡。 舉例如下: car_model VARCHAR(10); INT (M) [Unsigned] INT數據類型用於保存從- 2147483647 到2147483648范圍之內的任意整數數據。如果用戶使用Unsigned選項,則有效數據范圍調整為0-4294967295。舉例如下: light_years INT; 按照上述數據類型的設置,-24567為有效數據,而3000000000則因為超出了有效數據范圍成為無效數據。 再例如: light_years INT unsigned; 這時,3000000000成為有效數據,而-24567則成為無效數據。 FLOAT [(M,D)] FLOAT數據類型用於表示數值較小的浮點數據,可以提供更加准確的數據精度。其中,M代表浮點數據的長度(即小數點左右數據長度的總和),D表示浮點數據位於小數點右邊的數值位數。 舉例如下: rainfall FLOAT (4,2); 按照上述數據類型的設置,42.35為有效數據,而324.45和3.542則因為超過數據長度限制或者小數點右邊位數大於規定值2成為無效數據。 DATE DATE數據類型用於保存日期數據,默認格式為YYYY-MM-DD。MySQL提供了許多功能強大的日期格式化和操作命令,本文無法在此一一進行介紹,感興趣的讀者可以參看MySQL的技術文檔。 DATE數據類型舉例如下: the_date DATE; TEXT / BLOB TEXT和BLOB數據類型可以用來保存255 到65535個字元,如果用戶需要把大段文本保存到資料庫內的話,可以選用TEXT或BLOB數據類型。TEXT和BLOB這兩種數據類型基本相同,唯一的區別在於TEXT不區分大小寫,而BLOB對字元的大小寫敏感。 SET SET數據類型是多個數據值的組合,任何部分或全部數據值都是該數據類型的有效數據。SET數據類型最大可以包含64個指定數據值。 舉例如下: transport SET (truck, wagon) NOT NULL; 根據上述數據類型的設置,truck、wagon、以及truck,wagon都可以成為transport的有效值。 ENUM ENUM數據類型和SET基本相同,唯一的區別在於ENUM只允許選擇一個有效數據值。例如: transport ENUM (truck, wagon) NOT NULL; 根據上述設置,truck或wagon將成為transport的有效數據值。 以上,我們只是對用戶使用MySQL資料庫的過程中經常用到的數據類型進行了簡單介紹,有興趣的讀者,可以參看MySQL技術文檔的詳細說明。 數據記錄 一組經過聲明的數據類型就可以組成一條記錄。記錄小到可以只包含一個數據變數,大到可以滿足用戶的各種復雜需求。多條記錄組合在一起就構成了數據表的基本結構。 數據表 在我們執行各種資料庫命令之前,首先需要創建用來保存信息的數據表。我們可以通過以下方式在MySQL資料庫中創建新的數據表: mysql> CREATE TABLE test ( > name VARCHAR (15), > email VARCHAR (25), > phone_number INT, > ID INT NOT NULL AUTO_INCREMENT, > PRIMARY KEY (ID)); 系統反饋信息為: Query OK, 0 rows affected (0.10 sec) mysql> 這樣,我們就在資料庫中創建了一個新的數據表。注意,同一個資料庫中不能存在兩個名稱相同的數據表。 這里,我們使用CREATE TABLE命令創建的test數據表中包含name,email,phone_number和ID四個欄位。MySQL資料庫允許欄位名中包含字元或數字,最大長度可以達到64個字元。 下面,我們來看一看創建數據表時所用到的幾個主要的參數選項。 Primary Key 具有Primary Key限制條件的欄位用於區分同一個數據表中的不同記錄。因為同一個數據表中不會存在兩個具有相同值的Primary Key欄位,所以對於那些需要嚴格區分不同記錄的數據表來說,Primary Key具有相當重要的作用。 Auto_Increment 具有Auto_Increment限制條件的欄位值從1開始,每增加一條新記錄,值就會相應地增加1。一般來說,我們可以把Auto_Increment欄位作為數據表中每一條記錄的標識欄位。 NOT NULL NOT NULL限制條件規定用戶不得在該欄位中插入空值。 其它數據表命令 除了創建新的數據表之外,MySQL資料庫還提供了其它許多非常實用的以數據表作為操作對象的命令。 顯示數據表命令 mysql> show tables; 該命令將會列出當前資料庫下的所有數據表。 顯示欄位命令 mysql> show columns from tablename; 該命令將會返回指定數據表的所有欄位和欄位相關信息。 數據操作 對MySQL資料庫中數據的操作可以劃分為四種不同的類型,分別是添加、刪除、修改和查詢,我們將會在本節中對此進行介紹。但是,首先我們需要強調的一點就是MySQL資料庫所採用的SQL語言同其它絕大多數計算機編程語言一樣,對命令的語法格式有嚴格的規定。任何語法格式上的錯誤,例如不正確的使用括弧、逗號或分號等都可能導致命令執行過程中的錯誤。因此,建議用戶在學習時一定要多留心語法格式的使用。 添加記錄 用戶可以使用INSERT命令向資料庫中添加新的記錄。 例如: mysql> INSERT INTO test VALUES mysql> (John, [email protected], mysql> 5554321, NULL); 上述命令正確執行後會返回以下信息: Query OK, 1 row affected (0.02 sec) mysql> 對上述命令有幾點我們需要說明。首先,所有的字元類型數據都必須使用單引號括起來。其次,NULL關鍵字與AUTO_INCREMENT限制條件相結合可以為欄位自動賦值。最後,也是最重要的一點就是新記錄的欄位值必須與數據表中的原欄位相對應,如果原數據表中有4個欄位,而用戶所添加的記錄包含3個或5個欄位的話都會導致錯誤出現。 MySQL資料庫的一個非常顯著的優勢就是可以對整數、字元串和日期數據進行自動轉換。因此,用戶在添加新記錄時就不必擔心因為數據類型不相符而出現錯誤。 查詢數據 如果我們無法從資料庫中查找和讀取數據的話,資料庫就喪失了其存在和使用的價值。 在MySql資料庫中,用戶可以使用SELECT命令進行數據的查詢。 例如: mysql> SELECT * FROM test mysql> WHERE (name = John); 上述命令會返回如下結果: name email phone ID John [email protected] 5554321 1 刪除數據 用戶除了可以向數據表中添加新的記錄之外,還可以刪除數據表中的已有記錄。刪除記錄可以使用DELETE命令。 例如: mysql> DELETE FROM test mysql> WHERE (name = ); 該命令將會刪除test數據表中name欄位的值為John的記錄。同樣, mysql> DELETE FROM test mysql> WHERE (phone_number = 5554321); 將會從數據表中刪除phone_number欄位值為5554321的記錄。 修改數據 MySQL資料庫還支持用戶對已經輸入到數據表中的數據進行修改。修改記錄可以使用UPDATE命令。 例如: mysql> UPDATE test SET name = Mary mysql> WHERE name = John; 上述命令的執行結果如下: name email phone ID Mary [email protected] 5554321 1 到此為止,我們對MySQL資料庫數據操作的核心概念,即數據的添加、刪除、修改和查詢進行了簡單的介紹。事實上,MySQL資料庫所支持的SQL語言具有非常豐富和強大的數據操作功能,感興趣的讀者可以參看相關文章。我們在這里就不重復介紹了。
⑶ 如何批量修改mysql的表前綴名稱
方法一:使用sql語句修改mysql資料庫表前綴名
首先我們想到的就是用sql查詢語句來修改,這個方法也很方便,只需進入無憂主機控制面板——phpmyadmin登入後,在運行 SQL 查詢框中輸入如下語名就可以了。
ALTER TABLE 原表名 RENAME TO 新表名;
如:
ALTER TABLE old_post RENAME TO new_post;
Sql查詢語句有一個缺點,那就是一句SQL語句只能修改一張資料庫的表名,如果你要精確修改某一張表,很好用。如果資料庫表很多的話,不推薦使用。有木有,批量修改多個資料庫表前綴名稱的方法類?有的,請看下面的介紹
方法二:php腳本批量修改mysql資料庫表前綴
下面無憂主機(www.51php.com)小編收集的一個快速批量的修改數據表前綴的方法,小編已經測試,成功修改。如果你需要,請參考借鑒如下:
1、將下面的代碼復制到記事本,根據自己人情況修改好資料庫信息,並保存了51php.php。再上傳您網站的根目錄。您可以直接下載mysql資料庫前綴名批量修改腳步:修改mysql資料庫表前綴名。
<?php
//設置好相關信息
$dbserver='localhost';//連接的伺服器一般為localhost
$dbname='y8n9nghmze_shop';//資料庫名
$dbuser='y8n9nghmze_user';//資料庫用戶名
$dbpassword='admin';//資料庫密碼
$old_prefix='ecs_';//資料庫的前綴
$new_prefix='51php_';//資料庫的前綴修改為
if (
!is_string($dbname) || !is_string($old_prefix)|| !is_string($new_prefix) )
{
return false;
}
if (!mysql_connect($dbserver,
$dbuser, $dbpassword)) {
print 'Could not connect to mysql';
exit;
}
//取得資料庫內所有的表名
$result =
mysql_list_tables($dbname);
if (!$result) {
print "DB Error, could not
list tables\n";
print 'MySQL Error: ' .
mysql_error();
exit;
}
//把表名存進$data
while ($row =
mysql_fetch_row($result)) {
$data[] = $row[0];
}
//過濾要修改前綴的表名
foreach($data as $k => $v)
{
$preg = preg_match("/^($old_prefix{1})([a-zA-Z0-9_-]+)/i",
$v, $v1);
if($preg)
{
$tab_name[$k] =
$v1[2];
//$tab_name[$k]
= str_replace($old_prefix, '', $v);
}
}
if($preg)
{
// echo '<pre>';
// print_r($tab_name);
// exit();
//批量重命名
foreach($tab_name as $k =>
$v)
{
$sql = 'RENAME TABLE
`'.$old_prefix.$v.'` TO `'.$new_prefix.$v.'`';
mysql_query($sql);
}
print 數據表前綴:.$old_prefix."<br>".已經修改為:.$new_prefix."<br>";
}
else
{ print 您的資料庫表的前綴.$old_prefix.輸入錯誤。請檢查相關的資料庫表的前綴;
if ( mysql_free_result($result) ) {
return true;
}
}
?>
2、 在瀏覽器輸入訪問您的網址/51php.php.資料庫表的前綴就可以修改成功了。
⑷ mysql中怎樣修改表格的名字
用如下語法:
altertabletable_namerenametable_new_name;
其中,table_name是舊表名,table_new_name是新表名。
mysql簡介:
MySQL 是一個關系型資料庫管理系統,由瑞典 MySQL AB 公司開發,目前屬於Oracle旗下公司。
MySQL 最流行的關系型資料庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS (Relational Database Management System,關系資料庫管理系統) 應用軟體之一。
MySQL 是一種關聯資料庫管理系統,關聯資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
MySQL 所使用的 SQL 語言是用於訪問資料庫的最常用標准化語言。
MySQL 軟體採用了雙授權政策(本詞條「授權政策」),它分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。
由於其社區版的性能卓越,搭配PHP和Apache可組成良好的開發環境。
⑸ MYSQL資料庫怎麼修改表名
進入資料庫後,
先 use 資料庫名;
然後:
alter table customers rename custs;
⑹ MySQL資料庫基礎+ 資料庫的基本操作
需要用的資料以鏈接的形式給需要的同學。
我用的mysql版本為: Mysql-5.5.45-win64.msi 密碼是:26zw
圖形化工具 Navicat(前期不推薦用,直接手動敲): Navicat 密碼:c7fs
開始我的MySQL之旅吧 始於2016.12.04
--WH
一、資料庫的安裝
這個就不在這里過多闡述了,因為網上實在是太多安裝mysql的教程了,有了我給的mysql,在按照這個安裝教程(MySQL安裝教程)去看,就能夠安裝完好。
安裝好mysql後,如果需要使用windows命令窗口(也就是cmd)來操作mysql,那麼就需要配置環境變數,在安裝好的mysql下找到bin,將其目錄放到環境變數path中去,就行了,檢測成功與否的方法是在cmd命令窗口中輸入mysql,就會出現一大段英文,就說明成功了,反之失敗,如果不會的話就去網路搜教程。
二、資料庫的基本操作
1、開啟mysql服務命令
net start mysql
2、進入mysql的兩種方式
明文進入:mysql -uroot -proot格式:mysql -u帳號-p密碼
密文進入:mysql -uroot -p 按enter會提示你輸入密碼(Enter pssword:),此時你寫的密碼就會顯示為***這樣。
3、查看mysql中所有的資料庫(一般在固定的單詞命令就會是用大寫,這個要習慣,看多了敲多了就認識了)
前面四個資料庫是mysql中自帶的,也就是必須的.
SHOW DATABASES;
4、創建名為test_1的資料庫
格式:CREATE DATABASE 資料庫名
CREATE DATABASE test_1;
5、刪除名為test_1的資料庫
格式:DROP DATABASE 資料庫名
DROP DATABASE test_1;
總結:學習了對資料庫的三個操作,1、查看所有資料庫 2、創建資料庫 3、刪除資料庫
三、數據表的基本操作
數據表和資料庫還有Mysql三者的關系
mysql中保存了很多資料庫、一個資料庫中可以保存很多表。
對數據表的增(創建表)刪(刪除表)改(修改表欄位)查(查詢表結構)。 注意:這里的操作對象是表,對表的操作也就是表的結構,和表中的欄位的操作(欄位和記錄要分清楚)
前提:表是在資料庫下的,所以要先確實使用哪個資料庫。
USE test_1;
1、創建數據表
格式:CREATE TABLE 數據表名(
欄位名1數據類型[列級別約束條件],
欄位名2數據類型[列級別約束條件],
欄位名3數據類型[列級別約束條件]
);
注意:格式不一定需要這樣隔著寫,完全可以全部寫成一行。但是那樣寫可觀性非常差。我這樣寫只是為了可以看的更清晰。
解釋:
1、[]中括弧中的內容表示可以有可以沒有,
2、列級別這個「列」一定要搞清楚說的是什麼,一張表中有行有列,列表示豎,行表示橫
3、約束條件後面會講到
1.1、創建沒有約束的student表
CREATE TABLE student( idINT(11), nameVARCHAR(12), ageINT(11) );
注釋:SHOW TABLES 查詢資料庫底下的所有表。
1.2、創建有約束的student表
六大約束:主鍵約束、外鍵約束、非空約束、唯一約束、默認約束、自動增加
1.2.1:主鍵約束
PRIMARY KEY(primary key):獨一無二(唯一)和不能為空(非空),通俗的講,就是在表中增加記錄時,在該欄位下的數據不能重復,不能為空,比如以上面創建的表為例子,在表中增加兩條記錄,如果id欄位用了主鍵約束。則id不能一樣,並且不能為空。一般每張表中度有一個欄位為主鍵,唯一標識這條記錄。以後需要找到該條記錄也可以同這個主鍵來確認記錄,因為主鍵是唯一的,並且非空,一張表中每個記錄的主鍵度不一樣,所以根據主鍵也就能找到對應的記錄。而不是多條重復的記錄。如果沒有主鍵,那麼表中就會存在很多重復的記錄,那麼即浪費存儲空間,在查詢時也消耗更多資源。
一般被主鍵約束了的欄位度習慣性的稱該欄位為該表的主鍵
單欄位主鍵約束
兩種方式都可以
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12),nameVARCHAR(12),
ageINT(11) ageINT(11),
);PRIMARY KEY(id) );
多欄位主鍵約束(復合主鍵)
這個id和name都市主鍵,說明在以後增加的插入的記錄中,id和name不能同時一樣,比如說可以是這樣。一條記錄為id=1,name=yyy、另一條記錄為:id=1,name=zzz。 這樣是可以的。並不是你們所理解的兩個欄位分別度不可以相同。
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12) PRIMARY KEY,nameVARCHAR(12),
ageINT(11)ageINT(11),
);PRIMARY KEY(id,name) );
1.2.2:外鍵約束
什麼是外鍵舉個例子就清楚了,有兩張表,一張表是emp(員工)表,另一張表是dept(部門)表,一個員工屬於一個部門,那麼如何通過員工能讓我們自己他在哪個部門呢?那就只能在員工表中增加一個欄位,能代表員工所在的部門,那該欄位就只能是存儲dept中的主鍵了(因為主鍵是唯一的,才能確實是哪個部門,進而代表員工所在的部門,如果是部門名稱,有些部門的名稱可能是同名。就不能區分了。),像這樣的欄位,就符合外鍵的特點,就可以使用外鍵約束,使該欄位只能夠存儲另一張表的主鍵。如果不被外鍵約束,那麼該欄位就無法保證存儲進來的值就一定是另一張表的主鍵值。
外鍵約束的特點:
1、外鍵約束可以描述任意一個欄位(包括主鍵),可以為空,並且一個表中可以有多個外鍵。但是外鍵欄位中的值必須是另一張表中的主鍵。
2、這樣被外鍵關聯的兩種表的關系可以稱為父子表或者主從表。子表(從表)擁有外鍵欄位的表,父表(主表)被外鍵欄位所指向的表。
3、子表被外鍵約束修飾的欄位必須和父表的主鍵欄位的類型一樣。
注意:一個表中有被外鍵修飾的欄位,就稱該表有外鍵(是「有外鍵」。而不是「是外鍵」),並會給該表中的外鍵約束取一個名稱,所以我們常說的這個表有沒有外鍵,指的不是被外鍵約束修飾的欄位名,而是指這個表是否有存在外鍵約束。也就是說,不能說這個表的外鍵是xxx(該表中被外鍵約束修飾的欄位名),這種說法是錯誤的,但是大多數人已經習慣了這樣,雖然影響不大,但是在很多時候需要理解一個東西時,會造成一定的困擾。
格式:CONSTRAINT外鍵名稱FOREIGN KEY(被外鍵約束的欄位名稱)REFERENCES 主表名(主鍵欄位)
英文解釋:CONSTRAINT:約束REFERENCES:參考
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22),
location VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE tableB
(
id INT(11),
name VARCHAR(22) NOT NULL,
deptId INT(11),
PRIMARY KEY(id),
CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
);
解釋:tableB中有一個名為tableA_tableB_1的外鍵關聯了tableA和tableB兩個表,被外鍵約束修飾的欄位為tableB中的deptId,主鍵欄位為tableA中的id
1.2.3:非空約束
NOT NULL. 被該約束修飾了的欄位,就不能為空,主鍵約束中就包括了這個約束
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) NOT NULL,
location VARCHAR(50),
PRIMARY KEY(id)
);
1.2.4:唯一約束
UNIQUE 被唯一約束修飾了的欄位,表示該欄位中的值唯一,不能有相同的值,通俗點講,就好比插入兩條記錄,這兩條記錄中處於該欄位的值不能是一樣的。
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) UNIQUE,
location VARCHAR(50),
PRIMARY KEY(id)
);
也就是說在插入的記錄中,每條記錄的name值不能是一樣的。
1.2.5:默認約束
Default 指定這一列的默認值為多少,比如,男性同學比較多,性別就可以設置為默認男,如果插入一行記錄時,性別沒有填,那麼就默認加上男
CREATE TABLE table
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);
1.2.6:自動增加
AUTO_INCREMENT 一個表只能一個欄位使用AUTO_INCREMENT,並且使用這個約束的欄位只能是整數類型(任意的整數類型 TINYINT,SMALLIN,INT,BIGINT),默認值是1,也就是說從1開始增加的。一般就是給主鍵使用的,自動增加,使每個主鍵的值度不一樣,並且不用我們自己管理,讓主鍵自己自動生成
CREATE TABLE table ( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(22) NOT NULL );
2、查詢表結構
2.1、查看錶基本結構語句
格式1:DESCRIBE 表名/DESC 表名這兩個的功能是一樣的,簡寫了單詞describe
DESCRIBEstudent;
2.2、查看創建表的語句
格式:SHOW CREATE TABLE 表名
SHOW CREATE TABLE student;
這樣顯示的格式很不好,看不清楚,所以有了下面這個語句
格式:SHOW CREATE TABLE 表名\G
SHOW CREATE TABLE student\G;
3、修改數據表
修改數據表包括:對表中欄位的增加、刪除、修改。 在這個裡面用的關鍵字為 ALTER
3.1、修改表名
格式:ALTER TABLE<舊表名> RENAME[TO]<新表名>;
將student表名改為student1(改完後在改回來)
ALTER TABLE student RENAME TO student1;
3.2、修改表中的欄位名
格式:ALTER TABLE<表名> CHANGE<舊欄位名><新欄位名><新數據類型>
將student表中的name欄位名改為 username
ALTER TABLE student CHANGE name username VARCHAR(30);
3.3、修改表中的數據類型
格式:ALTER TABLE<表名> MODIFY<欄位名><數據類型>
ALTER TABLE student MODIFY username VARCHAR(20);
解釋:只能修改欄位名的數據類型,但是其原理跟上面change做的事情一樣,這里也有修改欄位名的過程,只不過修改後的欄位名和修改前的欄位名相同,但是數據類型不一樣。
3.4、修改欄位的排列位置
方式1:ALTER TABLE<表名> MODIFY<欄位1><數據類型> FIRST|AFTER<欄位2>
解釋:將欄位1的位置放到第一,或者放到指定欄位2的後面
ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;
方式2:ALTER TABLE<表名> CHANGE<欄位1><欄位2><數據類型> FIRST|AFTER<欄位3>
解釋:其實是一樣的,將是欄位2覆蓋欄位1,然後在進行排序
ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;
總結
CHANGE和MODIFY的區別?
原理都市一樣的,MODIFY只能修改數據類型,但是CHANGE能夠修改數據類型和欄位名,也就是說MODIFY是CHANGE的更具體化的一個操作。可能覺得用CHANGE只改變一個數據類型不太爽,就增加了一個能直接改數據類型的使用關鍵字MODIFY來操作。
3.5、添加欄位
格式:ALTER TABLE<表名稱> ADD<新欄位名><數據類型>[約束條件][FIRST|AFTER<已存在的表名>]
解釋:在一個特定位置增加一個新的欄位,如果不指定位置,默認是最後一個。
ALTER TABLE student ADD sex VARCHAR(11);
3.6、刪除欄位
格式:ALTER TABLE<表名稱> DROP<欄位名>;
ALTER TABLE student DROP sex;
3.7、刪除表的外鍵約束
格式:ALTER TABLE<表名稱> DROP FOREIGN KEY<外鍵約束名>
注意:外鍵約束名 指的不是被外鍵約束修飾的欄位名,切記,而是我們在創建外鍵約束關系時取的名字。
3.8、更改表的存儲引擎
格式:ALTER TABLE<表名> ENGINE=<更改後的存儲引擎名>
這個存儲引擎目前我自己也不太清楚,雖然知道有哪幾種引擎,但是稍微深入一點就不清楚了,所以打算留到日後在說。
4、刪除表
4.1、刪除無關聯表
格式:DROP TABLE<表名>;
ALTER TABLE student;
4.2、刪除被其他表關聯的主表
這個是比較重要的一點,在有外鍵關聯關系的兩張表中,如果刪除主表,那麼是刪不掉的,並且會報錯。因為有張表依賴於他。那怎麼辦呢?針對這種情況,總共有兩種方法
1、先刪除你子表,然後在刪除父表,這樣就達到了刪除父表的目的,但是子表也要被刪除
2、先解除外鍵關系,然後在刪除父表,這樣也能達到目的,並且保留了子表,只刪除我們不需要的父表。在3.7中就講解了如何刪除外鍵關系。