標籤:效率 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(二)