mysql表相關操做

表的完整性約束翻譯

約束條件與數據類型的寬度同樣,都是可選參數ip

做用:用於保證數據的完整性和一致性內存

主要分爲:rem

not null  標識該字段不能爲空innodb

default   爲該字段設置默認值table

unsigned  無符號date

zerofill   使用0填充service

auto_increment  標識該字段的自動增加(整數類型,並且爲主鍵)數據類型

primary key   標識該字段爲該表的主鍵,能夠惟一的標識記錄im

foreign key   標識該字段爲該表的外鍵

unique key    標識該字段的值是惟一的

 

1、not null與default

create table t1(

         id int primary key auto_increment,

         name varchar(16) not null,

         sex enum(‘nale’,’female’) not null default ‘male’

);

 

Insert into t1(name) values(‘egon’),(‘lxx’),(‘alex’);

 

2、unique key

create table t2(x int unique);

 

create table t3(

         x int,

         y varchar(5),

         unique key(x)

);

 

create table t4(

         x int,

         y varchar(5),

         constraint uni_x unique key(X)

);  # 給鍵取名

 

create table service(

         ip varchar(15),

         port int,

         unique key(ip,port)

);  # 聯合惟一

 

 

3、primary key

站在約束角度看primary key = not null unique

之後但凡建表,必須注意:

一、必須有且只有一個主鍵

二、一般是id字段被設置爲主鍵

create table t5(

         id int primary key auto_increment

);

 

# 補充存儲引擎:

create table t12(x int)engine='myisam';  #會建立三個文件

create table t13(x int)engine='innodb';   #通常都用這個,建立兩個,主鍵與數據在一個表中

create table t14(x int)engine='memory';       #內存中,服務端關機消失

create table t15(x int)engine='blackhole';   #不會有任何數據信息

 

4、foreign key:限制關聯表某一個字段的值必是來自於被關聯表的一個字段的

注意:

1.被關聯的字段必須是一個key,一般是id字段

2.建立表時:必須先創建被關聯的表,才能創建關聯表

3.插入記錄時:必須先往被關聯的表中插入記錄,才能往關聯表中插入記錄

4.刪除時:應該先刪除關聯表emp中的記錄,再刪除被關聯表對應的記錄

create table dep(

         id int primary key auto_increment,

         dname varchar(20),

         info varchar(50)

);

 

create table emp(

         id int primary key auto_increment,

         name varchar(15),

         age int,

         dep_id int,

         foreign key(dep_id) references dep(id)

         on update cascade

         on delete cascade

);

 

insert into dep(dname,info) values

         (‘IT’,’技術能力有限部門’),

         (‘sale’,’文化程度不高部門’),

         (‘HR’,’招不到人部門’);

 

 

 

insert into emp(name,age,dep_id) values

('egon',18,1),

('alex',28,2),

('wsj',38,2),

('lxx',30,1),

('xiaohou',18,3);

 

# 找兩張表的關係的竅門

emp        dep

#一、先站在左表的角度:去找左表emp的多條記錄可否對應右表dep的一條記錄

    翻譯:多個員工可否屬於一個部門

 

#二、而後站在右表的角度:去找右表dep的多條記錄可否對應左表emp的一條記錄

    翻譯:多個部門可否擁有同一名員工

 

# 多對一:結果的判斷

#一、若是隻有單向的多對一成立,那麼最終的關係就是多對一

#二、在emp表新增一個字段dep_id, 該字段外鍵關聯dep(id)

 

# 多對多:結果的判斷

#一、雙向的多對一就是多對多

#二、須要創建第三張表,有一個字段值fk左表,一個字段的值fk右表

 

create table author(

         id int primary key auto_increment,

         name varchar(16),

         age int

);

 

create table book(

         id int primary key auto_increment,

         bname varchar(20),

         price int

);

 

create table author2book(

         id int primary key auto_increment,

         author_id int,

         book_id int,

         foreign key(author_id) references author(id) on update cascade on delete cascade,

         foreign key(book_id) references book(id) on update cascade on delete cascade

);

# 一對一:無需參考竅門,左表的一條數據惟一對應右表的一條記錄

fk+unique

相關文章
相關標籤/搜索