02 mysql 基礎二 (進階)
阿新 • • 發佈:2018-06-11
電話 不能 ons 最快 uniq 插入數據 舉例 unique rom
階段一 表約束
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 基礎二 (進階)