当前位置: 首页 > article >正文

创建管理表

一条数据存储的过程

 

MySQL 数据库系统从大到小依次是 数据库服务器 数据库 数据表 、数

据表的 行与列

 

标识符命名规则

数据库名、表名不得超过30个字符,变量名限制为29个

必须只能包含 A–Z, a–z, 0–9, _共63个字符

数据库名、表名、字段名等对象名中间不要包含空格

同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名

必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使

`(着重号)引起来

保持字段名和类型的一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据

类型在一个表里是整数,那在另一个表里可就别变成字符型了

 

创建和管理数据库

 

创建数据库

方式1:创建数据库

CREATE DATABASE 数据库名;

例:

CREATE DATABASE mytest1;#创建的此数据库使用的是默认的字符集

方式2:创建数据库并指定字符集

CREATE DATABASE 数据库名 CHARACTER SET 字符集;

注意:如果创建数据库时,如果没有显示的指明字符集,那么默认为数据库用的字符集

             字符集用单引号引起来

例:

CREATE DATABASE mttest2 CHARACTER SET 'gbk';

方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐 ---------建议在创建表时指明数据库

CREATE DATABASE IF NOT EXISTS 数据库名  CHARACTER SET '字符集';

例:

CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';

CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';

 

注意:①如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建数据库。

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

 

使用数据库

查看当前所有的数据库

SHOW DATABASES; #有一个S,代表多个数据库

例:

SHOW DATABASES;

 

查看当前正在使用的数据库

SELECT DATABASE(); #使用的一个 mysql 中的全局函数

例:

SELECT DATABASE() FROM DUAL;

#查看当前数据库中保存的数据表

例:

SHOW TABLES;

 

查看指定库下所有的表

SHOW TABLES FROM 数据库名;

例:

SHOW TABLES FROM atguigudb;

 

查看数据库的创建信息

SHOW CREATE DATABASE 数据库名;

或者:

SHOW CREATE DATABASE 数据库名\G

例:

SHOW CREATE DATABASE mytest1;

 

使用/切换数据库

USE 数据库名;

例:

USE mytest1;

 

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

据库名.”

 

修改数据库

更改数据库字符集

ALTER DATABASE 数据库名 CHARACTER SET 字符集; #比如:gbkutf8

 

删除数据库

方式1:删除指定的数据库

DROP DATABASE 数据库名;

例:

DROP DATABASE mytest1;

 

方式2删除指定的数据库( 推荐

如果要删除的数据库存在,则删除成功;如果不存在,则结束,不会报错

DROP DATABASE IF EXISTS 数据库名;

例:

DROP DATABASE IF EXISTS mytest2;

创建表的两种方式

 

创建方式1

必须具备:

                  CREATE TABLE权限

              存储空间

语法格式:

                      

                                CREATE TABLE [IF NOT EXISTS] 表名(

                  字段1, 数据类型 [约束条件] [默认值],

                  字段2, 数据类型 [约束条件] [默认值],

                  字段3, 数据类型 [约束条件] [默认值],

                                        ……

                                       [表约束条件]

                                           );

注意:

加上了IF NOT EXISTS关键字,则表示:如果当前数据库中不存在要创建的数据表,则创建数据表;

如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。

 

#查看表结构

#desc 表名;

#

#show create table 表名

#注意:

#    如果在创建表时未指明使用的字符集,则默认使用表所在的数据库的字符集

#方式一创建表

CREATE TABLE IF NOT EXISTS myemp1(  #需要用户有创建表的权限

                                  id INT,

                                  emp_name VARCHAR(15), #使用varchar来定义字符串,必须在使用varchar时指明其长度。

                                  hire_date DATE);

#查看表数据

SELECT * FROM myemp1;#是没有数据的

 

必须指定:

                           表名

                           列名(或字段名),数据类型,长度

可选指定:

                          约束条件

                          默认值

 

 

创建方式2

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

                             指定的列和子查询中的列要一一对应

                             通过列名和默认值定义列

#方式二:基于现有的表创建一个新的表,-----------------------可以将select查询出来的结果放在一个表中

#此新的表就是select语句查询出来的结果

#若没有加过滤条件,则该表中是有数据的,且这些数据与其基于的表中的数据相同

CREATE TABLE myemp2

AS

SELECT employee_id,last_name,salary

FROM employees;



SELECT *

FROM myemp2;#该表中是有数据的,且这些数据与其基于的表中的数据相同

#结论一:查询语句中字段的别名,可以作为新创建表的字段的名称;

#结论二:此时的查询语句可以结构比较丰富,使用各种select语句

CREATE TABLE myemp3

AS

SELECT e.employee_id "emp_id",last_name "lname",department_name

FROM employees e JOIN departments d

ON e.department_id=d.department_id;



SELECT *

FROM myemp3;



DESC myemp3;#字段名用的是别名

#练习一:创建一个表employees_copy,实现对employees的复制,包括表数据

CREATE TABLE employees_copy

AS

SELECT *

FROM employees;

#练习二:创建一个表employees_blank,实现对employees表的复制,不包括表数据(where将所有的数据都过滤掉)

CREATE TABLE employees_blank

AS

SELECT *

FROM employees

WHERE 1=2;#用一个不可能实现的条件

修改,重命名,删除,清空表

修改表

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

使用 ALTER TABLE 语句可以实现:

                          向已有的表中添加列 ---->ADD

                          修改现有表中的列 ----->MODIFY

                          重命名现有表中的列------>RENAME

                          删除现有表中的列 -------->DROP

 

 

追加一个列

语法格式如下:                      

                                        ALTER TABLE 表名 ADD COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;

 

例如:

#默认添加到表中的最后一个字段的位置

ALTER TABLE myemp1

ADD salary DOUBLE(10,2);#一共有十为,小数点后有两位

#将字段添加到首位

ALTER TABLE myemp1

ADD phone_number VARCHAR(20) FIRST

#添加到指定字段后

 

ALTER TABLE myemp1

ADD email VARCHAR(45) AFTER emp_name;

 

修改一个列

可以修改列的数据类型,长度、默认值和位置 (一般不会修改数据类型,一般修改长度)

修改字段数据类型、长度、默认值、位置的语法格式如下:

                                       ALTER TABLE 表名 MODIFY COLUMN】 字段名1 字段类型 【DEFAULT 默认值】【FIRST|AFTER 字段名2;

注意:

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

               此外,还可以通过此种方式修改列的约束

例如:

ALTER TABLE myemp1

MODIFY emp_name VARCHAR(25);

 

 

重命名一个列

使用 CHANGE old_column new_column dataType子句重命名列。语法格式如下:

                              ALTER TABLE 表名 CHANGE column】 列名 新列名 新数据类型;

 

例如:

#不改变其长度

ALTER TABLE myemp1

CHANGE salary monthly_salary DOUBLE(10,2);#重命名时不能漏掉其数据类型

#在重命名时修改其长度

ALTER TABLE myemp1

CHANGE email my_email VARCHAR(35);

删除一个列

删除表中某个字段的语法格式如下:

                             ALTER TABLE 表名 DROP COLUMN】字段名

 

例如:

ALTER TABLE myemp1

DROP COLUMN my_email;

重命名表

# 方式一使用RENAME

RENAME TABLE myemp1

TO myemp11;

#方式二使用ALTER

ALTER TABLE myemp2

RENAME TO myemp12;(to可以省略)

 

删除表 (不光将表结构删除掉,同时表中的数据也删除掉,释放表空间)

MySQL中,当一张数据表 没有与其他任何数据表形成关联关系 时,可以将当前数据表直接删除。

数据和结构都被删除

所有正在运行的相关事务被提交

所有相关索引被删除

语法格式:

                             DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];

 

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

              DROP TABLE 语句不能回滚

例如:

DROP TABLE IF EXISTS myemp12;

 

清空表 (表示清空表中的所有数据,但表的结构保留)

TRUNCATE TABLE语句:

                删除表中所有的数据

                释放表的存储空间

注意:

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

 

例如:TRUNCATE TABLE employees_copy;

DCL中的COMMIT与ROLLBACK

COMMIT:提交数据(一旦执行COMMIT则数据就被永久的保存在了数据库值,意味则数据不可以回滚)

ROLLBACK:回滚数据,(一旦执行ROLLBACK则可以实现数据的回滚。回滚到最近一次COMMIT之后)

对比 TRUNCAT TABLE DELETE FROM

#相同点:都可以实现对表中所有数据的删除,同时保留表的结构。

#不同点:     

        TRUNCATE TABLE:一旦执行此操作,就不可回滚。

        DELETE FROM:一旦执行此操作,表数据可以全部回滚(不带WHERE时)。同时数据可以实现滚

DDL与DML的说明

    ①DDL的操作一旦执行,就不可回滚(指令SET autocommit=FALSEDDL操作失效)

     因为在执行完DDL之后,一定会执行一次COMMIT

     而此COMMIT不受指令SET autocommit=FALSE影响)

    ②DML的操作默认情况,一旦执行也是不可回滚的。但是如果在执行DML之间,执行了

      SET autocommit=FALSE ,则执行的DML操作就可以实现回滚。(回滚到最近一次COMMIT之后)

补充:

DDLData Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索

引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。

主要的语句关键字包括 CREATE DROP ALTER 等。

 

DMLData Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记

录,并检查数据完整性。

主要的语句关键字包括 INSERT DELETE UPDATE SELECT 等。

SELECTSQL语言的基础,最为重要。

 

DCLData Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和

安全级别。

主要的语句关键字包括 GRANT REVOKE COMMIT ROLLBACK SAVEPOINT 等。

因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。

还有单独将 COMMIT ROLLBACK 取出来称为TCL Transaction Control Language,事务控制语

言)。

#演示:DELETE FROM

COMMIT;#先将myemp3中的数据提交一次保存好

SELECT * FROM myemp3;



SET autocommit=FALSE;#在执行DML之前执行SET autocommit=FALSE

DELETE FROM myemp3;#清空myemp3中的所有数据



SELECT * FROM myemp3;#查看myemp3中的数据,检查清空成功



ROLLBACK;



SELECT * FROM myemp3;#查看myemp3中的数据,回滚成功,回滚到最近一次COMMIT之后

#演示:TRUNCATE TABLE------------数据不可以实现回滚

COMMIT;#先将myemp3中的数据提交一次保存好

SELECT * FROM myemp3;



SET autocommit=FALSE;#在执行DML之前执行SET autocommit=FALSE

TRUNCATE TABLE myemp3;#清空myemp3中的所有数据



SELECT * FROM myemp3;#查看myemp3中的数据,检查清空成功



ROLLBACK;



SELECT * FROM myemp3;#数据没有回来,所以指令SET autocommit=FALSE对DDL操作失效


http://www.kler.cn/a/472642.html

相关文章:

  • 基于单片机的数字气压计设计
  • 爬虫学习记录
  • Qt QDockWidget详解以及例程
  • 【SQL】掌握SQL查询技巧:数据分组与排序
  • oracle闪回恢复数据:(闪回查询,闪回表,闪回库,回收站恢复)
  • 利用大语言模型解决推理任务
  • Linux vi/vim 编辑器:功能强大的文本处理工具
  • 力扣刷题:数组OJ篇(上)
  • C++编程等级认证学习计划day1-1
  • [python3]Excel解析库-xlwt
  • 创建型模式-工厂模式
  • 继承(6)
  • C++ 中的 const 和 constexpr: 深入对比与最佳实践
  • HTML基础入门——简单网页页面
  • 电致变色和电泳技术在低功耗显示器中大放异彩
  • 一次完成Win10下MySQL 9.1 的安装
  • 算法的五个重要特性和4个基本标准
  • 医疗可视化大屏 UI 设计新风向
  • el-tree拖拽光标错位问题
  • oracle闪回恢复数据:(闪回查询,闪回表,闪回库,回收站恢复)
  • 本地导入封装的模块 在docker内报错ImportError
  • C#核心技术---Lambda表达式
  • SSM-SpringMVC-请求响应、REST、JSON
  • 基于 Nuxt3 + Obsidian 搭建个人博客
  • Synthesia技术浅析(四):自然语言处理
  • 深度学习J8周 Inception v1算法实战与解析