目录
练习一:创建数据库company,在库中创建两个表offices和employees表
1. 创建数据库company,在库中创建两个表offices和employees表
3. 将表employees的mobile字段修改到officeCode字段后面。
4. 将表employees的birth字段改名为employee_birth。
7. 增加字段名favoriate_activity,数据类型为VARCHAR(100)。
9. 将表employees名称修改为employees_info。
练习二:创建数据库Market,在Market中创建数据表customers
1. 创建数据表customers,在c_num字段上添加主键约束和自增约束,在c_birth字段上添加非空约束。
3. 将c_name字段数据类型改为VARCHAR(70)。
10. 创建数据表orders,在o_num字段上添加主键约束和自增约束,在 c_id字段上添加外键约束,关联customers表中的主键c_num。
11. 删除orders表的外键约束,然后删除表customers。
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);
结果:
