1. 程式人生 > >MySQL 數據類型和約束(外鍵是重點🙄)

MySQL 數據類型和約束(外鍵是重點🙄)

符號 table 當前 會話 英文 res 全局 rem 最大數

數據類型

1. 數字(默認都是由符號,寬度表示的是顯示寬度,與存儲無關).tinyint 括號裏指定寬度

七位2進制數最大數就是2**7 -1=127 最小是-128

驗證:

create tabel t1(id tinyint)

create tabe t2(id int)

浮點數

float

double

decimal

測試

create table t2(salary float)

float(6,2) 第一參數,代表寬度. 第二個參數代表小數點後面的位數.

2.字符串類型

char 與 varchar

char 類型:定長,浪費空間,存取速度快

不夠就用空格補,
字符長度範圍: 0 ~ 255

create table t6(name char(4));

insert into t6(‘aigen‘)#存不進去

insert into t6(‘能不能存‘)  #能存進去


####varchar:變長,精準,節省空間,存取速度慢
字符長度範圍:0 ~ 65535



**char 和 varchar 區別:  char(5), 存不夠5個,用空格補齊.     varhar(5), 你是幾個它就存幾個.**

char_length : 查看的是字符的長度
‘abc‘和‘你好啊‘ 都是三個字符.

但是前面是3個字節,後面 char(5)的length話,是11個字節.

length : 查看字節.


一個英文字符算一個 bytes

一個中文字符算3個 bytes

insert into t7 values(‘abc‘,‘abc ‘)

select * from t6 where y= ‘abc   ‘

3.日期類型

create table student(
id int,
name char(5),
born_date date,#‘2017-09-06‘,
born_year year, #‘2017‘,
res_time datetime, #‘2017-09-06 10:53:23‘
class_time time  #‘10:53:23‘
);


insert into student values(1,‘ff‘,now(),now(),now(),now());

insert into student values(2,‘ff2‘,,now(),now(),now());

4.枚舉和集合

enum 枚舉: 規定一個範圍,可有多個值,但是為該字段傳值時,只能取規定範圍內的一個值.

set 集合: 規定一個範圍,但是為該字段傳值時,能取規定範圍中的一個值或多個值.

create table person(
id int primary key auto_increment,
name char(10),
sex enum(‘male‘,‘female‘),
hobbies set(‘music‘,‘read‘,‘swimming‘,‘learning English‘)
);

insert into person (name,sex enum,hobbies set) values(‘ff‘,‘male‘,‘read,swimming‘);

約束

1.not null和 default...

create table student( id int primary key auto_increment, name char(5), sex enum(‘male‘,‘female‘) not null default ‘femela‘ );

insert into student (name) values(‘egon‘);

2.unique 唯一

主鍵就是不為空且唯一.

2.1單列唯一

create table teacher( id int not null unique, name char(10));

insert into teacher values(1,‘go‘);

insert table teacher values(1,‘alex‘);

2.2多列唯一

create table service( id int primary key autoincrement, name char(10), host char(15), port int, /#constraint hostport unique(host,port) );

2.3偏移量: autoincremenoffset

create table dep( id int primary key autoincrement, name char(10) )autoincrement=10;

insert into dep(name) values (‘it‘),(‘hr‘);

2.4步長 autoincrementincrement

create table dep( id int primary key auto_increment, name char(10) );

insert into dep(name) values (‘it‘),(‘hr‘);

set session autoincrementincrement=10;#會話級,只對當前回話有效.

set global autoincrementincrement=2;#全局,對所有的會話都有效.

autoincrementoffset#偏移量(也就是從幾開始) + autoincrementincrement#步長

set session autoincrementoffset=5; set session autoincrementincrement=2;

!!!如果偏移量的值大於步長的值,則偏移量的值會被忽略!

set session autoincrementoffset=2;

set session autoincrementincrement=3;

2.5show variables like ‘%auto_in%‘; #查看變量

primary key字段的值不為空且唯一... 一個表中可以,一般都加在 id 字段上. ```

3.foreign key(附練習) #外鍵

關聯

關聯 自己的字段 references(關聯) 要關聯的地方(字段) dep(id);

foreign key (dep_id) references dep(id)

如果想指定名字 constraint fk_depid_id

先建被關聯的表,先建被關聯的表,要保證被關聯的那個表示不為空且唯一的表. 關聯: 多的關聯那個1, 多本書關聯一個出版社,那麽被關聯的就是出版社.

create table dep(

id int,

name varchar(50),

comment varchar(100)

);

然後建需要關聯的表: create into emp_info(

id int primary key auto_increment,

name varchar(20),

dep_id int,

foreign key(dep_id) references dep(id)

on delete cascade

on update cascade

);

delete from dep where id=2;

update dep set id = 301 where id=3;

以上就是一條記錄對應另一個表的多條記錄.

先給被關聯的表插入初始化記錄

一個作者可以屬於多個出版社

一本書只能屬於一個出版社

書(兩本書的信息)

出版社(1設,2設)

多本書屬於一個出版社,那麽就是多對1, 1就是需要被關聯的那個表

書這張表 foreign key了出版社那張表的 id 字段.

出版社是需要被關聯的那個1.
create table press(
id int primary key auto_increment,
name varchar(20) not null
);


create table book(
id int primary key auto_increment,
name varchar(20),
press_id int not null,
foreign key(press_id) references press(id)
on delete cascade
on update cascade


insert into press(name) values(‘人出版社‘),(‘民出版社‘);

insert into book(name,press_id) values (‘pyjy‘,1),(‘ons‘,2),(‘go‘,2),(‘python‘,2),(‘java‘,3);



一個作者可以寫多本書,一本書可以有多個作者,他倆相互對應

create table author(
id int primary key  auto_increment,
name varchar(20)
);


create table book2author(
id int not null unique auto_increment,
book_id int not null,
author_id int not null,
foreign key(book_id) references book(id)
on delete cascade
on update cascade,
foreign key(author_id) references author(id)
on delete cascade
on update cascade,

primary key (book_id,author_id)
);

insert into author(name) values(‘ff‘),(‘jm‘),(‘by‘);

insert into book2author(book_id,author_id) values(1,1),
(1,2),
(1,3),
(1,4),
(1,5),
(1,6),
(2,1),
(2,6),
(3,4),
(3,5),
(3,6),
(4,1);


每個作者與自己的代表作如下
1 ff: 
      1 九陽神功
      2 九陰真經
      3 九陰白骨爪
      4 獨孤九劍
      5 降龍十巴掌
      6 葵花寶典
      
2 jm: 
      1 九陽神功
      6 葵花寶典

3 by:
      4 獨孤6劍
      5 降龍7巴掌
      6 玫瑰花花寶典

MySQL 數據類型和約束(外鍵是重點🙄)