一文掌握MySQL表的創(chuàng)建和約束
一、數(shù)據(jù)庫(kù)的建立和銷(xiāo)毀
建立數(shù)據(jù)庫(kù):
create database [if not exists] 數(shù)據(jù)庫(kù)名 [default charset 字符集]
tips: 中括號(hào)[]里面的內(nèi)容可以省略不寫(xiě)
加上if not exists的含義是:如果不存在此數(shù)據(jù)庫(kù)就會(huì)創(chuàng)建
default charset 字符集是創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候設(shè)置字符集
銷(xiāo)毀數(shù)據(jù)庫(kù):
drop database [if exists] 數(shù)據(jù)庫(kù)名
tips: 可省略部分的含義同上
二、表的建立和銷(xiāo)毀
1、表的建立
語(yǔ)法:
create table [if not exists] 表名(
字段名 數(shù)據(jù)類(lèi)型 [約束],
字段名 數(shù)據(jù)類(lèi)型 [約束],
...(最后一個(gè)字段不能加逗號(hào))
)
1.1、命名規(guī)則
表名通常以t_開(kāi)頭
關(guān)鍵字段通常以表名縮寫(xiě)_開(kāi)頭
MySQL不區(qū)分大小寫(xiě),不能使用關(guān)鍵字命名,多個(gè)部分之間用下劃線(xiàn)連接
1.2、數(shù)據(jù)類(lèi)型
需要掌握的數(shù)據(jù)類(lèi)型:
1.整數(shù):int、integer、bigint
2.小數(shù):decimal
3.字符串:varchar
4.枚舉:enum
5.日期:datatime
使用建議:
當(dāng)字段數(shù)字一定大于0并且不會(huì)進(jìn)行減運(yùn)算時(shí)可以使用無(wú)符號(hào)數(shù)unsigned,通常不建議
float和double存在精度問(wèn)題,后續(xù)mysql將不再支持
char和verchar在保存多個(gè)字符時(shí)底層實(shí)現(xiàn)是一致的,只是占用空間的模式不同,不建議使用char,因?yàn)橛锌赡芾速M(fèi)空間
timestamp上限太低,date和time不實(shí)用,所以日期建議使用datetime
2、表約束概念
2.1、約束預(yù)覽
| 約束 | 解釋 | 說(shuō)明 |
|---|---|---|
| primary key | 主鍵 | 用來(lái)標(biāo)志一列為主鍵列 |
| not null | 非空 | 約束該列值不允許為空 |
| unique | 唯一 | 約束該列值不允許重復(fù) |
| default | 默認(rèn) | 給該列設(shè)置默認(rèn)值 |
| foreign key | 外鍵 | 標(biāo)志一列為外鍵值 |
| check | 檢查約束 | MySQL不支持 |
2.2、特點(diǎn)及作用
主鍵
作用:可以作為唯一標(biāo)識(shí)具體鎖定某行數(shù)據(jù)
特點(diǎn):非空且唯一
一張表至多有一個(gè)主鍵列
非空
特點(diǎn):值不能為null,必須設(shè)定
唯一
特點(diǎn):值可以為null,并且可以存在多個(gè)null,該約束只對(duì)已經(jīng)存在的值有效
非空約束+唯一約束 不等同于 主鍵約束
默認(rèn)
特點(diǎn):如果該列未顯式賦值,則使用默認(rèn)值存放
語(yǔ)法: default(值)
外鍵的使用放在下面具體講解
3、表約束具體使用
3.1、列級(jí)約束
直接將約束定義到在列的聲明里
使用示例:
-- id、姓名、年齡、性別、身高、生日
create table if not exists t_person(
p_id int primary key,-- 主鍵
p_name varchar(50) unique not null,-- 唯一+非空
age tinyint unsigned not null,-- 非空 無(wú)符號(hào)數(shù) 0-255
sex enum('男','女','奧特曼') default '奧特曼',-- 默認(rèn)
height decimal(4,1), -- 總共有4位,小數(shù)點(diǎn)占1位:000.0
birthday datetime
)
3.2、表級(jí)約束
將約束單獨(dú)定義在所有列的下方,not null和default沒(méi)有表級(jí)約束
語(yǔ)法:[constraint 自定義約束名] 約束類(lèi)型(字段名)
使用示例:
create table if not exists t_person(
p_id int,-- 主鍵
p_name varchar(50) not null,-- 唯一+非空
age tinyint unsigned not null,-- 非空 無(wú)符號(hào)數(shù) 0-255
sex enum('男','女','奧特曼') default '奧特曼',-- 默認(rèn)
height decimal(4,1), -- 總共有4位,小數(shù)點(diǎn)占1位:000.0
birthday datetime,
-- 表級(jí)約束
primary key(p_id),-- 給p_id添加主鍵約束
constraint un_name unique(p_name)-- 給p_name添加唯一約束
)
3.3、外鍵約束
作用:用來(lái)表示兩張表之間的聯(lián)系,必須結(jié)合另一張表使用
特點(diǎn):
- 連接的必須是另一張表的主鍵或者唯一列
- 外鍵列的值不可自定義,必須來(lái)自另一張表與之關(guān)聯(lián)的列中已經(jīng)存在的值
- 值可以為null,不唯一
- 必須用表級(jí)約束創(chuàng)建
語(yǔ)法:
foreign key(字段名) references 其他表名(其他表的連接字段名)
使用:
- 建表順序:先建沒(méi)有外鍵的表,再建有外鍵的表
- 刪表順序:先刪有外鍵的,再刪沒(méi)外鍵的
- 外鍵列的數(shù)據(jù)類(lèi)型必須與所連接的列一致
使用示例:
-- 班級(jí)表:id,班級(jí)名
create table t_class(
c_id int PRIMARY KEY,
c_name varchar(20) not null
)
-- 學(xué)生表:id,姓名,所屬班級(jí)id
create table t_student(
s_id int PRIMARY KEY,
s_name varchar(20) not null,
c_id int not null ,
-- 表級(jí)約束
FOREIGN KEY(c_id) REFERENCES t_class(c_id)
)
4、表的銷(xiāo)毀
語(yǔ)法:
drop table [if exists] 表名
注意事項(xiàng):
在3.3外鍵約束具體使用中對(duì)于有外鍵的表,要先刪除有外鍵的表,再刪除沒(méi)有外鍵的表
drop table t_student – 先刪學(xué)生表
drop table t_class – 才能刪班級(jí)表
到此這篇關(guān)于一文掌握MySQL表的創(chuàng)建和約束的文章就介紹到這了,更多相關(guān)MySQL表 創(chuàng)建 約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL運(yùn)算符!=和<>及=和<=>的使用區(qū)別
本文主要介紹了MySQL運(yùn)算符!=和<>及=和<=>的使用區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
MySQL?字符串轉(zhuǎn)換為數(shù)字的方法小結(jié)
這篇文章主要介紹了MySQL字符串轉(zhuǎn)換為數(shù)字的幾種方法,本文給大家列列舉了三種方法,每種方法通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
Navicat配置mysql數(shù)據(jù)庫(kù)用戶(hù)權(quán)限問(wèn)題
這篇文章主要介紹了Navicat配置mysql數(shù)據(jù)庫(kù)用戶(hù)權(quán)限問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
窺探mysql存儲(chǔ)過(guò)程細(xì)節(jié)
這篇文章主要為大家詳細(xì)介紹了mysql存儲(chǔ)過(guò)程細(xì)節(jié),對(duì)mysql存儲(chǔ)過(guò)程感興趣的小伙伴們可以參考一下2016-03-03

