#DDL语言:对数据库中的某些对象(例如,database,table)进行管理
/*
DDL数据定义语言 data define language

库和表的管理

创建、修改、删除

创建 create
修改 alter
删除 drop

*/

#一、库的创建

#1.库的创建
/*

语法:
create database [if not exists] 库名;

*/

#案例:创建库books
CREATE DATABASE IF NOT EXISTS books;

#2.库的修改

##库名更改存在丢失数据风险,因此已废用

#更改库的字符集

ALTER DATABASE books CHARACTER SET gbk;

#3.库的删除

DROP DATABASE IF EXISTS books;


#二、表的管理

#1.表的创建(重)
/*
create table 表名(
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    ………………

*/
USE books;
#案例:创建表book

CREATE TABLE book(
    id INT,#编号
    bName VARCHAR(20),#书名,最大二十个字符
    price DOUBLE,#价格
    authorId INT,#作者编号
    publishDate DATETIME#出版日期
);

DESC book;

#案例:创建表author
CREATE TABLE author(
    id INT,
    au_name VARCHAR(20),
    nation VARCHAR(10)
);

DESC author;

#2.表的修改

/*
alter table 表名 add|drop|modify|change|rename column 列名 【列类型 约束】;
         增 |删除|改类型|改列名|改表名
*/

#a.修改列名

ALTER TABLE book CHANGE COLUMN publishDate puDate DATETIME;

#b.修改列的类型和约束

ALTER TABLE book MODIFY COLUMN puDate TIMESTAMP;

#c.添加新列

ALTER TABLE author ADD COLUMN annual DOUBLE ;#【first | after (字段名)】/添加至第一列或 某字段名后一列

#d.删除列

ALTER TABLE author DROP COLUMN annual;

#e.修改表名

ALTER TABLE author RENAME TO book_author;


#3.表的删除

DROP TABLE book_author;

SHOW TABLES;

#通用的写法:

DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;

DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 新表名();

#4.表的复制

INSERT INTO author 
VALUE(1,'xx','xx')
,(2,'lm','ch')
,(3,'jenny','us');

SELECT * FROM author;

#a.复制表的结构,不复制数据

CREATE TABLE copy1 LIKE author;
SELECT * FROM copy1;

#b.复制表的结构+数据

CREATE TABLE copy2 
SELECT * FROM author;
SELECT * FROM copy2;

#c.复制表的部分数据,几列或几行

CREATE TABLE copy3
SELECT id,au_name
FROM author
WHERE au_name LIKE '%x';
SELECT * FROM copy3;

#d.复制某些字段,即复制部分结构

CREATE TABLE copy4
SELECT id,au_name
FROM author
WHERE 0;
SELECT * FROM copy4;

#==============Test===============
#1.    创建表dept1
/*
NAME    NULL?    TYPE
id        INT(7)
NAME        VARCHAR(25)
*/

USE test;
CREATE TABLE dept1(
    id INT(7),
    NAME VARCHAR(25)
);



#2.    将表departments中的数据插入新表dept2中

CREATE TABLE dept2
SELECT department_name,department_id
FROM myemployees.`departments`;


#3.    创建表emp5
/*
NAME    NULL?    TYPE
id        INT(7)
First_name    VARCHAR (25)
Last_name    VARCHAR(25)
Dept_id        INT(7)
*/

CREATE TABLE emp5(
    id INT(7),
    first_name VARCHAR(25),
    last_name VARCHAR(25),
    dept_id INT(7)
);


#4.    将列Last_name的长度增加到50

ALTER TABLE emp5 MODIFY COLUMN last_name VARCHAR(50);
DESC emp5;

#5.    根据表employees创建employees2

USE myemployees;
CREATE TABLE employees2
SELECT last_name,job_id,salary
FROM employees;

#6.    删除表emp5

USE test;
DROP TABLE emp5;

#7.    将表employees2重命名为emp5

USE myemployees;
ALTER TABLE employees2 RENAME TO emp5;

#8.在表dept和emp5中添加新列test_column,并检查所作的操作

USE test;
ALTER TABLE dept1 ADD COLUMN test_column VARCHAR(10); 
USE myemployees;
ALTER TABLE demp5 ADD COLUMN test_column VARCHAR(10); 

#9.直接删除表emp5中的列 job_id

ALTER TABLE emp5 DROP COLUMN job_id;