ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

MySQL数据库基础使用(2)—库表操作

MySQL数据库基础使用(2)—库表操作

三、库的操作

3.1 创建数据库

创建数据库的语法格式:

CREATE DATABASE [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name;

其中大写单词为关键字,[ ]内为可选项。

CHARACTER SET指定数据库采用的字符集,COLLATE指定字符集的校验规则。

创建示例:

-- 创建名为db1的数据库,使用默认字符集和校验规则 create database db1; -- 创建使用utf8字符集的db2数据库 create database db2 charset=utf8; -- 创建使用utf8字符集并指定校对规则的db3数据库 create database db3 charset=utf8 collate utf8_general_ci;

未指定字符集和校验规则时,系统默认使用utf8字符集,校验规则为utf8_general_ci。

3.2 字符集与校验规则

字符集控制数据用什么语言编码,比如utf8可以存储中文。

校验规则则影响字符串的比较和排序行为。

查看系统默认字符集和校验规则:

show variables like 'character_set_database'; show variables like 'collation_database';

查看数据库支持的字符集和校验规则:

show charset; show collation;

校验规则对查询和排序有直接影响。

以utf8_general_ci(不区分大小写)和utf8_bin(区分大小写)为例:

-- 不区分大小写的数据库 create database test1 collate utf8_general_ci; use test1; create table person(name varchar(20)); insert into person values('a'),('A'),('b'),('B'); -- 区分大小写的数据库 create database test2 collate utf8_bin; use test2; create table person(name varchar(20)); insert into person values('a'),('A'),('b'),('B');
  • 在test1中执行select * from person where name='a',会返回a和A两条记录

  • 在test2中执行同样的查询,仅返回a一条记录

  • 排序时,test1的结果为a、A、b、B,而test2按ASCII码排序,结果为A、B、a、b

3.3 数据库管理与备份恢复

查看所有数据库:

show databases;

查看某数据库的创建语句:

show create database 数据库名;

修改数据库的字符集或校验规则:

alter database 数据库名 charset=gbk;

删除数据库:

drop database 数据库名;

数据库备份使用mysqldump工具,在命令行中执行:

mysqldump -P3306 -u root -p密码 -B 数据库名 > 备份文件路径

恢复数据时,先登录MySQL,再使用source命令:

source 备份文件路径;

若只需备份单张表,可在数据库名后指定表名;同时备份多个数据库时,用-B参数后接多个数据库名。

查看当前数据库的连接情况:

show processlist;

该命令可以显示当前有哪些用户在连接、执行什么操作,有助于排查连接占用问题。


四、表的操作

4.1 创建表

创建表的语法格式:

CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;

field为列名,datatype为列的数据类型,

字符集和校验规则未指定时,以所在数据库的设置为准。

创建表示例:

create table users ( id int, name varchar(20) comment '用户名', password char(32) comment '密码是32位的md5值', birthday date comment '生日' ) character set utf8 engine MyISAM;

不同的存储引擎,创建表后在磁盘上生成的文件有所不同。

MyISAM引擎的表会生成三个文件:.frm存储表结构,.MYD存储表数据,.MYI存储表索引。

4.2 查看表结构

使用desc命令查看表结构:

desc users;

输出结果中各列的含义:

  1. Field表示字段名字

  2. Type表示字段类型

  3. Null表示是否允许为空

  4. Key表示索引类型

  5. Default表示默认值

  6. Extra表示扩充信息

4.3 修改表

在项目开发中,经常需要调整表结构,比如添加字段、修改字段类型或删除字段。

先向表中插入两条测试数据:

insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');

(1)添加字段

在birthday字段后添加一个assets字段用于保存图片路径:

alter table users add assets varchar(100) comment '图片路径' after birthday;

新增字段后,原有数据不受影响,新字段的值为NULL。

(2)修改字段类型

将name字段的长度从20改为60:

alter table users modify name varchar(60);

(3)删除字段

删除password列,删除操作会同时移除该列的所有数据,执行前建议确认:

alter table users drop password;

(4)修改表名

alter table users rename to employee;

其中to关键字可以省略。

(5)修改字段名

将name列改名为xingming,change关键字需要完整定义新字段:

alter table employee change name xingming varchar(60);

4.4 删除表

删除表的语法:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...;

示例:

drop table t1;

删除表会同时移除表结构和所有数据,操作前建议做好备份。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进