SQL语法之创建和管理表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TDCQZD/article/details/82708569

一、创建数据库

# 创建数据库,选择具体的库
#创建数据库
CREATE DATABASE temp;

#显示当前用户下的数据库
SHOW DATABASES;

# 使用某个具体的数据库,”使用”一个数据库,使其作为当前数据库
USE temp;

# 显示当前数据库下的所有的表
SHOW TABLES;

数据库名命名规则:

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

二、CREATE TABLE 语句

1、基本介绍

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

必须具备:

  • CREATE TABLE权限
  • 存储空间

必须指定:

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

2、创建表
1) 语法

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

2)确认

#查询表结构
DESCRIBE dept
创建表
CREATE TABLE emp (
  #int类型,自增
  emp_id INT AUTO_INCREMENT,
  #最多保存20个中英文字符
  emp_name CHAR (20),
  #总位数不超过15位
  salary DOUBLE,
  #日期类型
  birthday DATE,
  #主键
  PRIMARY KEY (emp_id)
) ;

3、常用数据类型

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

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

2) 指定的列和子查询中的列要一一对应
3)通过列名和默认值定义列
4)复制现有的表:

create table emp1 as select * from employees;
create table emp2 as select * from employees where 1=2;
--创建的emp2是空表。

案例实战:

#创建表
# 方式一:"白手起家"
CREATE TABLE emp1(
id INT,
NAME VARCHAR(15),
salary DOUBLE(10,2),
hire_date DATE
);

SELECT * FROM emp1;
DESC emp1;

# 方式二:(子查询创建表)基于现有的表
CREATE TABLE emp3
AS
SELECT employee_id,last_name,salary
FROM employees
WHERE department_id IN (60,70,80);

#创建表的同时,还可以导入原有表的数据
SELECT *
FROM emp3;


CREATE TABLE emp4
AS
SELECT d.department_id,d.department_name,AVG(salary),COUNT(employee_id)
FROM departments d LEFT JOIN employees e  
ON e.department_id = d.department_id
GROUP BY d.department_id,d.department_name;

SELECT * FROM emp4;

#在使用方式二创建表的同时,给表的字段重命名,新创建的表的字段名即为字段重命名的名。
CREATE TABLE emp5
AS
SELECT employee_id emp_id,last_name emp_name
FROM employees;

SELECT emp_id
FROM emp5;

#例子1:复制一个employees表,包括数据
CREATE TABLE employees_copy
AS
SELECT *
FROM employees;

#如上的方式复制,能将原表中的数据复制过来,同时新表的字段名和数据类型也与原表相同。
#但是,原表的约束是不能同步复制过来的。(除 not null)

SELECT *
FROM employees_copy;

DESC employees;
DESC employees_copy;

#例子2:复制一个employees表,不包括数据
CREATE TABLE employees_blank
AS
SELECT *
FROM employees
WHERE 1=2;

SELECT *
FROM employees_blank;

三、ALTER TABLE 语句

1、基本介绍
使用 ALTER TABLE 语句可以实现:
- 向已有的表中添加列
- 修改现有表中的列
- 删除现有表中的列
- 重命名现有表中的列

2、追加一个新列

ALTER TABLE dept80 
ADD job_id varchar(15);

3、修改一个列

  • 可以修改列的数据类型, 尺寸和默认值
  • 对默认值的修改只影响今后对表的修改
ALTER TABLE dept80
MODIFY      (last_name VARCHAR(30));
Table altered.

ALTER TABLE dept80
MODIFY      (salary double(9,2) default 1000);
Table altered.

4、重命名一个列
使用 CHANGE old_column new_column dataType子句重命名列

ALTER TABLE  dept80
CHANGE department_name dept_name varchar(15); 
Table altered.

5、删除一个列
使用 DROP COLUMN 子句删除不再需要的列.

ALTER TABLE  dept80
DROP COLUMN  job_id; 
Table altered.

6、改变对象的名称(重命名表)

  • 执行RENAME语句改变表, 视图的名称
  • 必须是对象的拥有者
ALTER table dept
RENAME TO detail_dept;
Table renamed.

实战练习:

#修改表 alter table
DESC emp2;
# 添加一个列
ALTER TABLE emp2
ADD email VARCHAR(25);

SELECT *
FROM emp2;

#  删除一个列
ALTER TABLE emp2
DROP COLUMN email;

#  修改现有的列
# 可以修改列的存储范围、数据类型(通常不会改数据类型)
ALTER TABLE emp2
MODIFY salary DOUBLE(15,2);

DESC emp2;
#如果存在数据了,通常不会修改字段的数据类型
ALTER TABLE emp2
MODIFY last_name DOUBLE(10,2); 

ALTER TABLE emp2
MODIFY salary VARCHAR(25);#变量类型的自动转换。 2300.50 -> '2300.50'

#  重命名列 (oracle : alter emp2 rename column last_name to emp_name)
DESC emp2;

ALTER TABLE emp2
CHANGE last_name emp_name VARCHAR(20);

# 重命名表 (oracle : rename emp2 to myemp2)
ALTER TABLE emp2
RENAME TO myemp2;

DESC emp2;#Table 'myemployees.emp2' doesn't exist
DESC myemp2;

四、删除表

DROP TABLE dept80;
Table dropped.

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

#删除表
DROP TABLE myemp2;
DESC myemp2; #Table 'myemployees.myemp2' doesn't exist

五、清空表

TRUNCATE TABLE detail_dept;
Table truncated.

1、RUNCATE TABLE 语句:

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

2、 TRUNCATE语句不能回滚
3、可以使用 DELETE 语句删除数据,可以回滚

猜你喜欢

转载自blog.csdn.net/TDCQZD/article/details/82708569