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', '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) 
)
存在外鍵的表就是子表,參照的表就是父表,所以存在一個父子關系,也就是主從關系,主表就是班級表,從表就是學生表。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM