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.在删除数据库表之前,要确保该表的所有相关程序已经停止运行,以免影响其他程序的正常运行。

相关推荐
写代码也要符合基本法37 分钟前
Oracle SQL - 使用行转列PIVOT减少表重复扫描(实例)
数据库·sql·oracle
刺客xs1 小时前
MYSQL数据库----DCL语句
android·数据库·mysql
胖墩的IT1 小时前
在高并发场景下,仅依赖数据库机制(如行锁、版本控制)无法完全避免数据异常的问题
数据库·mysql
天天爱吃肉82181 小时前
汽车嵌入式开发:如何构建「不可替代」的核心竞争力?
数据库·汽车
DKPT2 小时前
Java设计模式之行为型模式(命令模式)介绍与说明
java·笔记·学习·设计模式
彬彬醤2 小时前
ChatGPT无法登陆?分步排查指南与解决方案
服务器·网络·数据库·网络协议·chatgpt
yingtianhaoxuan3 小时前
学习笔记-Excel统计分析——描述统计量的计算
笔记·学习
MUTA️3 小时前
《Llama: The Llama 3 Herd of Models》预训练数据篇——论文精读笔记
人工智能·笔记·深度学习
叁沐3 小时前
MySQL 14 count(*)这么慢,我该怎么办?
mysql
长风破浪会有时呀4 小时前
Redis 命令总结
数据库·redis·缓存