ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

08. 创建和管理表

2022-01-24 12:02:29  阅读:148  来源: 互联网

标签:VARCHAR employees 管理 -- 创建 08 ALTER TABLE 数据库


一、基础知识

1.1、一条数据的存储过程

  存储数据时处理数据的第一步。只有正确地把数据存储起来,我们才能进行有效地处理和分析。在MySQL中,一个完整的数据存储过程总共有4步,分别是 创建数据库确认字段创建数据表插入数据。从系统架构的层次上看,MySQL数据库系统从大到小依次是 数据库服务器数据库数据表 、 数据表的

1.2、标识符的命名规则

  • 数据库名、表名不得超多30个字符,变量名限制为29个
  • 必须只能包含A-Z,a-z,0-9,_ 共63个字符
  • 数据库名、表名、字段名等对象名中间不能包含空格
  • 同一个MySQL软件中,数据库名不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 必须保证字段名没有和关键字和保留字、数据库系统或常用方法冲突
    • 如果坚持使用,请在SQL语句中使用着重号(`)引起来
  • 保持字段名和类型的一致性:
    • 在命名字段并为其指定数据类型的时候一定要保证一致性

1.4、MySQL中的数据类型

类型 类型举例
整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型 FLOAT、DOUBLE
定点数类型 DECIMAL
位类型 BIT
日期时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型 ENUM
集合类型 SET
二进制字符串类型 BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型 JSON对象、JSON数组
空间数据类型 单值:GEOMETRY、POINT、LINESTRING、POLYGON;
集合:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION

其中,常用的几类类型介绍如下:

数据类型 描述
INT 从-231到231-1的整型数据。存储大小为 4个字节
CHAR(size) 定长字符数据。若未指定,默认为1个字符,最大长度255
VARCHAR(size) 可变长字符数据,根据字符串实际长度保存,必须指定长度
FLOAT(M,D) 单精度,占用4个字节,M=整数位+小数位,D=小数位。 D<=M<=255,0<=D<=30,默认M+D<=6
DOUBLE(M,D) 双精度,占用8个字节,D<=M<=255,0<=D<=30,默认M+D<=15
DECIMAL(M,D) 高精度小数,占用M+2个字节,D<=M<=65,0<=D<=30,最大取值范围与DOUBLE相同。
DATE 日期型数据,格式'YYYY-MM-DD'
BLOB 二进制形式的长文本数据,最大可达4G
TEXT 长文本数据,最大可达4G

二、创建和管理数据库

2.1、创建数据库

-- 方式1:创建数据库
CREATE DATABASE 数据库名; 
-- 方式2:创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
-- 方式3:判断数据库是否已经存在,不存在则创建数据库(`推荐`),如果存在,则不创建
CREATE DATABASE IF NOT EXISTS 数据库名; 

注意:DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的。

example:

CREATE DATABASE IF NOT EXISTS template CHARACTER SET utf8;

2.2、使用数据库

-- 查看当前所有的数据库
SHOW DATABASES;
-- 查看当前正在使用的数据库
SELECT DATABASE(); 
-- 查看指定库下所有的表
SHOW TABLES FROM 数据库名;
-- 查看数据库的创建信息
SHOW CREATE DATABASE 数据库名;
-- 使用/切换数据库
USE 数据库名;
-- 更改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET 字符集;
-- 方式1:删除指定的数据库
DROP DATABASE [IF EXISTS] 数据库名;

注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上“数据库名.”。

example:

-- 查看当前所有的数据库
SHOW DATABASES;
-- 查看当前正在使用的数据库
SELECT DATABASE(); 
-- 查看指定库下所有的表
SHOW TABLES FROM template;
-- 查看数据库的创建信息
SHOW CREATE DATABASE template;
-- 使用/切换数据库
USE template;
-- 更改数据库字符集
ALTER DATABASE template CHARACTER SET utf8;
-- 删除指定的数据库
DROP DATABASE IF EXISTS template;

三、创建表

3.1、创建表的方式

方式一

CREATE TABLE [IF NOT EXISTS] 表名(
	字段1, 数据类型 [约束条件] [默认值],
	字段2, 数据类型 [约束条件] [默认值],
	字段3, 数据类型 [约束条件] [默认值],
	……
	[表约束条件]
);

加上了IF NOT EXISTS关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。

example:

CREATE TABLE IF NOT EXISTS emp(
    id INT,
    emp_name VARCHAR(15),
    hire_date DATE
);

方式二:基于现有的表创建新的表

CREATE TABLE 表名2
AS
SELECT 字段名 FROM 表名1;

example:

CREATE TABLE emp1
AS 
SELECT id,emp_name,hire_date
FROM emp;

3.2、查看数据表结构

-- 查看数据表结构
DESC/DESCRIBE 表名;
SHOW CREATE TABLE 表名;

使用SHOW CREATE TABLE语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码。

example:

DESC emp;
SHOW CREATE TABLE emp;

四、修改表

修改表指的是修改数据库中已经存在的数据表的结构。

使用 ALTER TABLE 语句可以实现:

  • 向已有的表中添加列
  • 修改现有表中的列
    • 可以修改列的数据类型,长度、默认值、位置、约束等
    • 对默认值的修改只影响今后对表的修改
  • 删除现有表中的列
  • 重命名现有表中的列
-- 追加一个列:默认添加到表中的最后一个字段的位置
ALTER TABLE 表名 ADD [COLUMN] 字段名 字段类型 [FIRST|AFTER 字段名];
-- 修改一个列
ALTER TABLE 表名 MODIFY [COLUMN] 字段名1 字段类型 [DEFAULT 默认值][FIRST|AFTER 字段名2];
-- 重命名一个列
ALTER TABLE 表名 CHANGE [column] 列名 新列名 新数据类型;
-- 删除一个列
ALTER TABLE 表名 DROP [COLUMN]字段名;
-- 重命名表
RENAME TABLE 旧表名 TO 新表名;
ALTER table 旧表名 RENAME [TO] 新表名; 

example

-- 追加一个字段:默认添加到表中的最后一个字段的位置
ALTER TABLE emp ADD salary DOUBLE(10,2);
ALTER TABLE emp ADD phone_number VARCHAR(20) FIRST;
ALTER TABLE emp ADD email VARCHAR(45) AFTER emp_name;

-- 修改一个字段
ALTER TABLE emp MODIFY emp_name VARCHAR(25);
ALTER TABLE emp MODIFY emp_name VARCHAR(35) DEFAULT 'sakura';

-- 重命名一个字段
ALTER TABLE emp CHANGE salary montyly_salary DOUBLE(10,2);
ALTER TABLE emp CHANGE email my_email VARCHAR(50);

-- 删除一个字段
ALTER TABLE emp DROP COLUMN my_email;

-- 重名名表
RENAME TABLE emp TO emp2;
ALTER TABLE emp2 RENAME TO myemp;

六、删除表

  • 在MySQL中,当一张数据表没有与其他任何数据表形成关联关系时,可以将当前数据表直接删除。
  • 数据和结构都被删除
  • 所有正在运行的相关事务被提交
  • 所有相关索引被删除
  • DROP TABLE 语句不能回滚
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];

IF EXISTS的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。

***sql
-- 删除表
DROP TABLE IF EXISTS emp1;


七、清空表

  • TRUNCATE TABLE语句:
    • 删除表中所有的数据
    • 释放表的存储空间
  • TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚
TRUNCATE TABLE 表名;

example

-- 复制表
CREATE TABLE employee_copy 
AS 
SELECT * FROM atguigudb.employees;

SELECT * FROM employee_copy;

-- 清空表
TRUNCATE TABLE employee_copy;

SELECT * FROM employee_copy;

7.1、DCL 中 COMMIT 和 ROLLBACK

  • COMMIT:提交数据
    • 一旦执行COMMIT,则数据就被永久的保存在数据库中,意味着数据不可以回滚;
  • ROLLBACK:回滚数据
    • 一旦执行ROLLBACK,则可以实现数据的回滚,回滚到最近的一次COMMIT之后;

7.2、对比 TRUNCATE TABLE 和 DELETE FROM

  • 相同点:
    • 都可以实现对表中所有数据的删除,同时保留表的结构。
  • 不同点:
    • TRUNCATE TABLE:
      • 一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
    • DELETE FROM:
      • 一旦执行此操作,表数据可以全部清除(不带where)。
      • 同时数据可以实现回滚。

7.3、DDL 和 DML 的说明

  • DDL的操作一旦执行,就不可回滚;
    • 在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响;
  • DML的操作默认情况下,一旦执行,也是不可回滚的;
    • 如果在执行DML之前,执行了 SET autocommit = FALSE,则执行的DML操作就可以回滚;
-- 复制表
CREATE TABLE employees_copy
AS
SELECT * FROM atguigudb.employees;

-- 先提一次
COMMIT;
SELECT * FROM employees_copy;
-- 关闭自动提交
SET autocommit = FALSE;
-- 删除表的数据
DELETE FROM employees_copy;
SELECT * FROM employees_copy;
-- 回滚数据
ROLLBACK;
SELECT * FROM employees_copy;

-- 先提一次
COMMIT;
-- 关闭自动提交
SET autocommit = FALSE;
-- 删除表的数据
TRUNCATE TABLE employees_copy;
SELECT * FROM employees_copy;
-- 回滚数据
ROLLBACK;
SELECT * FROM employees_copy;

八、练习题

-- 1. 创建数据库test01_office,指明字符集为utf8。并在此数据库下执行下述操作 
CREATE DATABASE IF NOT EXISTS test01_office DEFAULT CHARACTER SET 'utf8';

-- 2. 创建表dept01 
/*
	字段 类型 
	id INT(7) 
	NAME VARCHAR(25) 
*/
CREATE TABLE IF NOT EXISTS dept01(
	id INT(7),
	NAME VARCHAR(25)
);

-- 3. 将表departments中的数据插入新表dept02中 
CREATE TABLE IF NOT EXISTS dept02
AS 
SELECT * FROM atguigudb.departments;

-- 4. 创建表emp01 
/*
	字段 		类型 
	id 		INT(7)
	first_name 	VARCHAR (25) 
	last_name 	VARCHAR(25) 
	dept_id 	INT(7) 
*/
CREATE TABLE IF NOT EXISTS emp01 (
	id INT(7),
	first_name VARCHAR(25),
	last_name VARCHAR(25),
	dept_id INT(7)
);

-- 5. 将列last_name的长度增加到50 
ALTER TABLE emp01 MODIFY last_name VARCHAR(50);

-- 6. 根据表employees创建emp02 
CREATE TABLE IF NOT EXISTS emp02
AS
SELECT * FROM atguigudb.employees;

-- 7. 删除表emp01 
DROP TABLE emp01;

-- 8. 将表emp02重命名为emp01 
-- alter table emp02 rename to emp01;
RENAME TABLE emp02 TO emp01;

-- 9.在表dept02和emp01中添加新列test_column,并检查所作的操作 
ALTER TABLE dept02 ADD COLUMN test_column VARCHAR(10);
ALTER TABLE emp01 ADD test_column VARCHAR(10);

-- 10.直接删除表emp01中的列 department_id
ALTER TABLE emp01 DROP COLUMN department_id;

-- 11、创建数据库 test02_market 
CREATE DATABASE IF NOT EXISTS test02_market CHARACTER SET 'utf8';

-- 12、创建数据表 customers
/*
	字段名		数据类型
	c_num		int 
	c_name		varchar(50) 
	c_contact	varchar(50) 
	c_city 		varchar(50) 
	c_birth 	date
*/
CREATE TABLE IF NOT EXISTS customers (
	c_num INT,
	c_name VARCHAR(50),
	c_contact VARCHAR(50),
	c_city VARCHAR(50),
	c_birth DATE
);

-- 13、将 c_contact 字段移动到 c_birth 字段后面 
ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth;

-- 14、将 c_name 字段数据类型改为 varchar(70) 
ALTER TABLE customers MODIFY c_name VARCHAR(70);

-- 15、将c_contact字段改名为c_phone 
ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50);

-- 16、增加c_gender字段到c_name后面,数据类型为char(1) 
ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name;

-- 17、将表名改为customers_info
RENAME TABLE customers TO customers_info;

-- 18、删除字段c_city
ALTER TABLE customers_info DROP COLUMN c_city;

-- 19、创建数据库test03_company 
CREATE DATABASE IF NOT EXISTS test03_company CHARACTER SET 'utf8';

-- 20、创建表offices
/*
	字段名		数据类型
	officeCode	int 
	city 		varchar(30) 
	address 	varchar(50) 
	country 	varchar(50) 
	postalCode 	varchar(25)
*/
CREATE TABLE IF NOT EXISTS offices (
	officeCode INT,
	city VARCHAR(30),
	address VARCHAR(50),
	country VARCHAR(50),
	postalCode VARCHAR(25)
);

-- 21、创建表employees
/*
	字段名		数据类型
	empNum		int 
	lastName	varchar(50) 
	firstName 	varchar(50) 
	mobile 		varchar(25) 
	code 		int 
	jobTitle 	varchar(50) 
	birth 		date 
	note 		varchar(255) 
	sex 		varchar(5)
*/
CREATE TABLE IF NOT EXISTS employees (
	empNum INT,
	lastName VARCHAR(50),
	first_name VARCHAR(50),
	mobile VARCHAR(25),
	CODE INT,
	jobTitle VARCHAR(50),
	birth DATE,
	note VARCHAR(255),
	sex VARCHAR(5)
);

-- 22、将表employees的mobile字段修改到code字段后面 
ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER CODE;

-- 23、将表employees的birth字段改名为birthday 
ALTER TABLE employees CHANGE birth birthday DATE;

-- 24、修改sex字段,数据类型为char(1) 
ALTER TABLE employees MODIFY sex CHAR(1);

-- 25、删除字段note 
ALTER TABLE employees DROP COLUMN note;

-- 26、增加字段名favoriate_activity,数据类型为varchar(100) 
ALTER TABLE employees ADD favoriate_activity VARCHAR(100);

-- 27、将表employees的名称修改为 employees_info
RENAME TABLE employees TO employees_info;

标签:VARCHAR,employees,管理,--,创建,08,ALTER,TABLE,数据库
来源: https://www.cnblogs.com/nanoha/p/15838851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有