MySQL語言分類——DDL

来源:https://www.cnblogs.com/aitiknowledge/archive/2019/08/31/11433655.html
-Advertisement-
Play Games

DDL的全稱Data Definition Language,即數據定義語言 DDL的語法有:create、alter、drop、rename、truncate。對此做一個詳細的解釋: create (創建) create 可以創建資料庫 create 可以創建表格 創建表格的語法:方括弧的表示可以 ...


DDL的全稱Data Definition Language,即數據定義語言

  DDL的語法有:create、alter、drop、rename、truncate。對此做一個詳細的解釋:

create (創建)

  create 可以創建資料庫

# 創建資料庫
create database database_name;

# 然後進入該資料庫
use database_name;

  create 可以創建表格

    創建表格的語法:方括弧的表示可以省略

      create [temporary] table [if not exits] table_name(

        column_name data_type [not null | null] [default default_value] [auto_increment] [comment ""] [Constraints約束條件],

      );

    [if not exits] 如果新建表不存在,則會創建新表;如果存在,不會報錯,數據也不會被覆蓋

create table if not exits table_name(
    id int,
    name varchar(20)
);

    [temporary] 創建臨時表 用於存儲臨時計算的數據,生命周期只限於本次連接

create temporary table table_name(
    id int key,
    name varchar(20)
);

 

    [not null | null] 欄位值是否可以為空; 如果這個欄位值設置不為空,後面還有預設值,那麼在插入時當前欄位不插入數據,會按照後面的預設值填入

create table null_test(
    account varchar(20) not null,
    password varchar(32) not null,
    gender enum("0", "1") null
);

insert into null_test(account) values("zhangsan");    # error 因為password不能為空
insert into null_test(account, password) values("zhangsan", "abcdef");

  [default default_value] 欄位值的預設值是什麼,建議項目中表格的每一列都給預設值(以防用戶不填數據)

create table default_test(
    id int not null default 0,
    address varchar(50) default "",
    gender enum("0", "1")  null default "0"
);

# 首先id不為空,插入時也沒有寫,在插入的過程中,會將預設值插進去
insert into default_test(address, gender) values ("kunshan", "1");

    [auto_increment] 欄位值自動增加,一般(不是必須)適用於主鍵而且是int類型,預設從1開始

# auto_increment的三種表現形式
create table auto_test(
    id int primary key auto_increment,
    name varchar(20) not null
);

create table auto_test(
    id int primary key auto_increment,
    name varchar(20) not null
)auto_increment=1;

create table auto_test(
    id int primary key auto_increment,
    name varchar(20) not null
)auto_increment=2016211001000;

    [comment ""] 給表格欄位添加備註

create table comment_test(
    id int comment "標號"
);

  Constraints約束:

    約束是用來限制和保護表的數據符合我們定義的條件

約束的表現形式:

    列級約束 

      寫在列的後面,針對某個列的約束

        • Create table student(id number primary key,name varchar(10));

    表級約束

      寫在建表語句的後邊,針對某個列的約束

        • Create table student(id number , name varchar(10),primary key(id)); 

    列級約束和表級約束作用相同,但是表級約束功能更強一些,具體見後邊

    如果是表級約束,若涉及聯合唯一或者是聯合主鍵,只有聯合的所有的欄位值一樣的才會報錯(局部可以重覆,全局不可以重覆)

    not null 上面已有介紹

    unique   欄位值唯一

create table unique_test(
    id int,
    stuno int not null unique  # 列級約束
);

create table unique_test(
    id int,
    stuno int not null unique  default 0 # 只能預設插入一次
);

create table unique_test(
    id int,
    stuno int not null,
    unique(stuno)      # 表級約束
);

create table unique_test(
    id int,
    stuno in not null,
    unique(id, stuno)   # 表級約束---聯合約束唯一
);

# 聯合唯一:單個列可以重覆,整體不能重覆; 條件必須時表級約束,同時重覆才會報錯

    primary key(表格的主鍵)    非空 唯一 索引

create table primary_test(
    id int primary key,   # 列級約束
    name char(20)
);

create table primary_test(
    id int,
    name char(20),
    primary key(id)    # 表級約束
);

create table primary_test(
    id int,
    name char(20),
    primary key(id, name)  # 表級約束 -----聯合主鍵
);
# 聯合唯一:單個列可以重覆,整體不能重覆; 條件必須時表級約束,同時重覆才會報錯

    foreign key(表格的外鍵)

      外鍵只能是表級約束,先有主表(與之關聯的外鍵表),才有外表(當前表是外表)

      外表的引擎必須是InnoDB,在分號之前建議寫上

      兩者關聯涉及的欄位值類型必須相同

      刪除數據(表),先刪除子(外)數據(表),在刪除父(主)數據(表)

      填寫foreign key(欄位名) references 主表名(主鍵)

# 主表(父表)
create table parent_table(
    id int primary key,     # 列級約束
    name varchar(20) not null default "",
);

# 外表(子表)
create table child_table(
    id int,
    parent_id int,
    name varchar(20) not null default "",
    primary key(id),        # 表級約束
    foreign key (parent_id) references parent_table(id)    # 表級約束
);

#插入數據: 先插入父表的數據,在插入子表的數據
insert into parent_table values(1001);
insert into child_table values(1, 1001);

    index/key 索引 建立索引提高查詢速率

      key:如果表格沒有主鍵,又是列級約束,會自動設置成主鍵;又是表級約束,就是普通的索引key了

      在已有的表格上創建/刪除 索引:create/drop index index_name on table_name

# key 索引測試
create table key_test(
    id int key,      # 列級約束轉換成主鍵了
    name varchar(20)
);

create table key_test(
    id int,
    name varchar(20),
    key(id)    # 表級約束  ---只是一個關鍵字索引
);

create table key_test(
    id int,
    name varchar(20),
    key(id, name)  # 表級約束---聯合約束
);

#index 索引測試

create table index_test(
    id int index,      # index 沒有列級約束   # error
    name varchar(20)
);

create table index_test(
    id int,
    name varchar(20),
    index(id)    # 表級約束  ---只是一個關鍵字索引
);

create table index_test(
    id int,
    name varchar(20),
    indexid, name)  # 表級約束---聯合約束
);

# 在已有的表格創建索引
create index index_name on table_name(column_item1[, column_item2]);
# 在已有的存在索引欄位的表格刪除索引
drop index index_name on table_name(column_item1[, column_item2]);

    check(沒有什麼具體作用)

 

創建視圖view(視圖和相關聯的表格是一致的):

create view view_name as 數據(某個結果數據集);

增加、刪除、修改、查詢(前提是操作成功)等功能和表格的一樣

視圖的作用:

  重用sql語句,即多次使用相同語句

  數據的安全性:限定特定欄位數據

  對數據的重構並且不影響其他程式的運行,讓數據更加清晰

# 創建一個視圖(可以將視圖比作望遠鏡)
# 即實物與望遠鏡看到的事物是一致的
create view view_name as select * from table_name;

# 下麵兩個結果是一樣的
select * from view_name;
select * from table_name;

 DROP

  drop可以刪除資料庫、數據表、view視圖、index索引

drop database database_name;
drop table table_name;
drop view view_name;
drop index index_name on table_name(column_item1[, column_item2]);

 

RENAME(重命名)

  rename只限於表格操作

# 修改表格名稱
rename table old_name to new_name

TRUNCATE

  清空表格的數據,釋放磁碟空間(自定義的設置會回覆原來的設置)

  

create table truncate_test(
    id int primary key auto_increment,
    name varchar(20)
)auto_increment=10000;

insert into truncate_test(name) values ("aaa");

truncate truncate_test;    # 原來設置的auto_increment=10000,會改為auto_increment=1

ALTER

alter 完整語法的用法:

# 創建一個測試表格
create table test(id int);

  1、向表格增加一列:

# 語法:
#alter table table_name add column_name column_type column_constraints

alter table test add name varchar(20) not null;
 2、向表格的一個/多個欄位增加索引(多個欄位即聯合索引)
# 語法
# alter table table_name add index [unique_name](column_name1[,column_name2])
alter table test add index (id);

   3、向表格的一個/多個欄位增加主鍵(多個欄位即聯合主鍵)

# 語法:
# alter table table_name add primary key (column_name1[,colum_name2])

alter table test add primary key (id);

  4、向表格的一個/多個欄位增加唯一(多個欄位即聯合唯一)

# 語法:
# alter table table_name add unique [unique_name] (column_name1[, clumn_name2])

alter table test add unique (id);

  5、修改/刪除表格某個欄位的預設值

# 語法:
# alter table table_name alter column_name {set defaulle column_value |drop default}

# 色湖之預設值
alter table test alter name set default "root";

# 刪除預設值
alter table test alter name drop default;

  6、修改表格欄位

# 語法:
# 修改欄位過程中若連同欄位名也修改採用change
# alter table table_name change column_old_name column_new_name [constraints]

alter table test change id test_id int primary key;

# 不修改欄位名可採用modify
# alter table table_name modify column_name [constraints]

alter table test modify test_id int(10) unsigned  primary key;

   7、刪除欄位、主鍵、索引

# 語法:
# 刪除某個欄位
# alter table table_name drop column_name

alter table test drop name;

# 刪除索引
# alter table table_name drop index index_name   預設是欄位名,也可以查看表結構

alter table test drop index id;

# 刪除主鍵
# alter table table_name drop primary key

alter  table test drop primary key;

  8、修改表格的名稱

# 修改表格的兩種方式:
# 1、採用rename方式
# rename table table_old_name to table_new_name;

rename table test to test1;

# 2、採用alter方式
# alter table table_name rename [as] table_new_name

alter table test1 rename test;

  9、修改表格的配置

# 語法
# 修改的地方是在 ) 和 ; 之間的配置

# 修改引擎
# alter table table_name engine=InnoDB

alter table test engine=InnoDB;

# 修改字元編碼
# alter table table_name charset=gbk2313

alter table test charset=gbk2312;

 

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近心血來潮想給自己的筆記本裝一套linux系統作為開發環境, 說乾就乾,首先先收集一下現在linux主流版本, 貌似現在市場上應用伺服器比較多的是redhat相關產品,而ubuntu的優勢在於它龐大的社區支持用戶群體, 個人任務兩個都差不多,至於選擇哪個看個人興趣。 我選擇的是RedHat旗下Ce ...
  • 信號量 一、 1、信號量的數據類型為結構sem_t,它本質上是一個長整型的數。 2、例如: typedef struct { struct _pthread_fastlock __sem_lock; int __sem_value; _pthread_descr __sem_waiting; } s ...
  • [TOC] mysql資料庫 資料庫是什麼 存儲數的的倉庫 列表,字典....等等,都是記憶體中的,其缺點:斷點即消失, 優點:速度快 文件存儲, 缺點: 速度慢, 優點: 可以實現永久保存 本質就是一套基於CS結構的,客戶端和服務端程式,最終的數據存儲在伺服器端的磁碟中 為什麼要使用資料庫 直接使用 ...
  • [學習筆記] 下載hadoop-2.7.4-src.tar.gz,拷貝hadoop-2.7.4-src.tar.gz中hadoop-mapreduce-project\hadoop-mapreduce-examples\src\main\java\org\apache\hadoop\examples ...
  • Navicat Premium 功能很強大,支持不同資料庫客戶端的連接,並且使用工具可以生成兩個庫差異的sql腳本,方便dev與test環境表結構同步,具體操作方法如下 單擊運行,實現兩個庫中模式表結構同步,也可導出sql腳本,發給測試人員自己執行sql腳本。 Navicat Premium 12. ...
  • 1. MySQL中的函數 <1>加密函數 <2>聚合函數 <3>數學相關的函數 <4>字元相關的函數 <5>日期函數 <6>流程式控制制函數 2. 用戶的創建和授權(DCL) <1>授權的語法格式 <2>取消許可權的語法格式 <3>顯示授予的許可權 <4>刪除用戶 3.MySQL中的索引 <1>概念: <2 ...
  • 一、Flume簡介 Apache Flume 是一個分散式,高可用的數據收集系統。它可以從不同的數據源收集數據,經過聚合後發送到存儲系統中,通常用於日誌數據的收集。Flume 分為 NG 和 OG (1.0 之前) 兩個版本,NG 在 OG 的基礎上進行了完全的重構,是目前使用最為廣泛的版本。下麵的 ...
  • https://wangde.xin/images/article/mysql/mysql_com.png ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...