【java】java學習之路-03-MySQL(二)

來源:互聯網
上載者:User

標籤:效率   l資料庫   學習   form   text   use   超過   ddr   esc   

MySQL資料庫 day02

Tip:在Windows命令列中中文輸入報錯問題:

MySQL資料庫需要知道用戶端使用什麼編碼,來進行正確的編碼轉換。
set names gbk;
告訴伺服器,自己是gbk編碼。(window用戶端是gbk編碼,Linux用戶端是utf8編碼)

一、資料類型
unsigned 標記,添加 unsigned 表示無符號。
zerofill 標記,例如:int(4) zerofill; 顯示資料不足4位會補0,超出4個正常使用。

1、數字
a.tinyint1個位元組
b.smalint2個位元組
c.int 4個位元組
int(3)小括弧內的數字,只會影響查詢顯示格式,而不會影響數字範圍

d.bigint8個位元組
e.float4個位元組
f.double8個位元組
double(6,2)不會影響範圍,只會影響顯示

g.decimal/numeric定點浮點數,可以做精確運算,一般表示“錢”
decimal(6,2)表示整數4位,小數2位,總共6位。
整數超出範圍,可能會報錯;小數超出範圍,會四捨五入


2、字串
a.char(20)定長字串
超出長度可能會出錯,也可能會截斷(要根據資料庫設定決定)
如果長度不足,會補空格
最長255
定長的字串效率更高

b.varchar(20)變長字串
最大長度是255內,前面需要一個位元組來表示長度
最大長度超過255,前面需要兩個位元組來表示長度
最長65535個位元組
一般用 varchar 儲存255內的字串

c.text
65535位元組;
只佔用表總位元組量的10個位元組

d.blob
超大對象資料
要使用流來讀寫blob欄位資料
通常不用blob儲存文本

3、日期時間
a.datetime年月日時分秒
b.date年月日
c.time時分秒
d.timestamp
時間戳記,一般不用
年月日時分秒
最大隻到2038年
修改一行資料時,第一個timestamp欄位會自動更新為系統目前時間
不能取null值,填入null值,會自動填入系統目前時間

二、約束:

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

1、主鍵約束
唯一標識一行資料
唯一、不重複
非空,不能取null值
自動產生索引
一般不使用業務資料作為主鍵,而是使用無意的是資料

(1)添加主鍵
a.在建立表時添加
方法一:
create table tb1(
id int primary key,
...
);
方法二:
create table tb1(
id int,
...
primary key(id)
);
方法三:雙主鍵(組合主鍵),必須使用這種格式添加
create table tb1(
name...
ip...
...
primary key(name,ip)
);

b.修改表時添加:
alter table tb1 add primary key(id);

(2)查看主鍵
a. desc tb1;
b. show create table tb1\G;

(3)刪除主鍵
a. alter table tb1 drop primary key;
刪除後查看:desc tb1;
show create table tb1;

(4)自增主鍵:auto_increment

a.建表時添加自增主鍵
id int primary key auto_increment;

b.修改時將主鍵設定為自增(id已經是主鍵)
alter table tb1
modify id int auto_increment;

c.取消自增(不會刪除主鍵約束)
alter table tb1
modify id int;

d.自增主鍵填入null值,自動填入自增值

f.查看自增值的下一個值:
show create table tb2\G;
....
auto_increment:xx

g.可以手動插入一個指定的值,如果這個值是表中的最大值的,下一個自增值會自動從這個最大值增長。使用自增主鍵,不用管這個值是否連續。自增主鍵不能退回。

2、外鍵約束:限制一個欄位的取值,只能取另一個主鍵的值
(1)建立外鍵
a.建表時建立外鍵
create table tb2(
...
x_id ...
...
foreign key(x_id) references tb1(id)
);
b.修改表時建立外鍵
alter table tb3
add foreign key(x_id) references tb1(id);

(2)查看外鍵
show create table tb3;

(3)刪除外鍵:
首先需要查看外鍵約束的名字
alter table tb2
drop foreign key 約束名;

(4)外鍵也會自動建立索引,刪除外鍵,不會自動刪除外鍵的索引,如果想刪除外鍵的索引:
alter table tb2
drop index 索引名;



3、非空約束
(1)添加非空約束
a.建立表時添加
creat table tb2(
...
name varchar(20) not null,
);
b.修改表時添加:
alter table tb2
modify name varchar(20) not null;

(2)取消非空約束
alter table tb2
modify name varchar(20);

alter table tb2
modify name varchar(20) null;

4、唯一約束(unique):欄位取值不能重複,允許重複的null值
(1)添加唯一約束
a.建表時添加
create table tb2(
username varchar(32) unique not null,
email varchar(128) unique
addr varchar(255),
tel varchar(20),
unique(addr,tel)
);
b.修改表時添加
alter table tb2
modify email varchar(128) unique;

alter table tb2
add unique(addr,tel);

(2)查看唯一約束
a.方法一:
desc tb2
show create table tb2

b.查看系統庫中的約束
use information_schema --系統庫,庫資訊
select * from table_constraints
where table_name = ‘xxx‘;

(3)取消唯一約束
alter table tb2
drop index 索引名;

(4)檢查約束
通過設定欄位取值條件,來限制它的取值比如,性別、年齡範圍等
MySQL支援檢查約束的文法,但沒有實現約束,MySQL不會檢查約束條件

create table xuesheng (
gender...
age...
check(gender=‘男‘ or gender=‘女‘),
check(age>8 and age<60)
);
5、預設值(default)
age int default 0
在表結構中儲存欄位的注釋資訊

三、在表結構中儲存欄位的注釋資訊(comment)
create table tb2(
id int comment ‘主鍵id‘,
name varchar(20) comment ‘姓名‘
);
show create table tb2\G可以看到注釋

四、表和表之間的關係
1、一對一關聯性
具有唯一約束的外鍵
既是主鍵也是外鍵的欄位

2、一對多關聯性
在多方表中添加外鍵

3、多對多關係
需要一張中間表,添加兩個外鍵欄位,分別引用兩張表的主鍵

【java】java學習之路-03-MySQL(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.