1. 程式人生 > 其它 >003、建立表,新增約束

003、建立表,新增約束

一、建立表

語法格式:
create table tableName(
 columnName dataType(length),
 ………………..
 columnName dataType(length)
);

# ----------------------- 14、建立表 ------------------------

use bjpowernode;
drop table if exists t_student;

create table t_student(
student_id int(10) primary key auto_increment,
student_name varchar(
20) not null, sex char(2), birthday date, email varchar(30), classes_id int(3) ); # 向 t_student 表中新增資料 insert into t_student (student_id, student_name, sex, birthday, email, classes_id) values (1, '劉備', '', '1980-01-10', '[email protected]', 1), (2, '關羽', '', '1983-02-10', '[email protected]', 2), (3, '張飛', '
', '1984-05-10', '[email protected]', 3) ; select * from t_student;

二、增加/刪除/修改表結構

  採用 alter table 來增加/刪除/修改表結構,不影響表中的資料 a、新增欄位 如:需求發生改變,需要向 t_student 中加入聯絡電話欄位,欄位名稱為:contatct_tel 型別為 varchar(40)
alter table t_student add contact_tel varchar(40);
b、修改欄位 如:student_name 無法滿足需求,長度需要更改為 100
alter table t_student modify student_name varchar(100) ;
如 sex 欄位名稱感覺不好,想用 gender 那麼就需要更改列的名稱 。 c、刪除欄位 如:刪除聯絡電話欄位
alter table t_student drop contact_tel;

三、建立表加入約束

常見的約束

  a) 非空約束,not null   b) 唯一約束,unique   c) 主鍵約束,primary key   d) 外來鍵約束,foreign key   e) 自定義檢查約束,check(不建議使用)(在 mysql 中現在還不支援) a、非空約束,not null 非空約束,針對某個欄位設定其值不為空,如:學生的姓名不能為空。
use bjpowernode;
drop table if exists t_student;

create table t_student(
student_id int(10) primary key auto_increment,
student_name varchar(20) not null,
sex char(2),
birthday date,
email varchar(30),
classes_id int(3)
);
b、唯一約束,unique 唯一性約束,它可以使某個欄位的值不能重複,如:email 不能重複
use bjpowernode;
drop table if exists t_student;

create table t_student(
student_id int(10) primary key auto_increment,
student_name varchar(20) not null,
sex char(2),
birthday date,
email varchar(30) unique,
classes_id int(3)
);
c、兩個欄位聯合唯一約束
create table t_student(
student_id int(10),
student_name varchar(20) not null,
sex char(2),
birthday date,
email varchar(30) unique,
classes_id int(3),
unique (student_id,student_name)  # 兩個欄位聯合唯一
);
兩個欄位聯合唯一時,兩個欄位的值都相同時,才作為唯一。 如下第2行和第5行的 id 為 1 和 名字 為劉備, 都相同才作為唯一約束。插入資料時會報錯。
insert into t_student (student_id, student_name, sex, birthday, email, classes_id) values 
(1, '劉備', '', '1980-01-10', '[email protected]', 1),
(1, '關羽', '', '1983-02-10', '[email protected]', 2),
(2, '劉備', '', '1984-05-10', '[email protected]', 3),
(1, '劉備', '', '1990-05-10', '[email protected]', 4)
;
d、各自具有唯一性
create table t_student(
student_id int(10) unique,        # 各自具有唯一性
student_name varchar(20) unique not null,        # 各自具有唯一性
sex char(2),
birthday date,
email varchar(30) unique,
classes_id int(3)
);
e、外來鍵約束,foreign key 外來鍵主要是維護表之間的關係的,主要是為了保證參照完整性,如果表中的某個欄位為外來鍵欄位,那麼該欄位的值必須來源於參照的表的主鍵,如:emp 中的 deptno 值必須來源於 dept 表中的 deptno 欄位值。 練習:建立學生和班級表之間的連線 首先建立班級表 t_classes
drop table if exists t_classes;
create table t_classes(
classes_id int(3),
classes_name varchar(40),
constraint pk_classes_id primary key(classes_id)
)
在 t_student 中加入外來鍵約束
drop table if exists t_student;
create table t_student(
student_id int(10),
student_name varchar(20),
sex char(2),
birthday date,
email varchar(30),
classes_id int(3),
constraint student_id_pk primary key(student_id),
constraint fk_classes_id foreign key(classes_id) references t_classes(classes_id) 
)
存在外來鍵的表就是子表,參照的表就是父表,所以存在一個父子關係,也就是主從關係,主表就是班級表,從表就是學生表。