mysql5 7學習筆記 約束

2021-08-28 07:13:07 字數 3672 閱讀 1570

一.約束的種類

主鍵約束,

外來鍵約束,

非空約束,

唯一鍵約束,

預設約束

二.功能及使用

1.主鍵約束

又稱主碼,是表中一列或多列的組合.要求鍵的資料唯一,並且不允許為空.主鍵與記錄一一對應.可加快查詢速度.分為單字段主鍵和多字段主鍵.

1.1單字段主鍵

(1)定義時候指定,由乙個字段組成的主鍵,語法規則如下:

欄位名    資料型別    primary key [預設值]

如create table `test_man` (

`id` int(11) primary key ,

`name` varchar(255) default null,

`age` int(11) default null,

`***` char(255) default null

);(2)定義完後指定主鍵

[constraint 《約束名》]  primary key [欄位名]

如create table `test_man` (

`id` int(11) ,

`name` varchar(255) default null,

`age` int(11) default null,

`***` char(255) default null,

primary key (`id`)

);兩種方式的執行結果是一樣的.

1.2 多欄位聯合索引

主鍵由多個字段聯合組成,語法如下

primary key [欄位1,欄位2,....欄位n]

意義:某錶沒有建立主鍵,由多個字段聯合確定某一條記錄

sql如下:

create table `test_dept` (

`name` varchar(20) not null,

`age` int(4) not null default '0',

`***` char(1) not null default '0',

`adress` varchar(100) default null,

primary key (`name`,`age`,`***`)

)1.3主鍵自增

用auto_increment實現.

乙個表只能有乙個字段使用auto_increment約束,且該字段必須為主鍵的一部分.auto_increment可以是任何整型(tinyint,int,bigint,smallin).

語法如下

欄位名    資料型別    auto_increment

如create table `test_man` (

`id` int(11) primary key  auto_increment ,

`name` varchar(255) default null,

`age` int(11) default null,

`***` char(255) default null

);2.外來鍵約束

外來鍵用來在兩個表資料之間建立鏈結,可以是一列或多列.乙個表可以有乙個或多個外來鍵.可以為空值,若不為空則必須對應主表的資料.

首先外來鍵是乙個字段,不可以是主鍵.但對應主表的主鍵.定義外來鍵後不允許刪除對應的主表資料.外來鍵作用是保證資料引用的完整性,一致性.

語法:[constraint 《外鍵名》] foreign key 欄位名1  [,欄位名2,.....] references 《主鍵名》 主鍵列1  [,主鍵列2,.......]

"外鍵名"為定義的外來鍵約束名稱,乙個表中不能有相同名稱的外來鍵; 

"欄位名"表示子表需要新增外來鍵約束的字段列;

"主表名"即被子表外來鍵依賴的主表名稱;

"主鍵列" 表示主表中定義的主鍵列, 或者列組合.

(1) 建立表時候新增外來鍵

create table `test_man` (

`id` int(11) not null auto_increment,

`name` varchar(255) default null,

`age` int(11) default null,

`***` char(255) default null,

`emp_id` int(11) not null,

primary key (`id`),

key `fk_emp_man` (`emp_id`),

constraint `fk_emp_man` foreign key (`emp_id`) references `test_emp` (`id`)

)(2) 表已經建立新增外來鍵

alter table test_man add constraint fk_emp_man foreign key (emp_id) references test_emp (id);

(3) 刪除外來鍵

alter table test_man drop foreign key fk_emp_man

3.非空約束

非空約束指欄位不能為空,如果為空插入資料,資料庫會報錯.

語法:欄位名    資料型別   not null;

如create table `test_man` (

`id` int(11) primary key  auto_increment ,

`name` varchar(255) default null,

`age` int(11) default null,

`***` char(255) default null

);4. 唯一約束

要求該列唯一,允許為空,但只能出現乙個空值,保證資料不重複

語法1:

欄位名 資料型別  unique

create table `test_dept` (

`name` varchar(20) unique,

`age` int(4) not null default '0',

`***` char(1) not null default '0',

`adress` varchar(100) default null,

primary key (`name`,`age`,`***`)

)語法2:

[constraint 《約束名》] unique(《欄位名》)

create table `test_dept` (

`name` varchar(20) not null,

`age` int(4) not null default '0',

`***` char(1) not null default '0',

`adress` varchar(100) default null,

primary key (`name`,`age`,`***`),

constraint aa unique(`name`) -- 此處用 unique key `aa` (`name`) 也是一樣

)唯一性約束與 主鍵約束的區別: 乙個表中,可以有多個唯一性約束,且被約束的字段允許有空值.而主鍵只能有乙個,且宣告主鍵的列不能有空值.

5  預設約束

即default.指定某列的預設值

語法欄位名 資料型別 default 預設值 如:

create table `test_dept1` (

`age` int(4) not null default '0'

)

mysql5 7學習 mysql 5 7 學習

mysql uroot proot mysql5.7 mysql.user表沒有password欄位改 authentication string 一.建立使用者 命令 create user username host identified by password 例子 create user d...

Docker安裝Mysql5 7學習筆記

centos7安裝docker學習筆記 搜尋自己需要的版本映象 docker search mysql 拉取官方映象 我們這裡選擇5.7,如果不寫後面的版本號則會自動拉取最新版 docker pull mysql 5.7 檢視本地映象 docker imagesmkdir home docker m...

MySQL學習筆記三 MySQL5 7安裝後期設定

1.1 mysql除了可以用mysql 5.7 command line client操作外,也可以使用windows下的命令操作符進行操作。1 通過win r調出執行視窗,輸入 cmd 2 通過 cd c program files mysql mysql server 5.7 bin 進入mys...