MySQL(06)—创建和管理表

创建和管理表

1. 创建数据库

  • 创建一个保存员工信息的数据库

    1
    2
    3
    create database employee_date;

    [2021-08-20 10:57:37] 1 row affected in 16 ms
  • 相关其他命令

    show database:查看当前数据库

    image-20210820105850350

    use employees:“使用”一个数据库,使其作为当前数据库

    1
    2
    myemployees> use employee_date
    [2021-08-20 11:00:02] completed in 0 ms
1.1 命名规则

数据库名不得超过30个字符,变量名限制为29个,必须只能包含A-Z,a-z,0-9,_共63个字符。不能在对象名的字符间留空格,必须不能和用户定义的其他对象重名,必须保证你的字段没有和和保留字、数据库系统或常用 方法冲突 •。保持字段名和类型的一致性,在命名字段并为其指定数 据类型的时候一定要保证一致性。假如数据类型在一 个表里是整数,那在另一个表里可就别变成字符型了

2. 创建表

CREAT TABLE语句

必须具备:

  • CREATE TABLE 权限

  • 存储空间

    1
    CREATE TABLE [schema.]table (column datatype [DEFAULT expr][,...]);

    必须指定:

    表名;列名,数据类型,尺寸

2.1. 创建表

语法

1
2
3
CREATE TABLE dept(deptno INT(2),
dname VARCHAR(14),
loc VARCHAR(13));

image-20210820110459757 image-20210820110527288

确认

1
DESCRIBE dept

3. 描述各种数据类型

3.1 常用数据类型
数据类型 描述
INT 使用4个字节保存整数数据
CHAR(size) 指定字符数据。若未指定,则默认一个字符,最大长度255
VARCHAR(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
1
2
3
4
5
6
7
8
9
10
11
12
13
#创建表
CREATE TABLE emp(
#int类型,自增
emp_id INT AUTO_INCREMENT,
#最多保存2个中英文字符
emp_name CHAR(20),
#总位数不超过15位
salary DOUBLE,
#日期类型
birthday DATE,
#主键
PRIMARY KEY(emp_id)
);
4.2 使用子查询创建表

使用AS subquery选项,将创建表和插入数据结合起来

1
2
CREATE TABLE table [(column,column...)]
AS subquery;

指定的列和子查询中的列要一一对应,通过列名和默认值定义列

  1. 复制现有表

    1
    2
    create table emp1 as select* from employees;
    create table emp2 as select* from employees [where ...];
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE dept80
    AS
    SELECT employee_id, last_name,
    salary*12 ANNSAL,
    hire_date
    FROM employees
    WHERE department_id = 80;

    image-20210820111043990 image-20210820111132924

4. 修改表的定义

ALTER TABLE语句

  • 向已有表中添加列
  • 修改现有表中的列
  • 删除现有表中的列
  • 重命名现有表中的列
  1. 追加一个新列

    1
    2
    3
    4
    alter table dept80
    add job_id varchar(15);

    [2021-08-20 11:12:51] completed in 28 ms

    image-20210820111326187

  2. 修改一个列

    可以修改列的数据类型,尺寸和默认值

    1
    2
    alter table dept80
    modify last_name varchar(30) default 'null_name';

    对默认值的修改只影响今后对表的修改

  3. 删除一个列

    使用DROP COLUMN子句删除不在需要的列

    1
    2
    alter table dept80
    drop column job_id;
    image-20210820112733644
  4. 重命名一个列

    使用CHANGE old_column new_column dataType子句重命名列

    1
    2
    alter table dept80
    change hiredate hire_date datetime;
    image-20210820113037400

5. 删除,重命名和清空表

5.1 删除表

数据和结构都被删除,所有正在运行的相关事务被提交,所有相关索引被删除,DROP TABLE语句不能回滚

1
2
3
drop table dept;

[2021-08-20 11:32:43] completed in 46 ms
5.2 清空表
  • TRUNCATE TABLE语句

    删除表中所有的数据,释放表的存储空间

    1
    truncate table dept;
    • TRUNCATE语句不能回滚

    • 可以使用 DELETE 语句删除数据,可以回滚

    • 对比:

      1
      2
      3
      4
      delete from emp2;
      select * from emp2;
      rollback;
      select * from emp2;
5.3 改变对象的名称

执行RENAME语句改变表,视图的名称

1
2
alter table dept80
rename to detail_dept;
image-20210820113816843