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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...