6.1 语法

数据库定义语言:用于库和表的管理
1)库的管理
创建、修改、删除

2)表的管理
创建、修改、删除

创建:create
修改:alter
删除:drop

6.2 库的管理

1)库的创建
语法:

  1. create database books;

2)更改数据库的字符集

  1. mysql> show create database books;
  2. +----------+-------------------------------------------------------------------+
  3. | Database | Create Database |
  4. +----------+-------------------------------------------------------------------+
  5. | books | CREATE DATABASE `books` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
  6. +----------+-------------------------------------------------------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> alter database books character set utf8;
  9. Query OK, 1 row affected (0.00 sec)

3)库的删除

  1. mysql> drop database if exists books;
  2. Query OK, 0 rows affected (0.02 sec)

6.3 表的管理

1)语法

  1. # 表的创建
  2. create table 表名(
  3. 列名 列的类型[长度 约束],
  4. 列名 列的类型[长度 约束],
  5. 列名 列的类型[长度 约束],
  6. 列名 列的类型[长度 约束]
  7. );
  8. # 表的修改
  9. 1)修改列名
  10. 2)修改列的类型或约束
  11. 3)添加新列
  12. 4)删除列
  13. 5)修改表名

2)创建表book

  1. create table book(
  2. id int ,
  3. bName varchar(30),
  4. price double,
  5. authorId int,
  6. pubilshDate datetime
  7. )
  8. mysql> desc book;
  9. +-------------+-------------+------+-----+---------+-------+
  10. | Field | Type | Null | Key | Default | Extra |
  11. +-------------+-------------+------+-----+---------+-------+
  12. | id | int(11) | YES | | NULL | |
  13. | bName | varchar(30) | YES | | NULL | |
  14. | price | double | YES | | NULL | |
  15. | authorId | int(11) | YES | | NULL | |
  16. | pubilshDate | datetime | YES | | NULL | |
  17. +-------------+-------------+------+-----+---------+-------+
  18. 5 rows in set (0.00 sec)

3)创建author表

  1. create table author(
  2. id int,
  3. au_name varchar(20),
  4. nation varchar(10)
  5. );
  6. mysql> desc author;
  7. +---------+-------------+------+-----+---------+-------+
  8. | Field | Type | Null | Key | Default | Extra |
  9. +---------+-------------+------+-----+---------+-------+
  10. | id | int(11) | YES | | NULL | |
  11. | au_name | varchar(20) | YES | | NULL | |
  12. | nation | varchar(10) | YES | | NULL | |
  13. +---------+-------------+------+-----+---------+-------+
  14. 3 rows in set (0.00 sec)

4)修改列名

  1. mysql> alter table book change pubilshDate pubDate datetime;
  2. Query OK, 0 rows affected (0.00 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc book;
  5. +----------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +----------+-------------+------+-----+---------+-------+
  8. | id | int(11) | YES | | NULL | |
  9. | bName | varchar(30) | YES | | NULL | |
  10. | price | double | YES | | NULL | |
  11. | authorId | int(11) | YES | | NULL | |
  12. | pubDate | datetime | YES | | NULL | |
  13. +----------+-------------+------+-----+---------+-------+
  14. 5 rows in set (0.00 sec)

5)修改列的类型或约束

  1. mysql> alter table book modify column pubDate timestamp;
  2. Query OK, 0 rows affected (0.02 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc book;
  5. +----------+-------------+------+-----+-------------------+-----------------------------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +----------+-------------+------+-----+-------------------+-----------------------------+
  8. | id | int(11) | YES | | NULL | |
  9. | bName | varchar(30) | YES | | NULL | |
  10. | price | double | YES | | NULL | |
  11. | authorId | int(11) | YES | | NULL | |
  12. | pubDate | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
  13. +----------+-------------+------+-----+-------------------+-----------------------------+
  14. 5 rows in set (0.00 sec)

6)增加新列

  1. mysql> alter table author add column annual double;
  2. Query OK, 0 rows affected (0.00 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc author;
  5. +---------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +---------+-------------+------+-----+---------+-------+
  8. | id | int(11) | YES | | NULL | |
  9. | au_name | varchar(20) | YES | | NULL | |
  10. | nation | varchar(10) | YES | | NULL | |
  11. | annual | double | YES | | NULL | |
  12. +---------+-------------+------+-----+---------+-------+
  13. 4 rows in set (0.00 sec)

7)删除列

  1. mysql> alter table author drop column annual;
  2. Query OK, 0 rows affected (0.00 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc author;
  5. +---------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +---------+-------------+------+-----+---------+-------+
  8. | id | int(11) | YES | | NULL | |
  9. | au_name | varchar(20) | YES | | NULL | |
  10. | nation | varchar(10) | YES | | NULL | |
  11. +---------+-------------+------+-----+---------+-------+
  12. 3 rows in set (0.00 sec)

8)修改表名

  1. mysql> alter table author rename to book_author;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> desc book_author;
  4. +---------+-------------+------+-----+---------+-------+
  5. | Field | Type | Null | Key | Default | Extra |
  6. +---------+-------------+------+-----+---------+-------+
  7. | id | int(11) | YES | | NULL | |
  8. | au_name | varchar(20) | YES | | NULL | |
  9. | nation | varchar(10) | YES | | NULL | |
  10. +---------+-------------+------+-----+---------+-------+
  11. 3 rows in set (0.00 sec)

9)表的删除

  1. mysql> drop table book_author;
  2. Query OK, 0 rows affected (0.00 sec)

10)表的复制—只复制表的结构

  1. mysql> create table jobs_bak like jobs;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> show create table jobs_bak;
  4. +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  5. | Table | Create Table |
  6. +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  7. | jobs_bak | CREATE TABLE `jobs_bak` (
  8. `job_id` varchar(10) NOT NULL,
  9. `job_title` varchar(35) DEFAULT NULL,
  10. `min_salary` int(6) DEFAULT NULL,
  11. `max_salary` int(6) DEFAULT NULL,
  12. PRIMARY KEY (`job_id`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
  14. +----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  15. 1 row in set (0.01 sec)
  16. mysql> select * from jobs_bak;
  17. Empty set (0.00 sec)

11)复制表的结构和数据

  1. mysql> create table jobs_bak select * from jobs;
  2. Query OK, 19 rows affected (0.00 sec)
  3. Records: 19 Duplicates: 0 Warnings: 0
  4. mysql> select * from jobs_bak;
  5. +------------+---------------------------------+------------+------------+
  6. | job_id | job_title | min_salary | max_salary |
  7. +------------+---------------------------------+------------+------------+
  8. | AC_ACCOUNT | Public Accountant | 4200 | 9000 |
  9. | AC_MGR | Accounting Manager | 8200 | 16000 |
  10. | AD_ASST | Administration Assistant | 3000 | 6000 |
  11. | AD_PRES | President | 20000 | 40000 |
  12. | AD_VP | Administration Vice President | 15000 | 30000 |
  13. | FI_ACCOUNT | Accountant | 4200 | 9000 |
  14. | FI_MGR | Finance Manager | 8200 | 16000 |
  15. | HR_REP | Human Resources Representative | 4000 | 9000 |
  16. | IT_PROG | Programmer | 4000 | 10000 |
  17. | MK_MAN | Marketing Manager | 9000 | 15000 |
  18. | MK_REP | Marketing Representative | 4000 | 9000 |
  19. | PR_REP | Public Relations Representative | 4500 | 10500 |
  20. | PU_CLERK | Purchasing Clerk | 2500 | 5500 |
  21. | PU_MAN | Purchasing Manager | 8000 | 15000 |
  22. | SA_MAN | Sales Manager | 10000 | 20000 |
  23. | SA_REP | Sales Representative | 6000 | 12000 |
  24. | SH_CLERK | Shipping Clerk | 2500 | 5500 |
  25. | ST_CLERK | Stock Clerk | 2000 | 5000 |
  26. | ST_MAN | Stock Manager | 5500 | 8500 |
  27. +------------+---------------------------------+------------+------------+
  28. 19 rows in set (0.00 sec)

13)只复制部分数据

  1. mysql> create table jobs_bak select * from jobs where job_id = 'AD_ASST';
  2. Query OK, 1 row affected (0.01 sec)
  3. Records: 1 Duplicates: 0 Warnings: 0
  4. mysql>
  5. mysql> select * from jobs_bak;
  6. +---------+--------------------------+------------+------------+
  7. | job_id | job_title | min_salary | max_salary |
  8. +---------+--------------------------+------------+------------+
  9. | AD_ASST | Administration Assistant | 3000 | 6000 |
  10. +---------+--------------------------+------------+------------+
  11. 1 row in set (0.00 sec)

14)只复制部分结构

  1. mysql> create table jobs_bak select job_id, job_title from jobs where 1=2;
  2. Query OK, 0 rows affected (0.00 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc jobs_bak;
  5. +-----------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +-----------+-------------+------+-----+---------+-------+
  8. | job_id | varchar(10) | NO | | NULL | |
  9. | job_title | varchar(35) | YES | | NULL | |
  10. +-----------+-------------+------+-----+---------+-------+
  11. 2 rows in set (0.00 sec)
  12. mysql> select * from jobs_bak;
  13. Empty set (0.00 sec)

6.4 案例

1)创建表dept1
name type
id int(7)
name varchar(25)

  1. mysql> create database test;
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> use test
  4. Database changed
  5. mysql> create table dept1(id int(7),name varchar(25));
  6. Query OK, 0 rows affected (0.00 sec)
  7. mysql> desc dept1;
  8. +-------+-------------+------+-----+---------+-------+
  9. | Field | Type | Null | Key | Default | Extra |
  10. +-------+-------------+------+-----+---------+-------+
  11. | id | int(7) | YES | | NULL | |
  12. | name | varchar(25) | YES | | NULL | |
  13. +-------+-------------+------+-----+---------+-------+
  14. 2 rows in set (0.00 sec)

2)将表departments中的数据插入到新表的dept1中

  1. mysql> insert into test.dept1 select department_id,department_name from myemployees.departments;
  2. Query OK, 27 rows affected (0.00 sec)
  3. Records: 27 Duplicates: 0 Warnings: 0
  4. mysql> select * from dept1;
  5. +------+------+
  6. | id | name |
  7. +------+------+
  8. | 10 | Adm |
  9. +------+------+

3)创建表emp5
name type
id int(7)
first_name varchar(25)
last_name varchar(25)
dept_id int(7)

  1. mysql> create table emp5 (id int(7),first_name varchar(25), last_name varchar(25),dept_id int(7));
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> desc emp5;
  4. +------------+-------------+------+-----+---------+-------+
  5. | Field | Type | Null | Key | Default | Extra |
  6. +------------+-------------+------+-----+---------+-------+
  7. | id | int(7) | YES | | NULL | |
  8. | first_name | varchar(25) | YES | | NULL | |
  9. | last_name | varchar(25) | YES | | NULL | |
  10. | dept_id | int(7) | YES | | NULL | |
  11. +------------+-------------+------+-----+---------+-------+
  12. 4 rows in set (0.00 sec)

4)把last_name的长度增加到50

  1. mysql> alter table emp5 modify last_name varchar(50);
  2. Query OK, 0 rows affected (0.00 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc emp5;
  5. +------------+-------------+------+-----+---------+-------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +------------+-------------+------+-----+---------+-------+
  8. | id | int(7) | YES | | NULL | |
  9. | first_name | varchar(25) | YES | | NULL | |
  10. | last_name | varchar(50) | YES | | NULL | |
  11. | dept_id | int(7) | YES | | NULL | |
  12. +------------+-------------+------+-----+---------+-------+
  13. 4 rows in set (0.00 sec)

5)根据employees 创建employees_bak

  1. mysql> create table employees_bak like employees;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> desc employees_bak;
  4. +----------------+--------------+------+-----+---------+----------------+
  5. | Field | Type | Null | Key | Default | Extra |
  6. +----------------+--------------+------+-----+---------+----------------+
  7. | employee_id | int(6) | NO | PRI | NULL | auto_increment |
  8. | first_name | varchar(20) | YES | | NULL | |
  9. | last_name | varchar(25) | YES | | NULL | |
  10. | email | varchar(25) | YES | | NULL | |
  11. | phone_number | varchar(20) | YES | | NULL | |
  12. | job_id | varchar(10) | YES | MUL | NULL | |
  13. | salary | double(10,2) | YES | | NULL | |
  14. | commission_pct | double(4,2) | YES | | NULL | |
  15. | manager_id | int(6) | YES | | NULL | |
  16. | department_id | int(4) | YES | MUL | NULL | |
  17. | hiredate | datetime | YES | | NULL | |
  18. +----------------+--------------+------+-----+---------+----------------+
  19. 11 rows in set (0.00 sec)
  20. mysql> select * from employees_bak;
  21. Empty set (0.00 sec)

6)删除表emp5

  1. mysql> drop table emp5;
  2. Query OK, 0 rows affected (0.00 sec)

7)将employees_bak重命名为emp5

  1. mysql> alter table employees_bak rename to emp5;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> show tables;
  4. +-----------------------+
  5. | Tables_in_myemployees |
  6. +-----------------------+
  7. | departments |
  8. | emp5 |
  9. | employees |
  10. | job_grades |
  11. | jobs |
  12. | jobs_bak |
  13. | locations |
  14. +-----------------------+
  15. 7 rows in set (0.00 sec)

8)在表emp5中添加新列test_column

  1. mysql> alter table emp5 add column test_column varchar(20);
  2. Query OK, 0 rows affected (0.12 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc emp5;
  5. +----------------+--------------+------+-----+---------+----------------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +----------------+--------------+------+-----+---------+----------------+
  8. | employee_id | int(6) | NO | PRI | NULL | auto_increment |
  9. | first_name | varchar(20) | YES | | NULL | |
  10. | last_name | varchar(25) | YES | | NULL | |
  11. | email | varchar(25) | YES | | NULL | |
  12. | phone_number | varchar(20) | YES | | NULL | |
  13. | job_id | varchar(10) | YES | MUL | NULL | |
  14. | salary | double(10,2) | YES | | NULL | |
  15. | commission_pct | double(4,2) | YES | | NULL | |
  16. | manager_id | int(6) | YES | | NULL | |
  17. | department_id | int(4) | YES | MUL | NULL | |
  18. | hiredate | datetime | YES | | NULL | |
  19. | test_column | varchar(20) | YES | | NULL | |
  20. +----------------+--------------+------+-----+---------+----------------+
  21. 12 rows in set (0.00 sec)

9.删除emp5中的列test_column

  1. mysql> alter table emp5 drop column test_column;
  2. Query OK, 0 rows affected (0.01 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql> desc emp5;
  5. +----------------+--------------+------+-----+---------+----------------+
  6. | Field | Type | Null | Key | Default | Extra |
  7. +----------------+--------------+------+-----+---------+----------------+
  8. | employee_id | int(6) | NO | PRI | NULL | auto_increment |
  9. | first_name | varchar(20) | YES | | NULL | |
  10. | last_name | varchar(25) | YES | | NULL | |
  11. | email | varchar(25) | YES | | NULL | |
  12. | phone_number | varchar(20) | YES | | NULL | |
  13. | job_id | varchar(10) | YES | MUL | NULL | |
  14. | salary | double(10,2) | YES | | NULL | |
  15. | commission_pct | double(4,2) | YES | | NULL | |
  16. | manager_id | int(6) | YES | | NULL | |
  17. | department_id | int(4) | YES | MUL | NULL | |
  18. | hiredate | datetime | YES | | NULL | |
  19. +----------------+--------------+------+-----+---------+----------------+
  20. 11 rows in set (0.00 sec)