提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1.创建和管理数据库
1.1 创建数据库
方式1:创建数据库
CREATE DATABASE 数据库名;
CREATE DATABASE mytest1;
SHOW DATABASES;
方式2:创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
CREATE DATABASE mytest2 CHARACTER SET 'gbk';
SHOW CREATE DATABASE mytest2;
方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐 )
CREATE DATABASE IF NOT EXISTS 数据库名;
#如果要创建的数据库已经存在,则创建不成功,但不会报错
CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';
#如果要创建的数据库不存在,则创建成功
CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';
SHOW DATABASES;
1.2 使用数据库
- 查看当前所有的数据库
SHOW DATABASES; #有一个S,代表多个数据库
- 查看当前正在使用的数据库
SELECT DATABASE(); #使用的一个 mysql 中的全局函数
- 查看指定库下所有的表
SHOW TABLES FROM atguigudb;
- 查看数据库的创建信息
SHOW CREATE DATABASE 数据库名;
或者:
SHOW CREATE DATABASE 数据库名\G
- 使用/切换数据库
USE atguigudb;
1.3 修改数据库
- 更改数据库字符集
#ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbk、utf8等
SHOW CREATE DATABASE mytest2;
ALTER DATABASE mytest2 CHARACTER SET 'utf8';
1.4 删除数据库
- 方式1:删除指定的数据库
#DROP DATABASE 数据库名
DROP DATABASE mytest1;
- 方式2:删除指定的数据库(推荐)
#DROP DATABASE IF EXISTS 数据库名;
DROP DATABASE IF EXISTS mytest1;
SHOW DATABASES;
2.创建表
- 创建表
-- 创建表
CREATE TABLE emp (
-- int类型
emp_id INT,
-- 最多保存20个中英文字符
emp_name VARCHAR(20),
-- 总位数不超过15位
salary DOUBLE,
-- 日期类型
birthday DATE
);
CREATE TABLE IF NOT EXISTS myemp1( #需要用户具备创建表的权限
id INT,
emp_name VARCHAR(15),
hire_data DATE
);
方式2:
#方式二:基于现有的表,同时导入数据
CREATE TABLE myemp2
AS
SELECT employee_id,last_name,salary
FROM employees;
#练习1:创建一个表employee_copy,实现对employees表的复制,包括表数据
CREATE TABLE employee_copy
AS
SELECT *
FROM employees;
SELECT *
FROM employee_copy;
#练习2:创建一个表employee_blank,实现对employees表的复制,不包括表数据
CREATE TABLE employee_blank
AS
SELECT *
FROM employees
#where department_id > 10000;
WHERE 1 = 2;
SELECT *
FROM employee_blank;
3.修改表
DESC myemp1;
#3.1 添加一个字段
#添加在最后
ALTER TABLE myemp1
ADD salary DOUBLE(10,2);#一共十位 小数点后两位
#添加在第一个
ALTER TABLE myemp1
ADD phone_number VARCHAR(20) FIRST;
#添加在emp_name的后面
ALTER TABLE myemp1
ADD email VARCHAR(45) 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
RENAME TABLE myemp1
TO myemp11;
方式2:
ALTER TABLE myemp11
RENAME TO myemp1;
5.删除表
#DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];
DROP TABLE IF EXISTS myemp3;
IF EXISTS的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作.
DROP TABLE 语句不能回滚
6.清空表
-TRUNCATE TABLE语句:
-
删除表中所有的数据
-
释放表的存储空间
TRUNCATE TABLE employee_copy;#
- TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚
#COMMIT:提交数据。一旦执行COMMIT。则数据就被永久的保存在了数据库中,意味着数据不可以回滚
#ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后
DDL的操作一旦执行,就不可以回滚。指令SET autocommit = FALSE对DDL操作失效(因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的)
DML的操作默认情况下,一旦执行,也是不可以回滚的。但是,如果执行DML之前,执行了SET autoCOMMIT = false,则执行的DML操作就可以实现回滚了
#演示:DELETE FROM
CREATE TABLE myemp3
AS
SELECT e.employee_id emp_id,e.last_name lname,department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
COMMIT;
SELECT * FROM myemp3;
SET autocommit = FALSE;
DELETE FROM myemp3;
SELECT * FROM myemp3;
ROLLBACK;
SELECT * FROM myemp3;
#演示:TRUNCATE TABLE
COMMIT;
SELECT * FROM myemp3;
SET autocommit = FALSE;
TRUNCATE TABLE myemp3;
SELECT * FROM myemp3;
ROLLBACK;
SELECT * FROM myemp3;