1. 程式人生 > >02 mysql 基礎二 (進階)

02 mysql 基礎二 (進階)

電話 不能 ons 最快 uniq 插入數據 舉例 unique rom

mysql 基礎二

階段一 表約束

1、not null 非空約束

例子:

create table tb1(
    id int,
    name varchar(20) not null
);

註意 空字符不等於null

#手動,添加非空約束 (必須這個字段,沒有NULL值)
mysql> alter table tb1
    -> modify id int not null;
 
# 取消非空約束
mysql> alter table tb1
    -> modify id int ;
2、unique key 唯一約束

例子:

create table tb2(
    id int unique key,
    name varchar(
20) ); ? # 確保字段中的值的唯一


#添加唯一約束
?
mysql> alter table tb2
    -> add unique key(name)
    ->;


#刪除唯一約束
?
mysql> alter table tb2
    -> drop key name;
3、主鍵約束 primary key

主鍵的作用:可以唯一標識一條數據,每張表裏面只能有一個主鍵,。主鍵的主要目的是幫助MySQL以最快的速度查找到表中的某一條信息

主鍵特性:非空且唯一。當表裏沒有主鍵的時,第一個出現的非空且為唯一的列,被當成主鍵。

例子:

create table tb3( 
   id int primary key,
   name varchar(
20) not null );


#刪除主鍵約束
?
mysql -> alter table tb3
      -> drop primary key;
4、自增長 auto_increment

auto_increment :自動編號,一般與主鍵組合使用。一個表裏面只有一個自增默認情況下,起始值為1,每次的增量為1。

例子:

create table tb5(
   id intprimary key auto_increment,
   name varchar(20)
)auto_increment=100;


#刪除自動增長
?
mysql> alter table tb5
    
-> modify id int;


#增加自動增長auto_increment
?
mysql> alter table tb5
    -> modify id int auto_increment;
5、默認約束 default

default :初始值設置,插入記錄時,如果沒有明確為字段賦值,則自動賦予默認值。

例子:

create table tb6(
  id int primary key auto_increment,
  name varchar(20) not null,
  age int not null default 18
);


# 刪除default
?
mysql> alter table tb6
    -> modify age int;


# 手動添加default
?
mysql> alter table tb6 
    -> modify age int default 20;
6、外鍵約束 foreign key

外鍵約束 :保持數據一致性,完整性實現一對多關系。

外鍵必須關聯到鍵上面去,一般情況是,關聯到另一張表的主鍵

(因為一個表只存一類信息。用外鍵來做參照,保證數據的一致性,可以減少數據余)

##表a
?
create table a( 
   a_id int primary key auto_increment,
   a_name varchar(20) not null
);
?
insert into a values(1,a1),(2,a2);
?
##表b
?
create table b(
   b_id int primary key,
   b_name varchar(20) not null,
   fy_id int not null,
   constraint AB_idforeign key(fy_id)references  a(a_id)
);
?
insert into b value(1,aa,2);


#刪除外鍵
?
alter table  b drop foreign key AB_id;


#增加外鍵
?
mysql> alter table b
    -> add constraint AB_id foreign key(fy_id) references  a(a_id);

# B表中的fy_id 字段,只能添加 a_id中已有的數據。
# A表中a_id 被參照的數據,不能被修改和刪除

階段二 表關系

1、一對一關系 (學生詳細)

一對一 : 用外鍵的方式,把兩個表的主鍵關聯

舉例,學生表中有學號、姓名、學院,但學生還有些比如電話,家庭住址等比較私密的信息,這些信息不會放在學生表當中,會新建一個學生的詳細信息表來存放。這時的學生表和學生的詳細信息表兩者的關系就是一對一的關系,因為一個學生只有一條詳細信息。用主鍵加主鍵的方式來實現這種關系。

# 學生表
mysql> create table student(
    -> s_id int primary key,
    -> sex varchar(20),
    -> age int);
# 插入數據 
mysql> insert into student value(1,,22);
?
# 學生詳細表
mysql> create table student_x(
    -> id int primary key,
    -> name varchar(20),
    -> foreign key (id) references student(s_id)
    -> );
# 插入數據
mysql> insert into student_x value(1,zcm);
 
# 查看
mysql> select * from student_x;
+----+------+
| id | name |
+----+------+
|  1 | zcm  |
+----+------+
?
mysql> select * from student;
+------+------+------+
| s_id | sex  | age  |
+------+------+------+
|    1 | nan  |   22 |
2、一對多關系 (學生所屬學院)

? 舉例,通常情況下,學校中一個學院可以有很多的學生,而一個學生只屬於某一個學院。學院與學生之間的關系就是一對多的關系,通過外鍵關聯來實現這種關系。

註意:學生表中 只能添加 ,已有的學院id

##創建學院表
create table department( 
   d_id int primary key auto_increment,  # 學院id
   d_name varchar(20) not null      # 學院名
);
?
##創建學生表
create table student(
   s_id int primary key auto_increment,   # 學生id
   s_name varchar(20) not null,                     # 學生名字
   dept_id int not null,            #  所屬學院 id
   constraint SD_id foreign key(dept_id) references department(d_id)   #外鍵
);
?
# 插入數據
insert into department values(1,外語學院),(2,計算機學院);
insert into student values(1,‘張三,2),(2,‘李四,1);
?
# 查看
mysql> select * from department;
+------+-----------------+
| d_id | d_name          |
+------+-----------------+
|    1 | 外語學院        |
|    2 | 計算機學院      |
+------+-----------------+
?
mysql> select * from student_1;
+------+--------+---------+
| s_id | s_name | dept_id |
+------+--------+---------+
|    1 | 張三   |       2 |
|    2 | 李四   |       1 |
+------+--------+---------+
3、 多對多關系 (學生選課)

? 舉例,學生要報名選修課,一個學生可以報名多門課程,一個課程有很多的學生報名,那麽學生表和課程表兩者就形成了多對多關系。對於多對多關系,需要創建中間表 實現。

# 建立學生表
mysql> create table student_d(
    -> s_id int primary key auto_increment,
    -> s_name varchar(20) not null
    -> );
?
# 建立課程表
mysql> create table cours(
    -> cours_id int primary key auto_increment,
    -> cours_name varchar(20) not null
    -> );
?
# 選課表(中間表)
mysql> create table ele(
    -> s_id int,        # 用來記錄學生id
    -> cours_id int,    # 用來記錄課程id
    -> primary key(s_id,cours_id),      # 聯合主鍵
    -> foreign key(s_id) references student(s_id),      # 關聯學生id
    -> foreign key(cours_id) references cours(cours_id)     # 關聯課程id
    -> );
?
# 插入數據
insert into student_d values(1,張三),(2,李四),(3,王六);
insert into cours values(1,python編程),(2,大學英語),(3,音樂鑒賞);
insert into ele values(1,3),(2,1),(3,2);
?
# 查看
mysql> select * from student_d;
+------+--------+
| s_id | s_name |
+------+--------+
|    1 | 張三   |
|    2 | 李四   |
|    3 | 王六   |
+------+--------+
3 rows in set (0.00 sec)
?
mysql> select * from cours;
+----------+--------------+
| cours_id | cours_name   |
+----------+--------------+
|        1 | python編程   |
|        2 | 大學英語     |
|        3 | 音樂鑒賞     |
+----------+--------------+
3 rows in set (0.00 sec)
?
mysql> select * from ele;
+------+----------+
| s_id | cours_id |
+------+----------+
|    2 |        1 |
|    3 |        2 |
|    1 |        3 |
+------+----------+
3 rows in set (0.00 sec)

02 mysql 基礎二 (進階)