mysql的外模式ddl MySQL DDL語言

2021-10-18 11:46:35 字數 3677 閱讀 4700

ddl語言就是我們所說的資料庫模式定義語言,用於對資料庫或者資料表的建立定義、修改和刪除,下面就從大方面去學習ddl:

一、庫的管理

1、建立庫:create database 【if not exists】庫名 【character set 字符集名】

2、 修改庫:alter database 庫名 。。。。

3、 刪除庫:drop database 【if exists】庫名;

二、表的管理

1、建立表: create table 【if not exists】表名(

欄位名 字段型別【約束】,

欄位名 字段型別【約束】,

2、修改表

(1).新增列

alter table 表名 add column 列名 型別【first|after 欄位名】;

(2).修改列的型別或約束

alter table 表名 modify column 列名 新型別 【新約束】;

(3).修改列名

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

(4).刪除列

alter table 表名 drop column 列名;

(5).修改表名

alter table 表名 rename 【to】 新錶名;

3、刪除表:drop table 【if exists】表名;

4、複製表

(1).複製表的結構

create table 表名 like 舊表;

(2).複製表的結果+資料

create table 表名

select 查詢列表 from舊表 【where 篩選條件】;

三、資料型別

1、數值型

(1).整型:tinyint、smallint、midiumint、int/integer、bigint

特點:① 都可以設定無符號和有符號,預設有符號,通過unsigned設定無符號

② 超出範圍會報out or range 異常,插入臨界值

③ 長度可以不指定,缺省會有乙個長度。如果不夠則左邊用0填充,搭配zerofill

(2).浮點型

定點數:decimal(m,d)

浮點數:float(m,d) double(m,d)

特點:①m代表整數部位+小數部位的個數,d代表小數部位個數

②如果超出範圍,則報out or range異常,並且插入臨界值

③m和d都可以省略,但對於定點數,m預設為10,d預設為0

④如果精度要求較高,則優先考慮使用定點數

2、字元型

常用的char、varchar、binary、varbinary、enumerate、get、set、text、blob

(1).char:固定長度的字元,寫法為char(m),最大長度不能超過m,m可省略預設1

(2).varchar:可變長度的字元,寫法為varchar(m),最大長度不能超過m,m不可忽略

3、日期型

year 年 、date 日期、time 時間、datetime 日期時間、timestamp 日期時間

四、約束

1、約束型別分類

not null :非空,用於保證該字段的值不能為空

default:預設,用於保證該字段與預設值

primary key:主鍵,用於保證字段唯一性、非空性

unique:唯一,用於保證欄位的唯一性,可以為空值

check:檢測約束【mysql不支援】

foreign key:用於限制兩個表的關係,用於保證該字段的值必須來自主表關聯列的值

2、約束新增的分類

新增約束分為列級約束和表級約束,位置如下:

create table 表名(

欄位名 字段型別 列級約束,

欄位名 字段型別 列級約束,

表級約束

特點:列級約束:語法上各種約束型別都支援,但外來鍵約束沒有效果

表級約束:除了非空和預設約束,其他約束都支援

3、新增約束

(1).新增列級約束——以建立學生表為例

create table student (

id int primary key , # 主鍵

stuname varvhar(10) not null,#非空

gender char(1) check( gender = '男' or gender = '女'),#檢測

seat int unique,# 唯一

age int default 18,# 預設

majorid int foreign key references major(id) # 引用major表id欄位 外來鍵

(2).新增表級約束

create table student(

id int,

studname varchar(20),

gender char(1),

seat int,

age int ,

constraint pk primary key(id),#pk為自定義名稱,constraint 可以省略

constraint uq unique(seat)

(3).修改表時新增約束:alter table 表名 modify column 欄位名 型別 新約束 [列級約束]

alter table 表名 add 【constraint 約束名】 約束型別(欄位名) [表級約束]

4、主鍵與唯一鍵

(1).區別:①、乙個表至多有乙個主鍵,但可以有多個唯一鍵

②、主鍵不允許為空,但唯一鍵可以允許為空

5、外來鍵的特點

①、用於限制兩個表的關係,從表的字段值引用看主表的某字段值

②、外來鍵列和主表的被引用列要求型別一致,意義一樣,名稱無要求

③、外表的被引用列要求是乙個key(一般是主鍵)

④、插入資料、先插入主表,刪除資料需先刪除從表

針對第④點的外來鍵特點,我們可以使用更加快捷的方式進行資料的刪除:

①、級聯刪除

alter table 從表 add constaint 外鍵名 foreign key (主表) references 主表(字段) on delete cascade; # 執行過後,我們刪除主表中的資料時,從表包含被刪除資料的記錄也會一同刪去

②、級聯置空

alter table 從表 add constaint 外鍵名 foreign key (主表) references 主表(字段) on delete set null ; # 執行過後,從表中包含刪除資料記錄中的值會被null值代替

五、自增長列

自增長列的意思就會說無需手動插入值,可以自動提供序列值,預設從1開始,步長為1,關鍵變數名為:auto_increment_increment,如果想更改起始值則手動插入目標起始值的記錄;如果要更改步長,可以更改系統變數,set auto_increment_increment = 值; 乙個表至多有乙個自增長列,且自增長列只支援數值型,自增長列必須為乙個key。

①、建立表時設定自增長列

create table 表(

欄位名 字段型別 約束 auto_increment;

②、修改表時設定自增長列

alter table 表 modify column 欄位名 字段型別 約束 auto_increment;

③、刪除自增長列

alter table 表 modify column 欄位名 字段型別 約束

mysql外連線 MySQL外連線

外連線不但返回符合連線和查詢條件的資料行,還返回不符合條件的一些行。外連線分三類 左外連線 left outer join 右外連線 right outer join 和全外連線 full outer join 在外連線中outer 關鍵字可省略。三種連線的共同點 都返回符合連線條件和查詢條件 即內...

mysql的主鍵 外來鍵約束 MySQL 主鍵外來鍵

笛卡兒積 多表查詢 多個表變成乙個表 完整性約束條件 primary key 標識該屬性為該錶的主鍵,可以唯一的標識對應的元組 foreign key 標識該屬性為該錶的外來鍵,是與之聯絡的某錶的主鍵 not null 標識該屬性不能為空 unique 標識該屬性的值是唯一的 auto increm...

mysql外來鍵的應用 MySQL外來鍵應用

mysql外來鍵應用,所有tables必須是innodb型,它們不能是臨時表.因為在mysql中只有innodb型別的表才支援外來鍵.mysql版本 5.5.28 系統平台 rhel 5.8 32位 1 外來鍵的使用 外來鍵的作用,主要有兩個 乙個是讓資料庫自己通過外來鍵來保證資料的完整性和一致性 ...