mysql综合案例 数据表的基本操作

mysql综合案例 数据表的基本操作

创建修改删除表,掌握数据表的基本操作

创建数据库company,按下表创建两个table名为offices和employees

offices表结构

字段名数据类型主键外键非空唯一自增
officeCodeint(10)
cityvarchar(50)
addressvarchar(50)
countryvarchar(50)
postalCodevarchar(15)

employees表结构

字段名数据类型主键外键非空唯一自增
employeeNumberint(11)
lastNamevarchar(50)
firstNamevarchar(50)
mobilevarchar(25)
officeCodeint(10)
jobTitlevarchar(50)
birthdatetime
notevarchar(255)
sexvarchar(5)

操作过程:

1.创建库

mysql> create database company;

2.创建表

创建表offices

mysql> use company;
mysql> create table offices(
    -> officeCode int(10) primary key not null unique,
    -> city varchar(50) not null,
    -> address varchar(50),
    -> conutry varchar(50) not null,
    -> postalCode varchar(15) unique
    -> );

mysql> desc offices;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| officeCode | int(10)     | NO   | PRI | NULL    |       |
| city       | varchar(50) | NO   |     | NULL    |       |
| address    | varchar(50) | YES  |     | NULL    |       |
| conutry    | varchar(50) | NO   |     | NULL    |       |
| postalCode | varchar(15) | YES  | UNI | NULL    |       |
+------------+-------------+------+-----+---------+-------+

创建表employees

mysql> create table employees(
    -> employeeNumber int(11) primary key not null unique 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),
    -> constraint office_fk foreign key(officeCode) references offices(officeCode)
    -> );
    
mysql> desc employees;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| employeeNumber | int(11)      | NO   | PRI | NULL    | auto_increment |
| lastName       | varchar(50)  | NO   |     | NULL    |                |
| firstName      | varchar(50)  | NO   |     | NULL    |                |
| mobile         | varchar(25)  | YES  | UNI | NULL    |                |
| officeCode     | int(10)      | NO   | MUL | NULL    |                |
| jobTitle       | varchar(50)  | NO   |     | NULL    |                |
| birth          | datetime     | NO   |     | NULL    |                |
| note           | varchar(255) | YES  |     | NULL    |                |
| sex            | varchar(5)   | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

3.将表employees的mobile字段修改到officeCode后面

mysql> alter table employees modify mobile varchar(25) not null unique after officeCode;
mysql> desc employees;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| employeeNumber | int(11)      | NO   | PRI | NULL    | auto_increment |
| lastName       | varchar(50)  | NO   |     | NULL    |                |
| firstName      | varchar(50)  | NO   |     | NULL    |                |
| officeCode     | int(10)      | NO   | MUL | NULL    |                |
| mobile         | varchar(25)  | NO   | UNI | NULL    |                |
| jobTitle       | varchar(50)  | NO   |     | NULL    |                |
| birth          | datetime     | NO   |     | NULL    |                |
| note           | varchar(255) | YES  |     | NULL    |                |
| sex            | varchar(5)   | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

4.将表employees的birth字段改名为employee_birth

mysql> alter table employees change birth employee_birth datetime not null;
mysql> desc employees;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| employeeNumber | int(11)      | NO   | PRI | NULL    | auto_increment |
| lastName       | varchar(50)  | NO   |     | NULL    |                |
| firstName      | varchar(50)  | NO   |     | NULL    |                |
| officeCode     | int(10)      | NO   | MUL | NULL    |                |
| mobile         | varchar(25)  | NO   | UNI | NULL    |                |
| jobTitle       | varchar(50)  | NO   |     | NULL    |                |
| employee_birth | datetime     | NO   |     | NULL    |                |
| note           | varchar(255) | YES  |     | NULL    |                |
| sex            | varchar(5)   | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

5.修改sex字段,数据类型为char(1),非空约束

mysql> alter table employees modify sex char(1) not null;
mysql> desc employees;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| employeeNumber | int(11)      | NO   | PRI | NULL    | auto_increment |
| lastName       | varchar(50)  | NO   |     | NULL    |                |
| firstName      | varchar(50)  | NO   |     | NULL    |                |
| officeCode     | int(10)      | NO   | MUL | NULL    |                |
| mobile         | varchar(25)  | NO   | UNI | NULL    |                |
| jobTitle       | varchar(50)  | NO   |     | NULL    |                |
| employee_birth | datetime     | NO   |     | NULL    |                |
| note           | varchar(255) | YES  |     | NULL    |                |
| sex            | char(1)      | NO   |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

6.删除字段note

mysql> alter table employees drop note;mysql> desc employees;
+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| employeeNumber | int(11)     | NO   | PRI | NULL    | auto_increment |
| lastName       | varchar(50) | NO   |     | NULL    |                |
| firstName      | varchar(50) | NO   |     | NULL    |                |
| officeCode     | int(10)     | NO   | MUL | NULL    |                |
| mobile         | varchar(25) | NO   | UNI | NULL    |                |
| jobTitle       | varchar(50) | NO   |     | NULL    |                |
| employee_birth | datetime    | NO   |     | NULL    |                |
| sex            | char(1)     | NO   |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+

7.增加字段名favoriate_activity,数据类型为varchar(100)

mysql> alter table employees add favoriate_activity varchar(100);
mysql> desc employees;
+--------------------+--------------+------+-----+---------+----------------+
| Field              | Type         | Null | Key | Default | Extra          |
+--------------------+--------------+------+-----+---------+----------------+
| employeeNumber     | int(11)      | NO   | PRI | NULL    | auto_increment |
| lastName           | varchar(50)  | NO   |     | NULL    |                |
| firstName          | varchar(50)  | NO   |     | NULL    |                |
| officeCode         | int(10)      | NO   | MUL | NULL    |                |
| mobile             | varchar(25)  | NO   | UNI | NULL    |                |
| jobTitle           | varchar(50)  | NO   |     | NULL    |                |
| employee_birth     | datetime     | NO   |     | NULL    |                |
| sex                | char(1)      | NO   |     | NULL    |                |
| favoriate_activity | varchar(100) | YES  |     | NULL    |                |
+--------------------+--------------+------+-----+---------+----------------+

8.删除表office

在创建表employess时,设置了表的外键,该表关联了其父表的officeCode主键。

删除关联表时,要先删除子表employees的外键约束,才能删除父表。

所以先要删除employees表的外键约束。

下面是当时创建employees的语句:

employees | CREATE TABLE `employees` (
  `employeeNumber` int(11) NOT NULL AUTO_INCREMENT,
  `lastName` varchar(50) NOT NULL,
  `firstName` varchar(50) NOT NULL,
  `officeCode` int(10) NOT NULL,
  `mobile` varchar(25) NOT NULL,
  `jobTitle` varchar(50) NOT NULL,
  `employee_birth` datetime NOT NULL,
  `sex` char(1) NOT NULL,
  `favoriate_activity` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`employeeNumber`),
  UNIQUE KEY `employeeNumber` (`employeeNumber`),
  UNIQUE KEY `mobile` (`mobile`),
  UNIQUE KEY `mobile_2` (`mobile`),
  KEY `office_fk` (`officeCode`),
  CONSTRAINT `office_fk` FOREIGN KEY (`officeCode`) REFERENCES `offices` (`officeCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
8.1 先删除外键约束
mysql> alter table employees drop foreign key office_fk;
8.2 删除表office
mysql> drop tables offices;

9.修改表employees的存储引擎为myisam

先查看一下修改前的引擎

mysql> show create table employees;
mysql> alter table employees engine=myisam;

10.将表employees改名为employees_info

mysql> alter table employees rename employees_info;

11.习题练习

11.1 创建数据库market,在market下建表customers如下:
字段名数据类型主键外键非空唯一自增
c_numint(11)
c_namevarchar(50)
c_contactvarchar(50)
c_cityvarchar(50)
c_birthdatetime

(1)创建数据库market

(2)创建数据表customer,在c_num字段上添加主键约束和自增约束,在c_birth字段添加非空约束

以下操作要在建完表之后进行

(3)将c_contact字段插入到c_birth字段后面

(4)将c_name字段数据类型改为varchar(70)

(5)将c_contact字段改名为c_phone

(6)增加c_gender字段,数据类型为char(1)

(7)将表名修改为customers_info

(8)删除字段c_city

(9)修改数据表的存储引擎为myisam

操作如下:

(1)创建数据库market

(2)创建数据表customer,在c_num字段上添加主键约束和自增约束,在c_birth字段添加非空约束

mysql> create table customers(
    -> c_num int(11) primary key not null unique auto_increment,
    -> c_name varchar(50),
    -> c_contact varchar(50),
    -> c_city varchar(50),
    -> c_birth datetime not null
    -> );

以下操作要在建完表之后进行,练习嘛

(3)将c_contact字段插入到c_birth字段后面

mysql> alter table customers modify c_contact varchar(50) after c_birth;

(4)将c_name字段数据类型改为varchar(70)

#下面两种方式均可
mysql> alter table customers change c_name c_name varchar(70);
mysql> alter table customers modify c_name varchar(100);

(5)将c_contact字段改名为c_phone


mysql> alter table customers change c_contact c_phone varchar(50) not null;

(6)增加c_gender字段,数据类型为char(1)

mysql> alter table customers add c_gender varchar(1);

(7)将表名修改为customers_info

mysql> alter table customers rename customers_info;

(8)删除字段c_city

mysql> alter table customers_info drop c_city;

(9)修改数据表的存储引擎为myisam

mysql> show create table customers_info\G;
mysql> alter table customers_info engine=myisam;
11.2 在market中创建表orders,如下:
字段名数据类型主键外键非空唯一自增
o_numint(11)
o_datedate
c_idvarchar(50)

(1)建表orders,在o_num字段上添加主键约束和自增约束,在c_id字段上添加外键约束,关联customers_info中的主键c_num

(2)删除orders表的外键约束,然后删除表customers_info

操作如下:

(1)建表orders,在o_num字段上添加主键约束和自增约束,在c_id字段上添加外键约束,关联customers_info中的主键c_num

务必注意两键之间的数据类型一致!!!

mysql> create table orders(
    -> o_num int(11) primary key not null unique auto_increment,
    -> o_date date,
    -> c_id int(11) not null,
    -> constraint customers_info_fk foreign key(c_id) references customers_info(c_id)
    -> );

mysql> desc orders;
+--------+---------+------+-----+---------+----------------+
| Field  | Type    | Null | Key | Default | Extra          |
+--------+---------+------+-----+---------+----------------+
| o_num  | int(11) | NO   | PRI | NULL    | auto_increment |
| o_date | date    | YES  |     | NULL    |                |
| c_id   | int(11) | NO   | MUL | NULL    |                |
+--------+---------+------+-----+---------+----------------+

(2)删除orders表的外键约束,然后删除表customers_info

#先查看以下外键名
mysql> show create table orders;

在这里插入图片描述

#删除外键
mysql> alter table orders drop foreign key customers_info_fk;
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河 静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值