第十章、创建和管理表.sql 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. #第十章、创建和管理表
  2. #1、创建和管理数据库
  3. #1.1 如何创建数据库
  4. #方式一:
  5. CREATE DATABASE mytest1; #创建的此数据库使用的是默认的字符集
  6. #查看创建数据库的结构
  7. SHOW CREATE DATABASE mytest1;
  8. #方式二:显式的指明了要创建的数据库的字符集
  9. CREATE DATABASE mytest2 CHARACTER SET 'gbk';
  10. SHOW CREATE DATABASE mytest2;
  11. #方式三(推荐):如果要创建的数据库已经存在,则创建不成功,但不会报错
  12. CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';
  13. #如果要创建的数据库不存在,则创建成功
  14. CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';
  15. SHOW DATABASES;
  16. #1.2管理数据库
  17. #查看当前连接中的数据库都有哪些
  18. SHOW DATABASES;
  19. #切换数据库
  20. USE mytest2;
  21. USE atguigudb;
  22. #查看当前数据库中保存的数据表都有哪些
  23. SHOW TABLES;
  24. #查看当前使用的数据库
  25. SELECT DATABASE() FROM DUAL;
  26. #查看指定数据库下保存的数据表
  27. SHOW TABLES FROM mysql;
  28. #1.3修改数据库
  29. #更改数据库字符集
  30. SHOW CREATE DATABASE mytest2;
  31. ALTER DATABASE mytest2 CHARACTER SET 'utf8';
  32. SHOW CREATE DATABASE mytest2;
  33. #1.4删除数据库
  34. #方式一:如果要删除的数据库存在,则删除成功。如果不存在,则报错。
  35. DROP DATABASE mytest1;
  36. SHOW DATABASES;
  37. #方式二:推荐。如果要删除的数据库存在,则删除成功。如果不存在,则默默结束,不会报错。
  38. DROP DATABASE IF EXISTS mytest1;
  39. DROP DATABASE IF EXISTS mytest2;
  40. #2、如何创建数据表
  41. USE atguigudb;
  42. SHOW CREATE DATABASE atguigudb;
  43. SHOW TABLES;
  44. #方式一:“白手起家”的方式
  45. CREATE TABLE IF NOT EXISTS myemp1( #需要用户具备创建表的权限。
  46. id INT,
  47. emp_name VARCHAR(15), #使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度。
  48. hire_date DATE
  49. );
  50. #查看表结构
  51. DESC myemp1;
  52. #查看创建表的语句结构
  53. SHOW CREATE TABLE myemp1; #如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集
  54. #查看表数据
  55. SELECT * FROM myemp1;
  56. #方式二:基于现有的表,同时导入数据
  57. CREATE TABLE myemp2
  58. AS
  59. SELECT employee_id,last_name,salary
  60. FROM employees;
  61. DESC myemp2;
  62. DESC employees;
  63. SELECT *
  64. FROM myemp2;
  65. #说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称。
  66. #说明2:此时的查询语句恶意结构比较丰富,使用前面章节讲过的各种SELECT
  67. CREATE TABLE myemp3
  68. AS
  69. SELECT e.employee_id emp_id,e.last_name lname,d.department_name
  70. FROM employees e JOIN departments d
  71. ON e.department_id = d.department_id;
  72. SELECT *
  73. FROM myemp3;
  74. DESC myemp3;
  75. #练习1:创建一个表employees_copy,实现对employees表的复制,包括表数据
  76. CREATE TABLE employees_copy
  77. AS
  78. SELECT *
  79. FROM employees;
  80. SELECT * FROM employees_copy;
  81. #练习2:创建一个表employees_blank,实现对employees表的复制,不包括表数据
  82. CREATE TABLE employees_blank
  83. AS
  84. SELECT *
  85. FROM employees
  86. #WHERE department_id > 10000;
  87. WHERE 1 = 2;
  88. SELECT * FROM employees_blank;
  89. #3、修改表 -->ALTER TABLE
  90. DESC myemp1;
  91. #3.1添加一个字段
  92. #默认添加到表中的最后一个字段的位置
  93. ALTER TABLE myemp1
  94. ADD salary DOUBLE(10,2);#10表示总共10位,2表示小数点后保留2位
  95. ALTER TABLE myemp1
  96. ADD phone_number VARCHAR(20) FIRST;
  97. ALTER TABLE myemp1
  98. ADD email VARCHAR(20) AFTER emp_name;
  99. #3.2修改一个字段:数据类型、长度、默认值(略)
  100. ALTER TABLE myemp1
  101. MODIFY emp_name VARCHAR(25);
  102. ALTER TABLE myemp1
  103. MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';
  104. #3.3重命名一个字段
  105. ALTER TABLE myemp1
  106. CHANGE salary monthly_salary DOUBLE(10,2);
  107. ALTER TABLE myemp1
  108. CHANGE email my_email VARCHAR(50);
  109. #3.4删除一个字段
  110. ALTER TABLE myemp1
  111. DROP COLUMN my_email;
  112. #4、重命名表
  113. #方式1:
  114. RENAME TABLE myemp1
  115. TO myemp11;
  116. #方式2:
  117. ALTER TABLE myemp2
  118. RENAME TO myemp12;
  119. #5、删除表
  120. #不光将表结构删除掉,同时表中的数据也删除掉,释放表空间
  121. DROP TABLE IF EXISTS myemp12;
  122. #6、清空表
  123. #清空表,表示清空表中的所有数据,但是表结构保留。
  124. SELECT * FROM employees_copy;
  125. TRUNCATE TABLE employees_copy;
  126. SELECT * FROM employees_copy;
  127. DESC employees_copy;
  128. #7、DCL中COMMIT和ROLLBACK
  129. #COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚。
  130. #ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。
  131. #8、对比 TRUNCATE TABLE 和 DELETE FROM
  132. #相同点:都可以实现对表中所有数据的删除,同时保留表结构。
  133. #不同点:
  134. # TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
  135. # DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的。
  136. /*
  137. 9、DDL和 DML的说明
  138. (1)、DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL操作
  139. 失效。(因为在执行完DDL操作之后,一旦会执行一次COMMIT。而此COMMIT操作
  140. 不受SET autocommit = FALSE影响的)
  141. (2)、DML的操作在默认情况,一旦执行,也是不可回滚的。但是,如果在
  142. 执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以
  143. 实现回滚
  144. */
  145. #演示:DELETE FROM
  146. #(1)
  147. COMMIT;
  148. #(2)
  149. SELECT *
  150. FROM myemp3;
  151. #(3)
  152. SET autocommit = FALSE;
  153. #(4)
  154. DELETE FROM myemp3;
  155. #(5)
  156. SELECT *
  157. FROM myemp3;
  158. #(6)
  159. ROLLBACK;
  160. #(7)
  161. SELECT *
  162. FROM myemp3;
  163. #演示:TRUNCATE TABLE
  164. #(1)
  165. COMMIT;
  166. #(2)
  167. SELECT *
  168. FROM myemp3;
  169. #(3)
  170. SET autocommit = FALSE;
  171. #(4)
  172. TRUNCATE TABLE myemp3;
  173. #(5)
  174. SELECT *
  175. FROM myemp3;
  176. #(6)
  177. ROLLBACK;
  178. #(7)
  179. SELECT *
  180. FROM myemp3;
  181. ####################################
  182. #10、测试MySQL8.0的新特性:DDL的原子化
  183. CREATE DATABASE mytest;
  184. USE mytest;
  185. CREATE TABLE book1(
  186. book_id INT,
  187. book_name VARCHAR(255)
  188. );
  189. SHOW TABLES;
  190. DROP TABLE book1,book2;