|
@@ -0,0 +1,272 @@
|
|
|
|
+#第十章、创建和管理表
|
|
|
|
+
|
|
|
|
+#1、创建和管理数据库
|
|
|
|
+#1.1 如何创建数据库
|
|
|
|
+#方式一:
|
|
|
|
+CREATE DATABASE mytest1; #创建的此数据库使用的是默认的字符集
|
|
|
|
+#查看创建数据库的结构
|
|
|
|
+SHOW CREATE DATABASE mytest1;
|
|
|
|
+
|
|
|
|
+#方式二:显式的指明了要创建的数据库的字符集
|
|
|
|
+CREATE DATABASE mytest2 CHARACTER SET 'gbk';
|
|
|
|
+
|
|
|
|
+SHOW CREATE DATABASE mytest2;
|
|
|
|
+
|
|
|
|
+#方式三(推荐):如果要创建的数据库已经存在,则创建不成功,但不会报错
|
|
|
|
+CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';
|
|
|
|
+#如果要创建的数据库不存在,则创建成功
|
|
|
|
+CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';
|
|
|
|
+
|
|
|
|
+SHOW DATABASES;
|
|
|
|
+
|
|
|
|
+#1.2管理数据库
|
|
|
|
+#查看当前连接中的数据库都有哪些
|
|
|
|
+SHOW DATABASES;
|
|
|
|
+
|
|
|
|
+#切换数据库
|
|
|
|
+USE mytest2;
|
|
|
|
+USE atguigudb;
|
|
|
|
+
|
|
|
|
+#查看当前数据库中保存的数据表都有哪些
|
|
|
|
+SHOW TABLES;
|
|
|
|
+
|
|
|
|
+#查看当前使用的数据库
|
|
|
|
+SELECT DATABASE() FROM DUAL;
|
|
|
|
+
|
|
|
|
+#查看指定数据库下保存的数据表
|
|
|
|
+SHOW TABLES FROM mysql;
|
|
|
|
+
|
|
|
|
+#1.3修改数据库
|
|
|
|
+#更改数据库字符集
|
|
|
|
+SHOW CREATE DATABASE mytest2;
|
|
|
|
+
|
|
|
|
+ALTER DATABASE mytest2 CHARACTER SET 'utf8';
|
|
|
|
+
|
|
|
|
+SHOW CREATE DATABASE mytest2;
|
|
|
|
+
|
|
|
|
+#1.4删除数据库
|
|
|
|
+#方式一:如果要删除的数据库存在,则删除成功。如果不存在,则报错。
|
|
|
|
+DROP DATABASE mytest1;
|
|
|
|
+
|
|
|
|
+SHOW DATABASES;
|
|
|
|
+
|
|
|
|
+#方式二:推荐。如果要删除的数据库存在,则删除成功。如果不存在,则默默结束,不会报错。
|
|
|
|
+DROP DATABASE IF EXISTS mytest1;
|
|
|
|
+
|
|
|
|
+DROP DATABASE IF EXISTS mytest2;
|
|
|
|
+
|
|
|
|
+#2、如何创建数据表
|
|
|
|
+USE atguigudb;
|
|
|
|
+
|
|
|
|
+SHOW CREATE DATABASE atguigudb;
|
|
|
|
+
|
|
|
|
+SHOW TABLES;
|
|
|
|
+
|
|
|
|
+#方式一:“白手起家”的方式
|
|
|
|
+CREATE TABLE IF NOT EXISTS myemp1( #需要用户具备创建表的权限。
|
|
|
|
+id INT,
|
|
|
|
+emp_name VARCHAR(15), #使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度。
|
|
|
|
+hire_date DATE
|
|
|
|
+);
|
|
|
|
+
|
|
|
|
+#查看表结构
|
|
|
|
+DESC myemp1;
|
|
|
|
+
|
|
|
|
+#查看创建表的语句结构
|
|
|
|
+SHOW CREATE TABLE myemp1; #如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集
|
|
|
|
+#查看表数据
|
|
|
|
+SELECT * FROM myemp1;
|
|
|
|
+
|
|
|
|
+#方式二:基于现有的表,同时导入数据
|
|
|
|
+CREATE TABLE myemp2
|
|
|
|
+AS
|
|
|
|
+SELECT employee_id,last_name,salary
|
|
|
|
+FROM employees;
|
|
|
|
+
|
|
|
|
+DESC myemp2;
|
|
|
|
+DESC employees;
|
|
|
|
+
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp2;
|
|
|
|
+
|
|
|
|
+#说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称。
|
|
|
|
+#说明2:此时的查询语句恶意结构比较丰富,使用前面章节讲过的各种SELECT
|
|
|
|
+CREATE TABLE myemp3
|
|
|
|
+AS
|
|
|
|
+SELECT e.employee_id emp_id,e.last_name lname,d.department_name
|
|
|
|
+FROM employees e JOIN departments d
|
|
|
|
+ON e.department_id = d.department_id;
|
|
|
|
+
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp3;
|
|
|
|
+
|
|
|
|
+DESC myemp3;
|
|
|
|
+
|
|
|
|
+#练习1:创建一个表employees_copy,实现对employees表的复制,包括表数据
|
|
|
|
+CREATE TABLE employees_copy
|
|
|
|
+AS
|
|
|
|
+SELECT *
|
|
|
|
+FROM employees;
|
|
|
|
+
|
|
|
|
+SELECT * FROM employees_copy;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#练习2:创建一个表employees_blank,实现对employees表的复制,不包括表数据
|
|
|
|
+CREATE TABLE employees_blank
|
|
|
|
+AS
|
|
|
|
+SELECT *
|
|
|
|
+FROM employees
|
|
|
|
+#WHERE department_id > 10000;
|
|
|
|
+WHERE 1 = 2;
|
|
|
|
+
|
|
|
|
+SELECT * FROM employees_blank;
|
|
|
|
+
|
|
|
|
+#3、修改表 -->ALTER TABLE
|
|
|
|
+DESC myemp1;
|
|
|
|
+
|
|
|
|
+#3.1添加一个字段
|
|
|
|
+#默认添加到表中的最后一个字段的位置
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+ADD salary DOUBLE(10,2);#10表示总共10位,2表示小数点后保留2位
|
|
|
|
+
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+ADD phone_number VARCHAR(20) FIRST;
|
|
|
|
+
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+ADD email VARCHAR(20) AFTER emp_name;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#3.2修改一个字段:数据类型、长度、默认值(略)
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+MODIFY emp_name VARCHAR(25);
|
|
|
|
+
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';
|
|
|
|
+
|
|
|
|
+#3.3重命名一个字段
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+CHANGE salary monthly_salary DOUBLE(10,2);
|
|
|
|
+
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+CHANGE email my_email VARCHAR(50);
|
|
|
|
+
|
|
|
|
+#3.4删除一个字段
|
|
|
|
+ALTER TABLE myemp1
|
|
|
|
+DROP COLUMN my_email;
|
|
|
|
+
|
|
|
|
+#4、重命名表
|
|
|
|
+#方式1:
|
|
|
|
+RENAME TABLE myemp1
|
|
|
|
+TO myemp11;
|
|
|
|
+
|
|
|
|
+#方式2:
|
|
|
|
+ALTER TABLE myemp2
|
|
|
|
+RENAME TO myemp12;
|
|
|
|
+
|
|
|
|
+#5、删除表
|
|
|
|
+#不光将表结构删除掉,同时表中的数据也删除掉,释放表空间
|
|
|
|
+DROP TABLE IF EXISTS myemp12;
|
|
|
|
+
|
|
|
|
+#6、清空表
|
|
|
|
+#清空表,表示清空表中的所有数据,但是表结构保留。
|
|
|
|
+
|
|
|
|
+SELECT * FROM employees_copy;
|
|
|
|
+
|
|
|
|
+TRUNCATE TABLE employees_copy;
|
|
|
|
+
|
|
|
|
+SELECT * FROM employees_copy;
|
|
|
|
+
|
|
|
|
+DESC employees_copy;
|
|
|
|
+
|
|
|
|
+#7、DCL中COMMIT和ROLLBACK
|
|
|
|
+#COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚。
|
|
|
|
+#ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。
|
|
|
|
+
|
|
|
|
+#8、对比 TRUNCATE TABLE 和 DELETE FROM
|
|
|
|
+#相同点:都可以实现对表中所有数据的删除,同时保留表结构。
|
|
|
|
+#不同点:
|
|
|
|
+# TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
|
|
|
|
+# DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的。
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ 9、DDL和 DML的说明
|
|
|
|
+ (1)、DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL操作
|
|
|
|
+ 失效。(因为在执行完DDL操作之后,一旦会执行一次COMMIT。而此COMMIT操作
|
|
|
|
+ 不受SET autocommit = FALSE影响的)
|
|
|
|
+ (2)、DML的操作在默认情况,一旦执行,也是不可回滚的。但是,如果在
|
|
|
|
+ 执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以
|
|
|
|
+ 实现回滚
|
|
|
|
+*/
|
|
|
|
+
|
|
|
|
+#演示:DELETE FROM
|
|
|
|
+#(1)
|
|
|
|
+COMMIT;
|
|
|
|
+#(2)
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp3;
|
|
|
|
+#(3)
|
|
|
|
+SET autocommit = FALSE;
|
|
|
|
+#(4)
|
|
|
|
+DELETE FROM myemp3;
|
|
|
|
+#(5)
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp3;
|
|
|
|
+#(6)
|
|
|
|
+ROLLBACK;
|
|
|
|
+#(7)
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp3;
|
|
|
|
+
|
|
|
|
+#演示:TRUNCATE TABLE
|
|
|
|
+#(1)
|
|
|
|
+COMMIT;
|
|
|
|
+#(2)
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp3;
|
|
|
|
+#(3)
|
|
|
|
+SET autocommit = FALSE;
|
|
|
|
+#(4)
|
|
|
|
+TRUNCATE TABLE myemp3;
|
|
|
|
+#(5)
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp3;
|
|
|
|
+#(6)
|
|
|
|
+ROLLBACK;
|
|
|
|
+#(7)
|
|
|
|
+SELECT *
|
|
|
|
+FROM myemp3;
|
|
|
|
+
|
|
|
|
+####################################
|
|
|
|
+#10、测试MySQL8.0的新特性:DDL的原子化
|
|
|
|
+
|
|
|
|
+CREATE DATABASE mytest;
|
|
|
|
+USE mytest;
|
|
|
|
+
|
|
|
|
+CREATE TABLE book1(
|
|
|
|
+book_id INT,
|
|
|
|
+book_name VARCHAR(255)
|
|
|
|
+);
|
|
|
|
+
|
|
|
|
+SHOW TABLES;
|
|
|
|
+
|
|
|
|
+DROP TABLE book1,book2;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|