库和表的管理
创建:create
修改:alter
删除:drop
库的管理
创建库
语法:create database [if not exists]库名;
#案例:创建库Books
CREATE DATABASE IF NOT EXISTS books ;
#创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
使用数据库
#查看当前所有的数据库
SHOW DATABASES; #有一个S,代表多个数据库
#查看当前正在使用的数据库
SELECT DATABASE(); #使用的一个 mysql 中的全局函数
#查看指定库下所有的表
SHOW TABLES FROM 数据库名;
#查看数据库的创建信息
SHOW CREATE DATABASE 数据库名;
或者:
SHOW CREATE DATABASE 数据库名\G
#使用/切换数据库
USE 数据库名;
修改库
RENAME DATABASE books TO 新库名; #新版不支持
#更改库的字符集
ALTER DATABASE books CHARACTER SET gbk;
删除库
DROP DATABASE IF EXISTS books;
表的管理
创建表
#语法:
create table 表名(
列名 列的类型【(长度) 约束】,
...
列名 列的类型【(长度) 约束】
)
# 查看表结构
DESC 表名;
#案例:创建表author
CREATE TABLE IF NOT EXISTS author(
id INT,
au_name VARCHAR(20),
nation VARCHAR(10)
-- 主键
PRIMARY KEY (id)
)
复制表
#仅仅复制表的结构
CREATE TABLE copy LIKE author;
#复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM author;
#基于现有的表创建,同时导入数据
CREATE TABLE emp1 AS SELECT * FROM employees;
#只复制部分数据
CREATE TABLE copy3
SELECT id,au_name
FROM author
WHERE nation='中国';
#仅仅复制某些字段
CREATE TABLE copy4
SELECT id,au_name
FROM author
WHERE 0; #0表示false 1表示true
CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2; --创建的emp2是空表
修改表
# 语法:
alter table 表名 add|drop|modify|change column 列名[DEFAULT 默认值]
[FIRST|AFTER 字段名
2];
如追加一个列:ALTER TABLE dept80
ADD job_id varchar(15);
#①修改列名
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;
#②修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;
#③添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;
#④删除列
ALTER TABLE book_author DROP COLUMN annual;
#⑤修改表名
ALTER TABLE author RENAME TO book_author; # TO可以省略
RENAME TABLE emp
TO myemp;
删除表
DROP TABLE [IF EXISTS] book_author;
# 查看当前数据库的所有表, DROP TABLE 语句不能回滚
SHOW TABLES;
#通用的写法:
DROP DATABASE IF EXISTS 旧库名; #删除库
CREATE DATABASE 新库名; #创建库
DROP TABLE IF EXISTS 旧表名; #删除表
清空表
TRUNCATE TABLE语句:删除表中所有的数据,释放表的存储空间。
TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚。
TRUNCATE TABLE detail_dept;
TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。
评论区