MySQL之DDL(定義)語句

2021-10-02 11:27:33 字數 3120 閱讀 2253

①建立: create database [if not exists] 庫名

②檢視:show databases

③修改:庫名可以直接修改相對應的儲存檔名

alter database 庫名+

character set 編碼方式

collate 檢驗方式 設定檢驗方式(防止出現中文亂碼)

tips:show character set; 檢視mysql所支援的字元及校驗規則

④刪除:drop database if exists 庫名

①建立:create table [if not exists] 表名(列名,列的型別(長度)[約束]), … )

tips:在建立表時,可在每一欄位後加 comment 『注釋』作解釋

②檢視:

所有表:show tables

表結構:desc 表名 || show create table 表名[\g] #可以檢視具體建立過程

③修改 :(add 、modify、 change 、drop 、rename to)

效用表示方式

新增列或新增列級約束

alter table 表名 add column (列名 列的型別(長度)[約束]) … ) [新增位置 first/after 列名];

ps:可新增表級約束(add [constraint pk/uq/ck(約束名)] 約束型別(列名));

修改列型別或列級約束

alter table 表名 modify column 列名 型別 [約束] [修改位置 first/after 列名];

修改列名

alter table 表名 change column 舊名 新名 型別;

刪除列alter table 表名 drop column 列名;

修改表名稱

alter table 表名 rename to 新名;

④表的刪除:drop table if exists 表名;

通常流程:先刪除,後新建

⑤表的複製: 可以跨庫操作:庫名.表名

格式結果

create table 新錶名 like 所複製的表名

複製表的格式(包含key和自增長),不複製表中的資料

create table 新錶名 select 字段 from 所複製的表名

可以複製部分的字段和資料(但不會複製表中的key和自增長列的標識)

tips:若需要只複製部分結構,不複製資料,可以使用乙個永假的篩選條件

約束:限制表中資料,保證資料的一致性。

修改:在建立表的時候和修改表的時候進行設定,資料插入之前。

六大約束

效用①not null

非空②default

預設,使用update進行修改時,也可使得 set *** = deafult

③primary key

主鍵,保證欄位的值具有唯一性,並且一定非空

④unique key

唯一性,但可以為空

⑤check

檢查約束(mysql不支援),例,check(列名=』 』 or 列名=』 ')對插入資料進行限制

⑥foreign key

外來鍵(從表新增)

1)、建立表時新增約束:

列級約束:六大約束都支援,外來鍵約束無效,直接在字段和型別後進行追加

表級約束:除了①②都支援

語法:[constraint pk/uq/ck(約束名)] 約束型別 (具體約束列)(可以起別名)

外來鍵:foreign key(列名) references 主表(列名))[on update 等級 on delete 等級]

tips:外來鍵約束名一般為fk_當前表_主表,外來鍵約束的等級:

等級名效用

cascade(級聯)

主動權在主表,主表修改/刪除,從表對應進行修改/刪除

set null

主動權在主表,主表修改/刪除,從表對應外來鍵設為null(外鍵子段不能有非空約束)

no action

主表不作為,同restrict

restrict

嚴格,主表對該字段的修改和刪除完全被限制,必須先處理從表對應的值

set default

mysql innodb引擎不支援

2)、修改表時新增約束:

①使用modify關鍵字新增列級約束

②使用add關鍵字新增表級約束

3)、刪除約束:

非空和預設可用modify修改列,不加約束,會進行覆蓋

對於主鍵、唯一(index)、外來鍵可以使用:alter table 表名 drop 約束型別 列名(主鍵不需要提供列名)

ps:所有約束儲存在information_schema資料庫的table_consraints表中

也可使用:show index from 表名 #檢視表中所有的鍵(索引)

4)、三個key的特點

key特點

主鍵保證唯一性,不可為空,乙個表至多乙個,可以組合(復合主鍵,不推薦)

唯一保證唯一性,可為空(只能允許乙個null),一表可有多個,可以組合(不推薦)

外來鍵限制兩個表的關係,也可以是乙個表中的兩個字段

保證該字段的值必須來自於主表關聯列(必須是乙個鍵,一般為主鍵或唯一鍵)的值,和主表中的型別一致或相容

插入資料時,先插入主表,再插入從表,刪除資料時,先刪除從表,再刪除主表

ps:一般專案用表都不會設定外來鍵,因為外來鍵所在表插入欄位時必須要求主表存在,每次都會檢視,資料過多時,影響效率,並且在某種特殊需求下,會要求刪除主表資訊而保留從表資訊,有很大影響。

①建立表時設定標識列:直接跟在主/唯一/外來鍵(即跟key搭配,資料型別為數值型,且乙個表只能有乙個)約束之後,auto_increment

ps:show variables like 『%auto_increment%』

標識列的起始值 :auto_increment_offset

步長:auto_increment_increment

tips:mysql中不支援對起始值進行修改,但可以在插入數值時指定值,此後資料便會根據此值增長

②修改表時設定標識列:通過modify關鍵字設定標識列

③修改表時刪除標識列:通過modify關鍵字刪除標識列(不設定,進行覆蓋)

Mysql中DDL(資料定義語句)

一 操作庫 1 建立庫 create database if notexists mydb1 charset utf8 2 修改庫的編碼集 alter database mydb1 character set utf8 3 刪除庫 drop database if exists mydb1 4 查詢...

資料定義語句(DDL語句)

create table 表名 欄位名1 型別,欄位名2 型別,欄位名n 型別 型別有 這是因為計算機是時間和空間的結合體,省時就浪費,不浪費就費時。比如結構體的對齊和補齊就是提高定址效率的,但是浪費空間定長的字串效率高,但是會浪費空間。變長字串效率低一點,但是省空間。我們一般使用變長字串,除非是那...

MySQL學習筆記 DDL 資料定義語句

ddl data definition language 資料定義語言 用來定義資料庫物件 資料庫,表,列等。關鍵字 create,drop,alter 等 create database 資料庫名稱 建立資料庫的時候,該名稱的資料庫可能已經存在了,就需要判斷不存在,再建立 create datab...