123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- #第十章、创建和管理表
- #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;
|