农民 发表于 2025-3-12 08:14:21

MySQL数据库中,数据库及表的创建和管理

一、底子知识

(一)、标志符的定名规则

1.数据库名、表名不得超过30个字符,变量名限定为29个
2.必须只能包含 A–Z, a–z, 0–9, _共63个字符
3.数据库名、表名、字段名等对象名中间不要包含空格
4.同一个MySQL软件中,数据库不能同名;同一个数据库中,表不能重名;同一个表中,字段不能重名
5.必须保证你的字段没有和生存字、数据库系统或常用方法辩论。如果有辩论并要坚持使用,则需要在SQL语句中使用`(着重号)引起来
6.保持字段名和范例的一致性:在定名字段并为其指定数据范例的时间肯定要保证一致性,如果数据范例在一个表里是整型,那么在另一个表中也要保持为整型
(二)、MySQL中的数据范例

整型:INT、BIGINT
浮点范例:FLOAT、 DOUBLE
定点数范例:DECIMAL
位范例:BIT
日期时间范例:YEAR、TIME、DATE、DATETIME
文本字符串范例:CHAR、 VARCHAR
摆列范例:ENUM
聚集范例:SET
二进制字符串范例:BINARY、 VARBINARY
JSON范例:JSON对象、JSON数组
对常用数据范例的描述 :
INT:存储大小为 4个字节 。
CHAR(size):定长字符数据。可不指定size大小,若未指定,默认为1个字符。若指定,size最大值为255。
VARCHAR(size) :可变长字符数据,根据字符串实际长度生存,但必须指定长度。
FLOAT(M,D) 单精度:占用4个字节,M=该数值的总位数(整数位数+小数位数),D=小数位数。
DOUBLE(M,D) 双精度:占用8个字节,M=该数值的总位数(整数位数+小数位数),D=小数位数。
DECIMAL(M,D) 高精度小数:占用M+2个字节。
DATE 日期型数据:格式’YYYY-MM-DD’。
二、数据库的创建与管理

(一)、创建数据库

方法1:create database 数据库名;
mysql> create database test01;
Query OK, 1 row affected (0.01 sec)
方法2:create database 数据库名 character set 字符集;
mysql> create database test02 character set 'utf8mb4';
Query OK, 1 row affected (0.02 sec)
方法3:create database if not exists 数据库名;
mysql> create database if not exists test03;
Query OK, 1 row affected (0.01 sec)
(二)、使用数据库

1.查察当前连接中的所有数据库
格式:show databases;
mysql> show databases;
+--------------------+
| Database         |
+--------------------+
| information_schema |
| mysql            |
| performance_schema |
| sys                |
| test01             |
| test02             |
| test03             |
+--------------------+
7 rows in set (0.00 sec)
2.查察当前正在使用的数据库
格式:select database() from dual;
mysql> use test01;
Database changed
mysql> select database() from dual;
+------------+
| database() |
+------------+
| test01   |
+------------+
1 row in set (0.00 sec)
3.查察指定库中的所有表
格式:show tables from 数据库名;
mysql> use test01;
Database changed
mysql> show tables from mysql;
+------------------------------------------------------+
| Tables_in_mysql                                    |
+------------------------------------------------------+
| columns_priv                                       |
| component                                          |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
| gtid_executed                                        |
| help_category                                        |
| help_keyword                                       |
| help_relation                                        |
| help_topic                                           |
| innodb_index_stats                                 |
| innodb_table_stats                                 |
| ndb_binlog_index                                     |
| password_history                                     |
| plugin                                             |
| procs_priv                                           |
| proxies_priv                                       |
| replication_asynchronous_connection_failover         |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version            |
| replication_group_member_actions                     |
| role_edges                                           |
| server_cost                                          |
| servers                                              |
| slave_master_info                                    |
| slave_relay_log_info                                 |
| slave_worker_info                                    |
| slow_log                                             |
| tables_priv                                          |
| time_zone                                          |
| time_zone_leap_second                              |
| time_zone_name                                       |
| time_zone_transition                                 |
| time_zone_transition_type                            |
| user                                                 |
+------------------------------------------------------+
38 rows in set (0.01 sec)
   若想查察当前数据库中的所有表,可不消指明数据库名直接写为:show tables;
mysql> use test01;
Database changed
show tables;
Empty set (0.00 sec)
4.查察数据库的创建信息
方法1:show create database 数据库名;
mysql> show create database test01;
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database
                      |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| test01   | CREATE DATABASE `test01` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
方法2:show create database 数据库名\G
mysql> show create database test01\G
*************************** 1. row ***************************
       Database: test01
Create Database: CREATE DATABASE `test01` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
1 row in set (0.00 sec)
5.切换数据库
格式:use 数据库名;
mysql> use test02;
Database changed
(三)、修改数据库

   数据库的修改一样平常是修改数据库的字符集 字符集一样平常有:utf8、gbk等.
格式:alter database 数据库名 character set 字符集;
alter database test01 character set 'utf8';
Query OK, 1 row affected, 1 warning (0.01 sec)
(四)、删除数据库.

方法1:
drop database 数据库名;
mysql> drop database test02;
Query OK, 0 rows affected (0.01 sec)
方法2:
drop database if exists 数据库名;
drop database if exists test01;
Query OK, 0 rows affected (0.01 sec)
三、表的创建与管理

(一)、表的创建

方式1:
create table if not exists 表名(
字段1 数据范例 [约束条件] [默认值],
字段2 数据范例 [约束条件] [默认值],
字段3 数据范例 [约束条件] [默认值],
……
[表约束条件]
);
create table if not exists emp01
    -> (id int,name varchar(20),sex char(1));
Query OK, 0 rows affected (0.04 sec)
方式2:
create table 表名(
字段1 数据范例 [约束条件] [默认值],
字段2 数据范例 [约束条件] [默认值],
字段3 数据范例 [约束条件] [默认值],
……
[表约束条件]
);
mysql> create table emp02
    -> (id int,name varchar(20),sex char(1));
Query OK, 0 rows affected (0.02 sec)
   加上了if not exists,则表现:如果当前数据库中不存在要创建的数据表,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。
创建 表时,表名,表中各个字段名,以及字段相应的数据范例(长度)肯定要指明。
数据范例int后面也可以指定长度,表现的是数据的显示宽度,默认显示宽度为11.一样平常情况下推荐int范例数据指定长度。
方式3:通过其他表的查询结果来创建表
根据查询结果创建新表(导入了查询的数据)
格式1:
create table 表名
as
select * from employees;
若想创建的仅仅是空表则可以通过条件where 1=2得到空数据,以次实现创建空表
格式:
create table 表名
as
select * from employees
where 1=2;
desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> create table emp03
    -> as
    -> select * from emp01
    -> where 1=2;
Query OK, 0 rows affected (0.02 sec)
Records: 0Duplicates: 0Warnings: 0

mysql> desc emp03;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

select * from emp03;
Empty set (0.00 sec)
   如果要查询的表不在当前地点的库中,可以使用库名.表名在当前库中查询其他库中的表。
(二)、查察创建的表结构

方法1;
describe/desc 表名;
mysql> desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> describe emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
方法2:
show create 表名;或 show create 表名\G
mysql> show create table emp01;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table
                                                                     |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| emp01 | CREATE TABLE `emp01` (
`id` int DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`sex` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table emp01\G
*************************** 1. row ***************************
       Table: emp01
Create Table: CREATE TABLE `emp01` (
`id` int DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`sex` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
   使用show create table语句不但可以查察表创建表时的详细语句,还可以查察存储引擎和字符编码。
(三)、修改表

   修改表指的是修改数据库中已经存在的数据表的结构,使用 alter table 语句可以实现
1.追加一个列
格式:
alter table 表名
add 【column】 字段名 字段范例 【first/after 字段名】;
desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table emp01
    -> add column age int after name;
Query OK, 0 rows affected (0.05 sec)

mysql> desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
| age   | int         | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
**2.修改一个列:**可以修改列的数据范例,长度、默认值和位置
格式:
alter table 表名
modify 字段名1 字段范例 【default 默认值】【first /after 段名2】;
mysql> desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
| age   | int         | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table emp01
    -> modify name varchar(10);
Query OK, 0 rows affected (0.07 sec)
Records: 0Duplicates: 0Warnings: 0

mysql> desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| name| varchar(10) | YES|   | NULL    |       |
| age   | int         | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table emp01
    -> modify name varchar(20) after sex;
Query OK, 0 rows affected (0.04 sec)
Records: 0Duplicates: 0Warnings: 0

mysql> desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| age   | int         | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
3. 重定名一个列
格式:
alter table 表名
change【column】 字段名 新字段名 新字段数据范例;
mysql> desc emp01;
+-------+-------------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES|   | NULL    |       |
| age   | int         | YES|   | NULL    |       |
| sex   | char(1)   | YES|   | NULL    |       |
| name| varchar(20) | YES|   | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table emp01
    -> change name name_info varchar(30);
Query OK, 0 rows affected (0.01 sec)
Records: 0Duplicates: 0Warnings: 0

mysql> desc emp01;
+-----------+-------------+------+-----+---------+-------+
| Field   | Type      | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id      | int         | YES|   | NULL    |       |
| age       | int         | YES|   | NULL    |       |
| sex       | char(1)   | YES|   | NULL    |       |
| name_info | varchar(30) | YES|   | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
4.删除一个列
格式:
alter table 表名
drop 【column】要删除的字段名
desc emp01;
+-----------+-------------+------+-----+---------+-------+
| Field   | Type      | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id      | int         | YES|   | NULL    |       |
| age       | int         | YES|   | NULL    |       |
| sex       | char(1)   | YES|   | NULL    |       |
| name_info | varchar(30) | YES|   | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table emp01
    -> drop sex;
Query OK, 0 rows affected (0.04 sec)
Records: 0Duplicates: 0Warnings: 0

mysql> desc emp01;
+-----------+-------------+------+-----+---------+-------+
| Field   | Type      | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| id      | int         | YES|   | NULL    |       |
| age       | int         | YES|   | NULL    |       |
| name_info | varchar(30) | YES|   | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
5.重定名表
方法1:
rename table 表名
to 新表名;
mysql> show tables;
+------------------+
| Tables_in_test03 |
+------------------+
| emp01            |
| emp02            |
| emp03            |
+------------------+
3 rows in set (0.00 sec)

mysql> rename table emp01
    -> to emp01_info;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+------------------+
| Tables_in_test03 |
+------------------+
| emp01_info       |
| emp02            |
| emp03            |
+------------------+
3 rows in set (0.00 sec)
方法2:
alter table 表名
rename to 新表名;
mysql> show tables;
+------------------+
| Tables_in_test03 |
+------------------+
| emp01_info       |
| emp02            |
| emp03            |
+------------------+
3 rows in set (0.00 sec)

mysql> alter table emp01_info
    -> rename to emp01;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+------------------+
| Tables_in_test03 |
+------------------+
| emp01            |
| emp02            |
| emp03            |
+------------------+
3 rows in set (0.00 sec)
**6.删除表—drop **(在MySQL中,当一张数据表没有与其他任何数据表形成关联关系时,可以将当前数据表直接删除。)
数据和结构都被删除,
开释表的存储空间,
所有正在运行的相关事务被提交,
所有相关索引被删除,
因此drop table 语句不能回滚。
格式:
drop table 【if exists】 表名1 [, 表名2, …, 表名n];
   if exists 的寄义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。
mysql> show tables;
+------------------+
| Tables_in_test03 |
+------------------+
| emp01            |
| emp02            |
| emp03            |
+------------------+
3 rows in set (0.00 sec)

mysql> drop table if exists emp02;
Query OK, 0 rows affected (0.04 sec)

mysql> show tables;
+------------------+
| Tables_in_test03 |
+------------------+
| emp01            |
| emp03            |
+------------------+
2 rows in set (0.00 sec)
7.清空表
删除表中所有的数据(只能全部清空)
但表结构生存,表还在
开释表的存储空间
truncate 语句不能回滚
格式:
truncate table 表名;
8.删除表—delete
删除表中的数据(不肯定全部清空,可以通过条件来指明要删除是哪部分数据)
表结构生存,表还在
开释表的存储空间
可以回滚
格式:
delete from 表名
where 条件;
   commit :提交数据,一旦执行,则数据就被永久生存在数据库中,意味着数据不可回滚
rollback:回滚数据,一旦执行,可以实现数据的回滚,回滚到最近一次commit之后。
默认情况下 delete语句也是不可以实现回滚的,由于默认情况下会执行commit语句,但是在执行delete语句前,可以通过使用autocommit=false语句来实现不执行commit,从而实现回滚。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL数据库中,数据库及表的创建和管理