【MySQL基礎】02數據定義語言DDL

目錄

一、數據定義語言DDL:是針對數據庫各種對象(數據庫、視圖、索引、表結構)的增刪選查。

二、數據庫的增刪選查

三、數據類型

四、約束條件

五、數據表的增刪查

六、修改數據表

七、總結


一、數據定義語言DDL:是針對數據庫各種對象(數據庫、視圖、索引、表結構)的增刪選查。

二、數據庫的增刪選查

        

  1. 查看數據庫:show datebases;
  2. 創建數據庫:create datebase 數據庫名稱;#數據庫名不能和SQL關鍵字相同,也不能重複。
  3. 選擇使用數據庫:use 數據庫名稱;
  4. 刪除數據庫:drop database 數據庫名稱;

三、數據類型

  1. 主要分:數值型、字符串型、日期時間型
  2. MySQL常用數據類型:
  • int:大整數型,有符號大小-2147483648~2147483647, 無符號大小0~4294967295,默認長度最多爲11個數字,如int(11) 
  • float:單精度浮點型,默認float(10,2),表示最多10個數字,其中有2位小數 
  • decimal:十進制小數型,適合金額、價格等對精度要求較高的數據存儲。默認decimal(10,0),表示最多10位數字,其中0位小數。 
  • char:固定長度字符串型,長度爲1-255。如果長度小於指定長度,右邊填充空格。如果不指定長度,默認爲1。如char(10),‘abc ’ 
  • varchar:可變長度字符串型,長度爲1-255。必須指定長度,如varchar(10),‘abc’ 
  • text:長文本字符串型,最大長度65535,不能指定長度 
  • date:日期型,‘yyyy-MM-dd’ 
  • time:時間型,‘hh:mm:ss’ 
  • datetime:日期時間型,‘yyyy-MM-dd hh:mm:ss’ 
  • Timestamp:時間戳,在1970-01-01 00:00:00和2037-12-31 23:59:59之間,如1973-12-30 15:30,時間戳爲:19731230153000 

注意⚠️

  1. 字符串類型和日期時間類型都需要引號括起來;
  2. char()數據類型會填補空缺的值,如:char(10),'abc ',abc後面會自動寫入7個空格,將會佔用內存。
  3. varchar()數據類型不會填補空缺,如:varchar(10),'abc',abc後面不會寫入7個空格,所以不會佔用內存。但在查詢數據的時候,varchar是先判斷字符串多少,再查找符合的字

四、約束條件

  • 主鍵約束(primary key)
  1. 每個表中只能有一個或沒有主鍵,可以設單字段爲主鍵,也可以設置多字段聯合主鍵。
  2. 聯合主鍵的所有字段值完全一樣才違反主鍵約束。例如:A表中有4個字段:年齡、部門、崗位、工資。設年齡、部門、崗位聯合主鍵,當出現兩行記錄他們的這三個字段值相同的時候,將會報錯。
  3. 列級添加主鍵約束:create table <表名> (<字段名1> <字段類型1> primary key,……<字段名n> <字段類型n>); 
  4. 表級添加主鍵約束(聯合主鍵方法):create table <表名>(<字段名1> <字段類型1>,......<字段名n> <字段類型n>,[constraint 主鍵約束名] primary key(字段名1[,字段名2,...字段名n]));
  • 唯一約束(unique)
  1. 指定字段的取值不能重複,可以爲空,但只能出現一個空值。
  2. 列級添加唯一約束:create table <表名> (<字段名1> <字段類型1> unique,……<字段名n> <字段類型n>); 
  3. 表級添加唯一約束:create table <表名> (<字段名1> <字段類型1,……<字段名n> <字段類型n>,[constraint 唯一約束名] unique (字段名1[,字段名2...字段名n])); 
  • 外鍵約束(foreign key 從表字段 references 主表 主表字段)
  1. 在一張表中執行數據插入、更新、刪除等操作時,DBMS都會跟另一張表進行對照,避免不規範的操作,以確保數據存儲的完整性。【例】員工信息表中有一列部門編號字段,該字段值依賴部門信息表的部門編號字段。即如果員工信息表的部門編號出現不在部門信息表的值,則會報錯。部門信息表爲主表,員工信息表爲從表。
  2. 某一表中某字段的值依賴於另一張表中某字段的值 
  3. 主鍵所在的表爲主表,外鍵所在的表爲從表 
  4. 每一個外鍵值必須與另一個表中的主鍵值相對應
  5. 創建外鍵約束:create table <表名> (<字段名1> <字段類型1>,……<字段名n> <字段類型n>,[constraint 外鍵約束名] foreign key(字段名) references <主表>(主鍵字段));
  • 自動增長列(auto_increment)
  1. 指定字段的取值自動生成,默認從1開始,每增加一條記錄,該字段的取值會加1 ;
  2. 只適用於整數型,常配合主鍵一起使用 ;
  3. 插入第一行記錄的時候,自動增長字段必須要自己輸入,後面行記錄可寫可不寫,不寫默認前一行+1,如,第一行是9,第二行自動爲10,第三行自定義輸入15,第四行自動爲16,11-14則不會出現。
  4. 創建自動增長約束:create table <表名> (<字段名1> <字段類型1> auto_increment,……<字段名n> <字段類型n>);
  • 非空約束(not null)
  1. 字段的值不能爲空;
  2. 創建非空約束:create table <表名> (<字段名1> <字段類型1> not null,……<字段名n> <字段類型n>); 
  • 默認約束(default)
  1. 如果新插入一條記錄時沒有爲該字段賦值,系統會自動爲這個字段賦值爲默認約束設定的值;
  2. 這個約束不會報錯;
  3. 創建默認約束:create table <表名> (<字段名1> <字段類型1> default value,……<字段名n> <字段類型n>); 

 

【理解】

  • 只有主鍵約束在一個表中只能有一個,其他約束可多個;

  • 主鍵約束、唯一約束和外鍵約束:屬於索引約束,可以表級添加(寫在最後行),且外鍵約束只能寫在最後行。 其他約束只能寫在列級添加(類型後面)。

五、數據表的增刪查

  • 創建數據表:create table 表名(…); 

(建表之前要先選擇進入數據庫:use 數據庫名稱; 

建表時可以不指定約束條件,但是必須指定表名、字段名及每個字段的數據類型;

表名不能與SQL關鍵字相同,同一個數據庫下的表名不能重複 。)

  1. 查看當前數據庫中所有表:show tables; 
  2. 查看錶結構:desc 表名; 
  3. 刪除數據表:drop table 表名;

六、修改數據表

  1. 修改表名:alter table 原表名 rename 新表名; 
  2. 修改字段名:alter table 表名 change 原字段名 新字段名 數據類型 [自增/非空/默認] [字段位置]; 
  3. 修改字段類型:alter table 表名 modify 字段名 新數據類型 [自增/非空/默認] [字段位置]; 
  4. 添加字段:alter table 表名 add 新字段名 數據類型 [自增/非空/默認] [字段位置]; 
  5. 刪除字段:alter table 表名 drop 字段名;
  6. 修改字段的排列位置: (這裏的數據類型需要寫,不然會被刪除)

排第一個:alter table 表名 modify 字段名 數據類型 first

排在參照字段後:alter table 表名 modify 要排序的字段名 數據類型 after 參照字段; 

 

【注意】

  1. 修改後類型是否符合已有數據的類型
  2. 在修改字段名、字段類型、添加字段和字段排列位置時,數據類型必須要寫,否則類型會被刪除,中括號的([自增/非空/默認] [字段位置])可寫可不寫,不寫則默認刪除原先的約束條件(除主鍵外),且只支持“自增/非空/默認”,不接受主鍵、唯一、外鍵約束(索引類約束)
  3. 原有的主鍵不寫仍然存在。

 

【例子】

七、總結

  • 數據庫的增刪選查:
  1. Create database……;
  2. Drop database……;
  3. use……;
  4. Show databases;
  5. Show tables;
  • 數據表的增刪選查:
  1. Create table……; 
  2. Drop table……; 
  3. Desc ……;
  • 修改表結構:
  1. Alter table表名 [rename|change|modify|add|drop] ……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章