前边为各位小伙伴介绍了基础的操作,这一节来介绍数据表的创建和管理。
创建数据库
create database db_name;
#创建一个数据库
show databases;
#查看当前所有的数据库
use db_name;
#切换当前使用的数据库
命名规则
- 数据库名不得超过30个字符,变量名限制为29个
- 必须只能包含A-Z,a-z,0-9,_共63个字符
- 不能在对象名的字符间留空格
- 不能喝用户定义的其他对象重名
- 必须保证你的字段没有和保留字、数据库系统或常用方法冲突
- 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那么在另一个表里也只能用整数了
创建表
- 必须具备
- CREATE TABLE权限
- 存储空间
- 必须指定
- 表名
- 列名,数据类型,尺寸
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);
#创建表的语法
常用的数据类型
数据类型 | 含义 |
INT | 使用4个字节保存整数数据 |
CHAR(size) | 定长字符数据。若未指定,默认为1个字符,最大长度为255 |
VACHAR(size) | 可变长字符数据,根据字符串实际长度保存,必须指定长度 |
FLOAT(M,D) | 单精度浮点数,M=整数位+小数位,D=小数位。D<=M<=255,0<=D<=30,默认M+D<=6 |
DOUBLE(M,D) | 双精度浮点数,D<=M<=255,0<=D<=30,默认M+D<=15 |
DATE | 日期型数据,格式‘YYYY-MM-DD’ |
BLOB | 二进制形式的长文本数据,最大可达4G |
TEXT | 长文本数据,最大可达4G |
创建表代码示例
CREATE TABLE emp (
#int类型,自增
emp_id INT AUTO_INCREMENT, #最多保存20个中英文字符
emp_name CHAR (20),
#总位数不超过15位
salary DOUBLE,
#日期类型
birthday DATE,
#主键
PRIMARY KEY (emp_id)
) ;
使用子查询创建表
- 使用AS subquery选项,将创建表和插入数据结合起来
- 指定的列和子查询中的列要一一对应
- 通过列名和默认值定义列
CREATE TABLE table
[(column, column...)]
AS subquery;
create table emp1 as select * from employees;
#创建的emp1包含了employees的数据
create table emp2 as select * from employees where 1=2;
#创建的emp2是空表。
CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM employees
WHERE department_id = 80;
#创建并导入部门id是80的表数据
管理表
ALTER TABLE 语句
- 向现有的表中添加列
- 修改现有表中的列
- 删除现有表中的列
- 重命名现有表中的列
添加一列
ALTER TABLE dept
ADD job_id varchar(15);
#向dept添加一列
修改一列
- 可以修改列的数据类型,尺寸和默认值
- 对默认值的修改只影响之后对表的修改
ALTER TABLE dept
MODIFY (last_name VARCHAR(30));
#修改数据类型和尺寸
ALTER TABLE dept
MODIFY (salary double(9,2) default 1000);
#修改数据类型和尺寸和默认值
删除列
ALTER TABLE dept
DROP COLUMN job_id;
重命名列
ALTER TABLE dept
CHANGE department_name dept_name varchar(15);
#将department_name修改为dept_name
删除表
- 数据和结构都被删除
- 所有正在运行的相关事务被提交
- 所有相关索引被删除
- DROP TABLE 语句不能回滚
DROP TABLE dept;
清空表
- TRUNCATE TABLE语句
- 删除表中所有的数据
- 释放表的存储空间
- TRUNCATE 语句不能回滚
- DELETE语句删除数据,可以回滚
TRUNCATE TABLE detail_dept;
改变对象的名称
- 执行RENAME语句改变表,视图的名称
- 必须是对象的拥有者
ALTER table dept
RENAME TO detail_dept;
今天的分享就到这里了,欢迎小伙伴指正补充!