MySQL8.0 创建数据库和数据表
·
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)
更多推荐
所有评论(0)