MYSQL笔记2

创建表:

格式:

create table 表名(表选项)

表定义选项格式为:

列名1 列类型1 约束, 列名2 列类型2 约束,......

默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误

使用 crate table 创建表时,必须指定以下信息:

要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSER等。

必须指定数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开

示例1:创建数据库并新建表

数据表属于数据库,在创建数据表之前,应使用语句"use <数据库>"指定操作在哪个数据库中进行,如果没有选择数据库,就会抛出 No database selected 的错误

mysql> select database(); # 查看当前数据库

mysql> create database mydb2_stuinfo; # 创建数据库

Query OK, 1 row affected (0.02 sec)

mysql> use mydb2_stuinfo; # 使用数据库

Database changed

mysql> create table student1(id int, name varchar(30), sex char(2), age int unsigned, score float, addr varchar(50));

Query OK, 0 rows affected (0.02 sec)

mysql> show tables;

+-------------------------+

| Tables_in_mydb2_stuinfo |

查看表:

show语句:显示当前数据库中已有的数据表

格式:show table [from 数据库名] [like wild]

describe语句:查看数据表中各列的信息

格式:{describe|desc}表名[列名]; # or show columns from 表名称;

mysql> desc student1;

+-------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id | int | YES | | NULL | |

| name | varchar(30) | YES | | NULL | |

| sex | char(2) | YES | | NULL | |

| age | int unsigned | YES | | NULL | |

| score | float | YES | | NULL | |

| addr | varchar(50) | YES | | NULL | |

+-------+--------------+------+-----+---------+-------+

6 rows in set (0.00 sec)

mysql> show columns from student1;

+-------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id | int | YES | | NULL | |

| name | varchar(30) | YES | | NULL | |

| sex | char(2) | YES | | NULL | |

| age | int unsigned | YES | | NULL | |

| score | float | YES | | NULL | |

| addr | varchar(50) | YES | | NULL | |

+-------+--------------+------+-----+---------+-------+

6 rows in set (0.00 sec)

字段意义分析:

Field :字段名称

type:字段类型

null:是否允许为空

key:索引类型

default:默认值

extra:填充

使用\G可以查看更全面的表定义信息:
mysql> show create table student1\G
*************************** 1. row ***************************
Table: student1
Create Table: CREATE TABLE `student1` (
`id` int DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`sex` char(2) DEFAULT NULL,
`age` int unsigned DEFAULT NULL,
`score` float DEFAULT NULL,
`addr` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

删除表

格式: drop table [if exists] 表名:

注意:

用户必须拥有执行 drop table 命令的权限,否则数据表不会被删除

推荐使用if exists字句,即先判断是否存在,存在则删除,如:

mysql> drop table if exists tb1;

Query OK, 0 rows affected (0.01 sec)

修改表:

更改表名(重命名):

语法1:

alter table 表名 rename 新表名;

语法2:

rename table 表名 to 新表名;

添加新列:

alter table 表名 add 新列名 列类型 [after|first] 列名;

after:在指定列之后插入新列

first:在第一列插入新列

注意:无before关键字

例:增加一列password

mysql> alter table student1 add password char(8);

Query OK, 0 rows affected (0.01 sec)

Records: 0 Duplicates: 0 Warnings: 0

注意:数据库操作后得到的反馈,表明操作的结果。这个信息表示:

Records: 2: 表示成功导入或处理的记录总数是2条。

Duplicates: 0: 表示在操作过程中没有发现重复的记录。

Warnings: 0: 表示在操作过程中没有产生任何警告。

删除列:

格式:alter table 表名 drop 列名;

修改列名:

格式: alter table 表名 change 旧列名 新列名 列类型;

修改列类型:

格式:alter table 表名 modifyn 列名 列类型;

修改列位置:

格式:alter table 表名 modify 列名 列类型 after 某列;

复制表的结构:

方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到新表中,语法格式如下:

create table 新表名 like 源表 #(结构)

方法二:在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中,下面的语法格式将源表的结构和记录都拷贝到新表中:

create table 新表名 select * from 源表 #(结构和内容)
方法三:如果已经存在一张结构一致的表,复制数据:

insert into 表名 select * from 来源表; #(同结构和类型可以插入数据)

数据库字典

数据字典:类似于系统编目或花名册,它保存数据库服务器上的元数据信息(数据库的整体属性信息)

元数据(meta data):即"data about data" 关于数据的数据,理解为描述数据的数据,内容包括:数据库的属性信息、数据表的属性信息、字段的属性信息、视图的属性信息、用户信息、统计类信息等。

information_schema数据库是MySQL系统自带的数据库,它提供了数据库元数据的访问方式

show databases;

+--------------------+

| information_schema |

| mydb1_test |

| mydb2_stuinfo |

| mydb3_employee |

| mydb4_product |

| mysql |

| performance_schema |

| sys |

+--------------------+

8 rows in set (0.00 sec)

information_schema就像是MySQL实例的一个百科全书,记录了数据库当中大部分我们需要了结的信息,比如字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索引信息,参数,优化,锁和事物等等。

通过information_schema我们可以窥透整个MySQL实例的运行情况,可以了结MySQL实例的基本信息,甚至优化调优,维护数据库等,可以说是真正的一部百科全书。

mysql> use information_schema ;

mysql> show tables;

常用表解释

tables-存放数据库里所有的数据表、以及每个表所在数据库。

schemata-存放数据库里所有的数据库信息

views-存放数据库里所有的视图信息。

columns-存放数据库里所有的列信息。

triggers-存放数据库里所有的触发器。

routines-存放数据库里所有存储过程和函数。

key_column_usage-存放数据库所有的主外键

table_constraints-存放数据库全部约束。

statistics-存放了数据表的索引。

......

删除的注意事项:
1.删除数据库表之前,一定要备份数据,以免数据丢失。
2.在删除数据库表之前,要确保该表没有被其他的表所引用,否则可能会破坏外键约束。
3.在删除数据库表之前,要确保该表的数据已经备份,并且不再需要使用。
4.在删除数据库表之前,要确保该表的数据已经被清空,否则会破坏外键约束。
5.在删除数据库表之前,要确保该表的所有索引都已经被删除。如果还存在索引,可能会导致删除失败。
6.在删除数据库表之前,要确保该表的所有相关程序已经停止运行,以免影响其他程序的正常运行。

相关推荐
luckys.one1 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
言之。2 小时前
Django中的软删除
数据库·django·sqlite
汇能感知3 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun3 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao3 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾4 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
阿里嘎多哈基米4 小时前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
抠脚学代码4 小时前
Ubuntu Qt x64平台搭建 arm64 编译套件
数据库·qt·ubuntu
jakeswang4 小时前
全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析
数据库·mysql
DKPT4 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习