①建立: 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...