1. 程式人生 > >Mysql02資料型別,五大約束

Mysql02資料型別,五大約束

中文問題
 Mysql資料庫需要知道客戶端使用什麼編碼,
來進行正確的編碼轉換

 set names gbk;
告訴伺服器,自己是gbk編碼
 Set names utf8;
告訴伺服器 自己是utf-8 編碼

資料型別

 

**數字**

  **unsigned標記**
新增 unsigned表示無符號,只有正數
  zerofill標記
 
**int(4)  zerofill**
顯示時,不足4位會補0
0001
0012
0123
超過4位按照實際走 1234567
 
**tinyint**
                            1位元組
 **smallint**
                            2位元組
 **int**
                            4位元組
                            int(3)
                            小括號數字,隻影響查詢顯示格式,
                            而不影響數字範圍
                               3
              12
             123
         3345663
 **bigint**
                            8位元組
 **float**
                            4位元組
 **double**
                            8位元組
**decimal/numeric**
                            定點浮點數,可以做精確運算
                            decimal(6,2)
                            整數4為,小數2位,總共6位
                            整數超出範圍,可能會報錯
                            小數超出範圍,會四捨五入
      字串
 **char(20)**
  定長字串,
  超出長度,可能會出錯,也可能會截斷
  如果長度不足,會補空格
  最長 255
  效率更高
**varchar(20)**
  變長字串
  最大長度是255內,前面需要一個位元組來表示長度
  最大長度超過255,前面需要兩個位元組來表示長度
  最長65535位元組
  一般用varchar儲存255內的字串
 **text**
  65535位元組
  只佔用表總位元組量的10個位元組
 **blob**
  超大物件資料
  要使用流來讀寫blob欄位資料
  通常不用blob儲存文字
      

## 日期時間

                 datetime
                                     年月日時分秒
                 date
                                     年月日
                 time
                                     時分秒
                 timestamp
  時間戳
  年月日時分秒
  最大隻到 2038年
  修改一行資料時,第一個 timestamp 欄位會自動更新為系統當前時間
  不能取null值,填入null值時,會自動填入系統當前時間
  一般不用

約束

 對一個欄位的取值進行限制

主鍵約束

 唯一標識一行資料
例如:
id 學號 姓名 性別
1 1002345 xx xx
2 345342
3 4564745
4 743553242
5 36345
6 4356456

Id 身份證號 姓名 性別
1 4534534 xx xx

id 手機號 套餐 金額
使用者id+時間+隨機數字… 345345 Xx xxx

 唯一,不重複
 非空,不能取null
 自動生成索引
 一般不使用業務資料作為主鍵
而是使用無意義資料
新增主鍵
 在新建表時新增
create table tb2(
id int primary key,

);

create table tb2(
id int,
…,
primary key(id)
);

create table tb2(
name…,
ip…,
…,
primary key(name, ip) – 雙主鍵(組合主鍵)
);
 在修改表時新增
alter table tb2
add primary key(id);
檢視主鍵
desc tb2;

                        show  create  table  tb2\G
       刪除主鍵
                        alter  table  tb2
                        drop  primary  key;
       自增主鍵

 auto_increment
 建表時新增自增主鍵:
id int primary key auto_increment
 修改表將主鍵設定為自增(id已經是主鍵):
alter table tb2
modify id int auto_increment;
 取消自增(不會刪除主鍵約束)
alter table tb2
modify id int;
 自增主鍵填入 null 值時,自動填入自增值
 檢視自增值的下一個值
show create table tb2\G

auto_increment: 54345
 可以手動插入一個指定的值,如果這個值是表中的最大值,下一個自增值會自動從這個最大值增長
 使用自增主鍵,不用管這個值是否連續
 自增主鍵不能回退
 查詢剛插入的資料生成的主鍵值

使用函式: last_insert_id()
select last_insert_id();

 Insert … values(…),(…),(…) ;
Select last_insert_id(); 得到第一條資料的 id
 last_insert_id() 只獲取當前資料庫連線所插入的 id 值
 使用示例:
Insert into xuesheng(name)
values(‘aaa’);

insert into lianxi(xs_id, tel)
values(last_insert_id(),‘236236643’);

外來鍵約束

               限制一個欄位的取值,只能取另一個主鍵的值

 建立外來鍵
 建表時建立外來鍵
create table tb3(

x_id …

foreign key(x_id) references tb2(id)
);
 修改表時建立外來鍵(新增外來鍵)
alter table tb3
add foreign key(x_id) referneces tb2(id);
 檢視外來鍵
show create table tb3;
 刪除外來鍵
 首先需要檢視外來鍵約束的名字
 alter table tb2
drop foreign key 約束名
 外來鍵也會自動建立索引,刪除外來鍵,不會自動刪除外來鍵的索引,如果想刪除外來鍵的索引:
alter table tb2
drop index 索引名

非空約束

 新增非空約束
直接後面加not null
建立時新增
Create table tb2(

name varchar(20) not null,

);
修改時新增
Alter table tb2
Modify name varchar(20) not null;
 檢視非空約束
Desc tb2;
Show create table tb2\G
 取消非空約束
Alter table tb2
Modify name varchar(20);

Alter table tb2
Modify name varchar(20) null;

唯一約束

 欄位取值不能重複,允許重複的 null 值
 會生成索引

 新增唯一約束
 建表時新增
Create table tb2(
Username varchar(32) unique not null,
Email varchar(128) unique,
Addr varchar(255),
Tel varchar(20),
unique(addr, tel) – 欄位組合不重複
);
 修改表時新增
Alter table tb2
Modify email varchar(128) unique;

Alter table tb2
Add unique(addr, tel);
 檢視唯一約束
Desc tb2;
Show create table tb2;
– 檢視系統庫中的約束表
use information_schema; – 系統庫,庫資訊
select * from table_constraints
where table_name=‘xuesheng’;
 取消唯一約束
alter table tb2
drop index 索引名;
檢查約束
 通過設定欄位取值條件,來限制它的取值
比如性別,年齡範圍
 Mysql支援檢查約束的語法,但沒有實現這個約束,mysql不會檢查約束條件

Create table xuesheng(
Gender…
Age…
Check(gender=’男’ or gender=’女’),
Check(age>8 and age<60)
);
預設值
age int default 0
comment註釋資訊
Create table tb2(
Id int comment ‘主鍵id’,
Name varchar(20) comment ‘姓名’
);

Show create table tb2\G 可以看到註釋

表之間的關係

  一對一

 具有唯一約束的外來鍵
 既是主鍵也是外來鍵的欄位

  一對多

 在多方表新增外來鍵

  多對多

 需要一張中間表,新增兩個外來鍵欄位,分別引用兩張表的主鍵