一、創建表
語法格式:
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', '123456@qq.com', 1), (2, '關羽', '男', '1983-02-10', '2345678@qq.com', 2), (3, '張飛', '男', '1984-05-10', '5645678@qq.com', 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 那么就需要更改列的名稱 。
修改字段名稱
將sex字段改為gender
ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段類型 約束條件
ALTER TABLE t_student CHANGE sex gender CHAR(2) NOT NULL DEFAULT '男';
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', '123456@qq.com', 1), (1, '關羽', '男', '1983-02-10', '2345678@qq.com', 2), (2, '劉備', '男', '1984-05-10', '5645678@qq.com', 3), (1, '劉備', '男', '1990-05-10', '3455678@qq.com', 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 字段值。
constraint 約束的意思。
練習:建立學生和班級表之間的連接
首先建立班級表 t_classes ,
constraint pk_classes_id primary key(classes_id) 把 主鍵(classes_id) 作為約束鍵 。
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 中加入外鍵約束
constraint fk_classes_id foreign key(classes_id) references t_classes(classes_id) 在 t_student 表中把 classes_id 作為約束外鍵。
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) )
存在外鍵的表就是子表,參照的表就是父表,所以存在一個父子關系,也就是主從關系,主表就是班級表,從表就是學生表。