目录
练习一:创建数据库company,在库中创建两个表offices和employees表
1. 创建数据库company,在库中创建两个表offices和employees表
2. 查看该库下几个表以及查看两张表结构。
3. 将表employees的mobile字段修改到officeCode字段后面。
4. 将表employees的birth字段改名为employee_birth。
5. 修改sex字段,数据类型为CHAR(1),非空约束。
6. 删除字段note。
7. 增加字段名favoriate_activity,数据类型为VARCHAR(100)。
8. 删除表offices。
9. 将表employees名称修改为employees_info。
练习二:创建数据库Market,在Market中创建数据表customers
1. 创建数据表customers,在c_num字段上添加主键约束和自增约束,在c_birth字段上添加非空约束。
2. 将c_contact字段插入c_birth字段后面。
3. 将c_name字段数据类型改为VARCHAR(70)。
4. 将c_contact字段改名为c_phone。
5. 增加c_gender字段,数据类型为CHAR(1)。
6. 将表名修改为customers_info。
7. 删除字段c_city。
8. 修改数据表的存储引擎为MyISAM。
9. 在Market中创建数据表orders。
10. 创建数据表orders,在o_num字段上添加主键约束和自增约束,在 c_id字段上添加外键约束,关联customers表中的主键c_num。
11. 删除orders表的外键约束,然后删除表customers。
练习三:创建数据库MySchool
1. 创建数据库MySchool
2. 创建以下数据表。 注意:标识列,都是主键自增的。
offices表结构:
employees表结构:
-- 1. 创建数据库company,在库中创建两个表offices和employees表
create database company;
use company;
create table offices(
officeCode int(10) primary key,
city varchar(50) not null,
address varchar(50),
country varchar(50) not null,
postalCode varchar(15) unique
);
-- 方法一建库时直接添加主键和外键约束
create table employees(
employeeNumber int(11) primary key auto_increment,
lastName varchar(50) not null,
firstName varchar(50) not null,
mobile varchar(25) unique,
officeCode int(10) not null,
jobTitle varchar(50) not null,
birth datetime not null,
note varchar(255),
sex varchar(5),
foreign key(officeCode) references offices(officecode)
);
-- 方法2:先建库后添加主键,外键约束
-- drop table employees;
-- create table employees(
-- employeeNumber int(11),
-- lastName varchar(50) not null,
-- firstName varchar(50) not null,
-- mobile varchar(25) unique,
-- officeCode int(10) not null,
-- jobTitle varchar(50) not null,
-- birth datetime not null,
-- note varchar(255),
-- sex varchar(5)
-- );
-- 设置主键/外键
-- alter table 表名 add constraint 主键名 primary key(字段名)
-- alter table 表名 modify 字段名 int primary key;
-- alter table employees add constraint pk_en primary key(employeeNumber);
-- alter table employees modify employeeNumber int(11) primary key auto_increment;
-- alter table 表名 add constraint 外键名 foreign key(字段名) references 外键连接的表名(外键连接的字段名);
-- alter table employees add constraint fk_eo foreign key(officeCode) references offices(officeCode);
-- 2. 查看该库下几个表以及查看两张表结构。
show tables; -- 查看当前数据库中的所以数据表
desc employees; -- desc 表名:查看该表结构
desc offices;
employees表结构:
offices表结构:
修改字段位置语法:alter table 表名 modify 字段名 字段类型 after 其他字段名;
-- 3. 将表employees的mobile字段修改到officeCode字段后面。
alter table employees modify mobile varchar(25) after officeCode;
desc employees;
结果:
修改字段名语法:alter table 表名 change 旧字段名 新字段名 新字段类型;
-- 4. 将表employees的birth字段改名为employee_birth。
alter table employees change birth employee_birth datetime;
desc employees;
结果:
修改字段数据类型、约束语法:alter table 表名 modify 字段名 字段类型 约束;
非空约束:not null
-- 5. 修改sex字段,数据类型为CHAR(1),非空约束。
alter table employees modify sex char(1) not null;
desc employees;
结果:
删除字段语法:alter table 表名 drop 字段名;
-- 6. 删除字段note。
alter table employees drop note;
desc employees;
结果:
增加字段语法:alter table 表名 add 字段名 字段数据类型;
-- 7. 增加字段名favoriate_activity,数据类型为VARCHAR(100)。
alter table employees add favoriate_activity varchar(100);
desc employees;
结果:
删除数据表语法:drop table 表名;
注意:若有外键关联,删除会报错,需先删除外键,或直接先删除有外键关联的表
删除外键约束语法:alter table 表名 drop foreign key 外键名;
-- 8. 删除表offices。
-- 先删除外键关联
alter table employees drop foreign key employees_ibfk_1;
-- 再删除表
drop table offices;
结果:
修改数据表名语法:alter table 旧表名 rename to 新表名;
-- 9. 将表employees名称修改为employees_info。
alter table employees rename to employees_info;
show tables;
结果:
create database Market;
use Market;
-- 1. 创建数据表customers,在c_num字段上添加主键约束和自增约 束,在c_birth字段上添加非空约束。
create table customers(
c_num int(11) primary key auto_increment,
c_name varchar(50),
c_contact varchar(50),
c_city varchar(50),
c_birth datetime not null
);
desc customers;
结果:
修改字段位置语法:alter table 表名 modify 字段名 字段类型 after 其他字段名;
-- 2. 将c_contact字段插入c_birth字段后面。
alter table customers modify c_contact varchar(50) after c_birth;
desc customers;
结果:
修改字段数据类型语法:alter table 表名 modify 字段名 字段类型;
-- 3. 将c_name字段数据类型改为VARCHAR(70)。
alter table customers modify c_name varchar(70);
desc customers;
结果:
修改字段名语法:alter table 表名 change 旧字段名 新字段名 新字段数据类型;
-- 4. 将c_contact字段改名为c_phone。
alter table customers change c_contact c_phone varchar(50);
desc customers;
结果:
增加字段语法:alter table 表名 add 字段名 字段数据类型;
-- 5. 增加c_gender字段,数据类型为CHAR(1)。
alter table customers add c_gender char(1);
desc customers;
结果:
修改数据表名语法:alter table 旧表名 rename to 新表名;
-- 6. 将表名修改为customers_info。
alter table customers rename to customers_info;
show tables;
结果:
删除字段语法:alter table 表名 drop 字段名;
-- 7. 删除字段c_city。
alter table customers_info drop c_city;
desc customers_info;
结果:
修改数据表的存储引擎语法:alter table 表名 engine=MyISAM;
查看存储引擎:show create table 表名;
-- 8. 修改数据表的存储引擎为MyISAM。
alter table customers_info engine=MyISAM;
show create table customers_info;
结果:
添加外键语法:alter table 表名 add constraint 外键名 foreign key(字段名) references 外键连接的表名(外键连接的字段名);
注意:在mysql中,建立外键关联,关联表必须是使用innodb,将engine修改为innodb即可
-- 9. 在Market中创建数据表orders。
create table orders(
o_num int(11) primary key auto_increment,
o_date date,
c_id int(11)
);
-- 10.创建数据表orders,在o_num字段上添加主键约束和自增约束,在 c_id字段上添加外键约束,关联customers表中的主键c_num。
alter table customers_info engine=InnoDB;
-- alter table 表名 add constraint 外键名 foreign key(字段名) references 外键连接的表名(外键连接的字段名);
alter table orders add constraint fk_order_id foreign key(c_id) references customers_info(c_num);
desc orders;
结果:
删除外键约束语法:alter table 表名 drop foreign key 外键名;
删除表:删除数据表语法:drop table 表名;
-- 11.删除orders表的外键约束,然后删除表customers。
alter table orders drop foreign key fk_order_id;
drop table customers_info;
show tables;
结果:
-- 1. 创建数据库MySchool
create database MySchool;
use MySchool;
结果:
1> 年级表:Grade表
-- 1> 年级表:Grade表
create table Grade(
GradeId int primary key auto_increment,
GradeName varchar(50) not null
);
desc Grade;
结果:
2> 学生表: Student表
-- 2> 学生表: Student表
create table Student(
StudentNo varchar(50),
LoginPwd varchar(50),
StudentName varchar(50),
Sex char(2),
GradeId int,
Phone varchar(255),
Address varchar(255),
BornDate datetime,
Email varchar(50)
);
desc Student;
结果:
3> 科目表:Subjects表
-- 3> 科目表:Subjects表
create table Subjects(
SubjectId int primary key auto_increment,
SubjectName varchar(20) not null,
ClassHour int not null,
GradeId int not null
);
desc Subjects;
结果:
4> 成绩表:Result表
-- 4> 成绩表:Result表
create table Result(
Id int primary key auto_increment,
StudentNo varchar(50) not null,
SubjectId int not null,
StudentResult int,
ExamDate datetime not null
);
desc Result;
结果:
5> 表关系
分析:
Student中依赖于Grade,Subjects也依赖于Grade,Result依赖于Student、Subjects
添加外键语法:alter table 表名 add constraint 外键名 foreign key(字段名) references 外键连接的表名(外键连接的字段名);
注意:
MySQL数据库外键的创建,需要满足以下四个条件,否则会被MySQL数据库拒绝:
1、创建外键的表和列存在
2、组成外键的列存在索引
3、必须指定数据表的引擎为InnoDB
4、外键字段和关联字段,数据类型必须一致
-- 5> 表关系
-- alter table 表名 add constraint 外键名 foreign key(字段名) references 外键连接的表名(外键连接的字段名);
alter table Student add constraint fk_stu_gid foreign key(GradeId) references Grade(GradeId);
alter table Subjects add constraint fk_sub_gid foreign key(GradeId) references Grade(GradeId);
alter table Student add constraint pk_stuno primary key(StudentNo); -- 为StudentNo列添加索引
alter table Result add constraint fk_res_stuno foreign key(StudentNo) references Student(StudentNo);
alter table Result add constraint fk_res_subid foreign key(SubjectId) references Subjects(SubjectId);
结果: