创建数据表的语句为: CREATE TABLE。
CREATE TABLE <表名>
(
列名1,数据类型 [列级别约束条件] [默认值],
列名2,数据类型 [列级别约束条件] [默认值],
……
[表级别约束条件]
);
创建数据表的举例:(语句在cmd环境中运行)
创建数据库
mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.01 sec)
使用数据库
mysql> USE test_db;
Database changed
创建数据表:员工表tb_emp1。
mysql> CREATE TABLE tb_emp1
-> (
-> id INT(11),
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT
-> );
Query OK, 0 rows affected, 2 warnings (0.02 sec)
主键,又称主码,是表中一列或多列的组合。主键约束(Primary Key constraint)要求主键列的数据唯一,并且不允许为空。
1、单字段主键
字段名 数据类型 PRIMARY KEY [默认值]
(1)、在定义列的同时制定主键。
定义数据表tb_emp 2,其主键为id,SQL语句如下:
mysql> CREATE TABLE tb_emp2
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT
-> );
Query OK, 0 rows affected, 2 warnings (0.03 sec)
(2)、在定义完所有的列后定义制定的主键。
定义数据表tb_emp 3,其主键为id,SQL语句如下:
mysql> CREATE TABLE tb_emp3
-> (
-> id INT(11),
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected, 2 warnings (0.02 sec)
2、多字段联合主键
PRIMARY KEY [字段1, 字段2,. . ., 字段n]
主键由多个主键联合而成。
定义数据表tb_emp4,假设表中间没有主键员工的id,为了唯一确定一个员工,可以把员工的name、deptId联合起来做为主键,SQL语句如下:
mysql> CREATE TABLE tb_emp4
-> (
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> PRIMARY KEY(name,deptId)
-> );
Query OK, 0 rows affected, 1 warning (0.02 sec)
外键用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。
一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
[CONSTRAINT <外键名>] FOREIGN KEY 列名1 [ ,列名2,…]
REFERENCES <主表名> 主键列1 [ ,主键列2,…]
外键要对应其他表的主键,使两个表之间相互关联起来。外键主要启动保证数据的完整性,它不可以删除在另一个表中具有关联关系的行,保证了数据的完整性、一致性。
定义数据表tb_emp5,让它的键deptId作为外键关联到tb_dept1的主键id:
1、 创建一个部门表tb_dept1,SQL语句如下
mysql> CREATE TABLE tb_dept1
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22) NOT NULL,
-> location VARCHAR(50)
-> );
Query OK, 0 rows affected, 1 warning (0.01 sec)
2、 创建数据表tb_emp5SQL语句为
mysql> CREATE TABLE tb_emp5
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
-> );
Query OK, 0 rows affected, 2 warnings (0.01 sec)
非空约束(Not Null constraint)指字段的值不能为空。对于使用了非空约束的字段如果用户在添加数据时,没有指定值,数据库系统会报错。
字段名 数据类型 not null
定义数据表tb_emp6,指定员工的名称不能为空,SQL语句如下:
mysql> CREATE TABLE tb_emp6
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25) NOT NULL,
-> deptId INT(11),
-> salary FLOAT
-> );
Query OK, 0 rows affected, 2 warnings (0.01 sec)
唯一性约束(Unique Constraint)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
1、在定义完列之后,直接制定唯一约束
字段名 数据类型 UNIQUE
定义数据表tb_dept2,指定部门的名称唯一,SQL语句如下:
mysql> CREATE TABLE tb_dept2
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22) UNIQUE,
-> location VARCHAR(50)
-> );
Query OK, 0 rows affected, 1 warning (0.01 sec)
2、在定义完所有的列之后,制定唯一约束
[CONSTRAINT <约束名>] UNIQUE(<字段名>)
定义数据表tb_dept3,指定部门的名称唯一,SQL语句如下:
mysql> CREATE TABLE tb_dept3
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22),
-> location VARCHAR(50),
-> CONSTRAINT STH UNIQUE(name)
-> );
Query OK, 0 rows affected, 1 warning (0.01 sec)
默认约束(Default Constraint)指定某列 的默认值。
字段名 数据类型 DEFAULT 默认值
定义数据表tb_emp7,指定员工的部门编号默认为1111,SQL语句如下:
mysql> CREATE TABLE tb_emp7
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25) NOT NULL,
-> deptId INT(11) DEFAULT 1111,
-> salary FLOAT
-> );
Query OK, 0 rows affected, 2 warnings (0.01 sec)
唯一UNIQUE约束和主键PRIMARY KEY约束的区别:
一个表中可以有多个字段声明为UNIQUE,但是只能有一个PRIMARY KEY 声明。
声明为PRIMAY KEY的列不可以有空值,但是声明为UNIQUE的字段可以有空值存在。
在数据库应用中,经常希望在每次插入新记录时,系统就会自动生成字段的主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。
一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。
字段名 数据类型 AUTO_INCREMENT
定义数据表tb_emp8,指定员工的编号自动递增,SQL语句如下:
mysql> CREATE TABLE tb_emp8
-> (
-> id INT(11) PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(25) NOT NULL,
-> deptId INT(11),
-> salary FLOAT
-> );
Query OK, 0 rows affected, 2 warnings (0.01 sec)
该语句可以查看表的字段信息,其中包括:字段名、字段数据类型、是否为主键、是否有默认值等。
DESCRIBE <表名>/DESC <表名>
1、DESCRIBE
使用DESCRIBE查看表tb_dept1的表结构,SQL语句如下:
mysql> DESCRIBE tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
2、DESC
使用DESC查看表tb_emp1的表结构,SQL语句如下:
mysql> DESC tb_emp1;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
SHOW CREATE TABLE语句可以用来显示数据表的创建语句。
SHOW CREATE TABLE <表名\G>
使用SHOW CREATE TABLE查看表tb_emp1的详细信息,SQL语句如下:
使用参数’\G’之后的结果如下
mysql> SHOW CREATE TABLE tb_emp1\G;
*************************** 1. row ***************************
Table: tb_emp1
Create Table: CREATE TABLE `tb_emp1` (
`id` int DEFAULT NULL,
`name` varchar(25) DEFAULT NULL,
`deptId` int DEFAULT NULL,
`salary` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
从查询创建数据表详细的查询语句来看:使用了‘\G’可以使显示更加的清晰。
MySQL是通过ALTER TABLE语句来实现表名的修改的。
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
将数据表tb_dept3改名为tb_deptment3。
mysql> ALTER TABLE tb_dept3 RENAME tb_deptment3;
Query OK, 0 rows affected (0.01 sec)
修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成VARCHAR(30)。
1、执行修改表名操作之前,使用DESC查看tb_dept表结构,结果如下:
mysql> DESC tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
2、执行修改表名操作
mysql> ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
3、执行修改表名操作之后,使用DESC查看tb_dept表结构,结果如下:
mysql> DESC tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
可以看到数据表tb_dept1的name字段的数据类型由VARCHAR(22)修改成了VARCHAR(30)。
MySQL中修改表字段名的语法规则如下:
ALTER TABLE <表名>
CHANGE <旧字段名> <新字段名> <新数据类型>;
将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:
mysql> ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| loc | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
将数据表tb_dept1中的loc字段名称改为location,同时将数据类型变为VARCHAR(60),SQL语句如下:
mysql> ALTER TABLE tb_dept1 CHANGE loc location VARCHAR(60);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_dept1;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
在已经存在的表添加新的字段。
ALTER TABLE <表名>
ADD <新字段名> <数据类型>
[约束条件] [FIRST | AFTER 已存在字段名];
1、添加无完整性约束条件的字段
在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerId,SQL语句如下:
mysql> ALTER TABLE tb_dept1 ADD managerId INT(10);
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 1
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
2、添加有完整性约束条件的字段
在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下:
mysql> ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) not null;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
3、在数据表的第一列添加一个字段
在数据表tb_dept1中添加一个INT类型的字段column2,SQL语句如下:
mysql> ALTER TABLE tb_dept1 ADD column2 INT(11) FIRST;
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 1
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column2 | int | YES | | NULL | |
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
4、在数据表的制定的列之后添加一个字段
在数据表tb_dept1中name列后添加一个INT类型的字段column3,SQL语句如下:
mysql> ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name;
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 1
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| collumn2 | int | YES | | NULL | |
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
删除字段是将数据表中的某个字段从表中移除。
ALTER TABLE <表名> DROP <字段名>;
删除数据表tb_dept1表中的column2字段,,SQL语句如下:
mysql> ALTER TABLE tb_dept1 DROP column2;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
ALTER TABLE来改变表中字段的相对位置。
ALTER TABLE <表名>
MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
1、修改字段为数据表的第一个字段
将数据表tb_dept中的column1字段修改为表的第一个字段,SQL语句如下:
mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| column1 | varchar(12) | YES | | NULL | |
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
2、修改字段到数据表制定的列之后
将数据表tb_dept1中的column1字段插入到location字段后面,SQL语句如下:
mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER location;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| column1 | varchar(12) | YES | | NULL | |
| managerId | int | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
在MySQL中,存储引擎是指MySQL数据库中表的存储类型。可以根据自己的需要,选择不同的引擎,甚至可以为每一张表选择不同的存储引擎。
qALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;
将数据表tb_deptment3的存储引擎修改为MyISAM。
1、在修改存储引擎之前,先使用SHOW CREATE TABLE查看表tb_deptment3当前的存储引擎,结果如下。
2、修改存储引擎
mysql> ALTER TABLE tb_deptment3 ENGINE=MyISAM;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
3、在修改存储引擎之后,使用SHOW CREATE TABLE查看表tb_deptment3当前的存储引擎,结果如下。
对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系。
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>
删除数据表tb_emp9中的外键约束。
1、创建表tb_emp9,创建外键deptId关联tb_dept1表的主键id,SQL语句如下:
mysql> CREATE TABLE tb_emp9
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept1(id)
-> );
Query OK, 0 rows affected, 2 warnings (0.03 sec)
使用SHOW CREATE TABLE查看表tb_emp9的结构,结果如下:
2、删除数据表tb_emp9中的外键约束。
mysql> ALTER TABLE tb_emp9 DROP FOREIGN KEY fk_emp_dept;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
3、使用SHOW CREATE TABLE查看表删除tb_emp9中外键约束的结构,结果如下:
删除数据表tb_dept2,SQL语句如下:
mysql> DROP TABLE IF EXISTS tb_dept2;
Query OK, 0 rows affected (0.01 sec)
在数据库中创建两个关联表。
1、创建表tb_dept2,SQL语句如下:
mysql> CREATE TABLE tb_dept2
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22),
-> location VARCHAR(50)
-> );
Query OK, 0 rows affected, 1 warning (0.02 sec)
2、创建表tb_emp,SQL语句如下:
mysql> CREATE TABLE tb_emp
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept2(id)
-> );
Query OK, 0 rows affected, 2 warnings (0.03 sec)
使用SHOW CREATE TABLE命令查看表tb_emp的外键约束,结果如下:
删除被数据表tb_emp关联的数据表tb_dept2。
mysql> DROP TABLE tb_dept2;
ERROR 3730 (HY000): Cannot drop table 'tb_dept2' referenced by a foreign key constraint 'fk_emp_dept' on table 'tb_emp'.
删除会出现错误,因为存在外键的约束,主表不能直接删除。
解除子表的外键约束
mysql> ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除数据表tb_dept2;
mysql> DROP TABLE tb_dept2;
Query OK, 0 rows affected (0.01 sec)
消除外键约束后,主表就可以删除了。
创建数据库company,按照下面数据表格的要求创建两个数据表:offices和employees。
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
---|---|---|---|---|---|---|
officeCode | INT(10) | 是 | 否 | 是 | 是 | 否 |
city | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
address | VARCHAR(50) | 否 | 否 | 否 | 否 | 否 |
country | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
postalCode | VARCHAR(15) | 否 | 否 | 否 | 是 | 否 |
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
---|---|---|---|---|---|---|
employeeNumber | INT(11) | 是 | 否 | 是 | 是 | 是 |
lastName | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
firstName | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
mobile | VARCHAR(25) | 否 | 否 | 否 | 是 | 否 |
officeCode | INT(10) | 否 | 是 | 是 | 否 | 否 |
jobTile | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
birth | DATETIME | 否 | 否 | 是 | 否 | 否 |
note | VARCHAR(255) | 否 | 否 | 否 | 否 | 否 |
sex | VARCHAR(5) | 否 | 否 | 否 | 否 | 否 |
通过数据表的创建、查看、修改和删除等操作,来达到掌握有关数据表的基本操作的能力。其具体要求如下所示:
1、创建数据库company
2、创建数据表offices
3、创建数据表employees
4、将数据表employees的mobile字段修改到officeCode字段后面
5、将数据表employees的birth字段修改名称为employee_birth
6、修改sex字段的数据类型为CHAR(1),非空约束
7、删除字段note
8、增加字段名称为favorite_activity,数据类型为VARCHAR(100)
9、修改数据表employees存储引擎为MyISAM
10、将数据表employees名称修改为employees_info
11、删除数据表offices
登入数据库:
C:\WINDOWS\system32>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.29 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
创建数据库:
mysql> CREATE DATABASE company;
Query OK, 1 row affected (0.01 sec)
1、使用数据库company
mysql> USE company;
Database changed
2、创建数据表offices
mysql> CREATE TABLE offices
-> (
-> officeCode INT(10) NOT NULL UNIQUE,
-> city VARCHAR(50) NOT NULL,
-> address VARCHAR(50),
-> country VARCHAR(50) NOT NULL,
-> postalCode VARCHAR(15),
-> PRIMARY KEY(officeCode)
-> );
Query OK, 0 rows affected, 1 warning (0.01 sec)
可以看到,数据表offices已经创建成功。
mysql> CREATE TABLE employees
-> (
-> employeeNumber INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> lastName VARCHAR(50) NOT NULL,
-> firstName VARCHAR(50) NOT NULL,
-> mobile VARCHAR(25) UNIQUE,
-> officeCode INT(10) NOT NULL,
-> jobTile VARCHAR(50) NOT NULL,
-> birth DATETIME NOT NULL,
-> note VARCHAR(255),
-> sex VARCHAR(5),
-> CONSTRAINT office_fk FOREIGN KEY(officeCode) REFERENCES offices(officeCode)
-> );
Query OK, 0 rows affected, 2 warnings (0.02 sec)
可以看到,数据表employees已经创建成功。
mysql> ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER officeCode;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC employees;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| employeeNumber | int | NO | PRI | NULL | auto_increment |
| lastName | varchar(50) | NO | | NULL | |
| firstName | varchar(50) | NO | | NULL | |
| officeCode | int | NO | MUL | NULL | |
| mobile | varchar(25) | YES | UNI | NULL | |
| jobTile | varchar(50) | NO | | NULL | |
| birth | datetime | NO | | NULL | |
| note | varchar(255) | YES | | NULL | |
| sex | varchar(5) | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)
可以看到,数据表employees的mobile字段已经修改到了officeCode字段后面。
mysql> ALTER TABLE employees CHANGE birth emoloyee_birth DATETIME;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC employees;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| employeeNumber | int | NO | PRI | NULL | auto_increment |
| lastName | varchar(50) | NO | | NULL | |
| firstName | varchar(50) | NO | | NULL | |
| officeCode | int | NO | MUL | NULL | |
| mobile | varchar(25) | YES | UNI | NULL | |
| jobTile | varchar(50) | NO | | NULL | |
| emoloyee_birth | datetime | YES | | NULL | |
| note | varchar(255) | YES | | NULL | |
| sex | varchar(5) | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)
可以看到,数据表employees的birth字段已经修改名称为了employee_birth 。
mysql> ALTER TABLE employees MODIFY sex CHAR(1) NOT NULL;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC employees;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| employeeNumber | int | NO | PRI | NULL | auto_increment |
| lastName | varchar(50) | NO | | NULL | |
| firstName | varchar(50) | NO | | NULL | |
| officeCode | int | NO | MUL | NULL | |
| mobile | varchar(25) | YES | UNI | NULL | |
| jobTile | varchar(50) | NO | | NULL | |
| emoloyee_birth | datetime | YES | | NULL | |
| note | varchar(255) | YES | | NULL | |
| sex | char(1) | NO | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)
可以看到,数据表employees的sex字段的数据类型已经修改为了CHAR(1)。
mysql> ALTER TABLE employees DROP note;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC employees;
+----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+----------------+
| employeeNumber | int | NO | PRI | NULL | auto_increment |
| lastName | varchar(50) | NO | | NULL | |
| firstName | varchar(50) | NO | | NULL | |
| officeCode | int | NO | MUL | NULL | |
| mobile | varchar(25) | YES | UNI | NULL | |
| jobTile | varchar(50) | NO | | NULL | |
| emoloyee_birth | datetime | YES | | NULL | |
| sex | char(1) | NO | | NULL | |
+----------------+-------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
可以看到,数据表employees的note字段的已经删除了。
mysql> ALTER TABLE employees ADD favorite_activity VARCHAR(100);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC employees;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| employeeNumber | int | NO | PRI | NULL | auto_increment |
| lastName | varchar(50) | NO | | NULL | |
| firstName | varchar(50) | NO | | NULL | |
| officeCode | int | NO | MUL | NULL | |
| mobile | varchar(25) | YES | UNI | NULL | |
| jobTile | varchar(50) | NO | | NULL | |
| emoloyee_birth | datetime | YES | | NULL | |
| sex | char(1) | NO | | NULL | |
| favorite_activity | varchar(100) | YES | | NULL | |
+-------------------+--------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)
可以看到,数据表employees已经增加字段名称为favorite_activity,数据类型为VARCHAR(100)。
1、删除外键约束
mysql> ALTER TABLE employees DROP FOREIGN KEY office_fk;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
2、修改数据表employees存储引擎为MyISAM
mysql> ALTER TABLE employees ENGINE=MyISAM;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE employees\G;
*************************** 1. row ***************************
Table: employees
Create Table: CREATE TABLE `employees` (
`employeeNumber` int NOT NULL AUTO_INCREMENT,
`lastName` varchar(50) NOT NULL,
`firstName` varchar(50) NOT NULL,
`officeCode` int NOT NULL,
`mobile` varchar(25) DEFAULT NULL,
`jobTile` varchar(50) NOT NULL,
`emoloyee_birth` datetime DEFAULT NULL,
`sex` char(1) NOT NULL,
`favorite_activity` varchar(100) DEFAULT NULL,
PRIMARY KEY (`employeeNumber`),
UNIQUE KEY `mobile` (`mobile`),
KEY `office_fk` (`officeCode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
可以看到存储引擎已经变为了
ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
可以看到,已经将数据表employees的存储引擎修改为了MyISAM。
mysql> ALTER TABLE employees RENAME employees_info;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW TABLES;
+-------------------+
| Tables_in_company |
+-------------------+
| employees_info |
| offices |
+-------------------+
2 rows in set (0.00 sec)
可以看到,已经将数据表employees的名称修改为employees_info。
mysql> DROP TABLE employees_info;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW TABLES;
+-------------------+
| Tables_in_company |
+-------------------+
| offices |
+-------------------+
1 row in set (0.00 sec)
可以看到,已经将数据表employees删除了。
进入Navicat软件好,新建一个创建数据库的查询。
在查询中编写如下的SQL语句,如下所示。
-- 1、创建数据库company
CREATE DATABASE company;
-- 2、创建数据表offices
USE company;
CREATE TABLE offices
(
officeCode INT(10) NOT NULL UNIQUE,
city VARCHAR(50) NOT NULL,
address VARCHAR(50),
country VARCHAR(50) NOT NULL,
postalCode VARCHAR(15),
PRIMARY KEY(officeCode)
);
-- 3、创建数据表employees
CREATE TABLE employees
(
employeeNumber INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
lastName VARCHAR(50) NOT NULL,
firstName VARCHAR(50) NOT NULL,
mobile VARCHAR(25) UNIQUE,
officeCode INT(10) NOT NULL,
jobTile VARCHAR(50) NOT NULL,
birth DATETIME NOT NULL,
note VARCHAR(255),
sex VARCHAR(5),
CONSTRAINT office_fk FOREIGN KEY(officeCode) REFERENCES offices(officeCode)
);
-- 4、将数据表employees的mobile字段修改到officeCode字段后面
ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER officeCode;
DESC employees;
-- 5、将数据表employees的birth字段修改名称为employee_birth
ALTER TABLE employees CHANGE birth employee_birth DATETIME;
DESC employees;
-- 6、修改sex字段的数据类型为CHAR(1),非空约束
ALTER TABLE employees MODIFY sex CHAR(1) NOT NULL;
DESC employees;
-- 7、删除字段note
ALTER TABLE employees DROP note;
DESC employees;
-- 8、增加字段名称为favorite_activity,数据类型为VARCHAR(100)
ALTER TABLE employees ADD favorite_activity VARCHAR(100);
DESC employees;
-- 9、修改数据表employees存储引擎为MyISAM
ALTER TABLE employees DROP FOREIGN KEY office_fk;
ALTER TABLE employees ENGINE=MyISAM;
SHOW CREATE TABLE employees;
-- 10、将数据表employees名称修改为employees_info
ALTER TABLE employees RENAME employees_info;
SHOW TABLES;
-- 11、删除数据表employees_info;
DROP TABLE employees_info;
SHOW TABLES;
依次选择要运行的SQL语句。运行过程如下所示:
1、创建数据库company
4、将数据表employees的mobile字段修改到officeCode字段后面
5、将数据表employees的birth字段修改名称为employee_birth
8、增加字段名称为favorite_activity,数据类型为VARCHAR(100)
10、将数据表employees名称修改为employees_info
本文主要介绍了MySQL中数据表的各种操作:
创建数据表、添加各类约束、查看数据表表结构,修改数据表和删除数据 表。使读者可以很快掌握MySQL数据库中关于创建数据表、添加各类约束、查看数据表表结构,修改数据表和删除数据表的基本使用方法。另外还介绍了分别使用cmd环境和Navicat软件环境中创建数据表表、添加各类约束、查看数据表表结构,修改数据表和删除数据表的使用方法。