MySQL8.0 创建数据库和数据表

步骤 1: 创建数据库
说明:数据库是存储表的容器。创建后,数据库会持久化在 MySQL 服务器中,除非手动删除。

语法:CREATE DATABASE database_name;
database_name 是您自定义的数据库名称(建议使用小写字母和下划线,避免特殊字符)。
可选参数:CHARACTER SET charset_name 指定字符集(如 utf8mb4),COLLATE collation_name 指定排序规则(如 utf8mb4_general_ci)。默认使用 MySQL 8.0 的全局设置。

示例:
CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
执行此命令后,MySQL 会创建一个名为 my_database 的数据库。

步骤 2: 选择数据库
说明:在创建表之前,必须先选择要操作的数据库。否则,SQL 命令会因未指定上下文而失败。数据库只需要创建一次,但必须在每次启动 MySQL 会话时在使用前先选择它1。
语法:USE database_name;或者
在命令行启动 mysql 时直接指定数据库:mysql -u username -p database_name。
示例:
USE my_database;
此命令将当前会话切换到 my_database 数据库。


步骤 3: 创建表
说明:表是存储数据的结构化对象,由列(字段)组成。每个列需要定义数据类型(如整数、字符串等),并可添加约束(如主键、唯一键)。
语法:
CREATE TABLE table_name (
    column1 datatype constraints,
    column2 datatype constraints,
    ...
    PRIMARY KEY (column_name)
);

table_name:自定义表名。
column:列名(如 id, name)。
datatype:数据类型,常见的有:
整数:INT, BIGINT
浮点数:FLOAT, DOUBLE
字符串:VARCHAR(size)(可变长度), CHAR(size)(固定长度)
日期/时间:DATE, DATETIME
布尔:BOOLEAN
constraints:约束,可选,如:
NOT NULL:列值不能为空。
AUTO_INCREMENT:自动生成唯一ID(常用于主键)。
PRIMARY KEY:定义主键(唯一标识每行)。
表级约束:如 FOREIGN KEY(外键),但本回答以基础操作为主。
      
示例:创建一个简单的用户表。
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
此命令在 my_database 中创建 users 表,包含自增主键 id、用户名、唯一邮箱和默认时间戳。

步骤 4: 可选操作(插入数据和验证)
插入数据:创建表后,可添加数据。
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
验证结构:查看数据库或表信息。
列出所有数据库:SHOW DATABASES;
列出当前数据库的表:SHOW TABLES;
查看表结构:DESCRIBE table_name;(如 DESCRIBE users;)
      
    
注意事项
权限管理:创建数据库和表通常需要管理员权限(如 root 用户)。如果使用普通用户,需确保其有 CREATE 权限。您可以通过 GRANT 语句授权,例如:
GRANT CREATE, SELECT, INSERT ON my_database.* TO 'username'@'localhost';
  
错误处理:如果数据库或表已存在,使用 CREATE DATABASE IF NOT EXISTS 或 CREATE TABLE IF NOT EXISTS 避免报错。
最佳实践:
在开发环境中,先备份数据(如 mysqldump)。
MySQL 8.0 默认使用 utf8mb4 字符集,支持表情符号和国际化。
使用事务(BEGIN; … COMMIT;)确保数据一致性。
通过以上步骤,您可以高效地在 MySQL 8.0 中创建数据库和表。
MySQL8.0 创建数据库和数据表实例代码如下
创建数据库 video_server
CREATE DATABASE video_server;

创建数据表`users`实现代码如下:
CREATE TABLE `users` (
    `id` int(10) unsigned auto_increment NOT NULL,
    `login_name` varchar(64) default NULL,
    `pwd` text NOT NULL,
    UNIQUE KEY(`login_name`),
    PRIMARY KEY(`id`)
);
查看数据表结构:
describe users;


创建数据表`video_info`代码如下:
CREATE TABLE `video_info` (
    `id` varchar(64) NOT NULL,
    `author_id` int(10) default NULL,
    `name` text default NULL,
    `display_ctime` text default NULL,
    `create_time` datetime default CURRENT_TIMESTAMP,
    PRIMARY KEY(`id`)
);
查看数据表结构:
describe video_info;


创建数据表`comments`实现代码如下:
CREATE TABLE `comments` (
    `id` varchar(64) NOT NULL,
    `video_id` varchar(64) default NULL,
    `author_id` int(10) default NULL,
    `content` text default NULL,
    `time` datetime default CURRENT_TIMESTAMP,
    PRIMARY KEY(`id`)
);
查看数据表结构:
describe comments;



创建数据表`sessions`实现代码如下:
CREATE TABLE `sessions` (
    `session_id` varchar(255) NOT NULL,
    `TTL` tinytext default NULL,
    `login_name` text default NULL,
    PRIMARY KEY(`session_id`)
);
查看表结构
describe sessions;



查看所有的数据表 show tables;
mysql> show tables;
+------------------------+
| Tables_in_video_server |
+------------------------+
| comments               |
| sessions               |
| users                  |
| video_info             |
+------------------------+
4 rows in set (0.00 sec)

mysql>
查看数据表结构:

MySQL8.0 创建数据库和数据表问题处理:
ERROR 1170 (42000): BLOB/TEXT column 'session_id' used in key specification without a key length


该问题直接将字段'session_id'的类型 'tinytext' 换成 'varchar(255)' 解决问题


代码实践如下
mysql> CREATE TABLE `sessions` (
    ->     `session_id` tinytext NOT NULL,
    ->     `TTL` tinytext default NULL,
    ->     `login_name` text default NULL,
    ->     PRIMARY KEY(`session_id`)
    -> );
ERROR 1170 (42000): BLOB/TEXT column 'session_id' used in key specification without a key length
mysql> CREATE TABLE `sessions` (
    ->     `session_id` varchar(255) NOT NULL,
    ->     `TTL` tinytext default NULL,
    ->     `login_name` text default NULL,
    ->     PRIMARY KEY(`session_id`)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> describe sessions;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| session_id | varchar(255) | NO   | PRI | NULL    |       |
| TTL        | tinytext     | YES  |     | NULL    |       |
| login_name | text         | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐