博客主页:【夜泉_ly】
本文专栏:【暂无】
欢迎点赞👍收藏⭐关注❤️
我的版本号:8.0.41-0ubuntu0.22.04.1
创建数据库
格式
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_option] ...
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
| ENCRYPTION [=] {'Y' | 'N'}
}
本质就是在 /var/lib/mysql
中创建一个目录。
其中:
{DATABASE | SCHEMA}
database
和schema
选一个输就行,这两个等价。[IF NOT EXISTS]
(可选)
加了这条,创建时如果存在会报错。[create_option]
(可选)CHARACTER SET
,指定默认数据库字符集。COLLATE
,指定默认数据库校验规则。ENCRYPTION
,MySQL 8.0.16引入,
和加密有关,默认Y
。
注:大写的是关键字,输的时候不用管大小写。
如,要查询当前的版本号和日期,下面的输入是等价的:mysql> SELECT VERSION(), CURRENT_DATE; mysql> select version(), current_date; mysql> SeLeCt vErSiOn(), current_DATE;
一个完整示例:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database if not exists test_db;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database if not exists test_db;
Query OK, 1 row affected, 1 warning (0.00 sec)
上面的 (0.00 sec)
没多大意义,不用管。
编码集
创建数据库时,有两个编码集:
-
数据库字符集:(怎么写)
定义数据存储格式的字符编码集,
控制写入/读取时的解析方式。 -
数据库校验集:(怎么读)
定义数据比较/排序的编码规则,
是底层数据处理的字符编码格式。
数据库执行任何操作时,
需确保该操作涉及的编码始终与数据库编码集保持一致。
查看默认数据库字符集:
mysql> show variables like 'character_set_database';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+
1 row in set (0.01 sec)
查看默认数据库校验集:
mysql> show variables like 'collation_database';
+--------------------+--------------------+
| Variable_name | Value |
+--------------------+--------------------+
| collation_database | utf8mb4_0900_ai_ci |
+--------------------+--------------------+
1 row in set (0.00 sec)
查看不同场景默认的校验集:
mysql> show variables like 'collation_%';
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database | utf8mb4_0900_ai_ci |
| collation_server | utf8mb4_0900_ai_ci |
+----------------------+--------------------+
3 rows in set (0.01 sec)
连接、数据库、服务器,都是 utf8mb4。
查看数据库支持的字符集 show charset;
查看数据库支持的校验集 show collation;
创建数据库时:
- 没指定字符集和校验集,使用默认的
CREATE DATABASE my_database;
- 指定了,就使用指定的
CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
示例:
创建两个数据库,其校验集分别使用:
utf8mb4_0900_ai_ci
(不区分大小写)
utf8mb4_0900_bin
(区分大小写)
create database test_db1 collate utf8mb4_0900_ai_ci;
use test_db1;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
create database test_db2 collate utf8mb4_0900_bin;
use test_db2;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
找小写的字符 a
select * from person where name='a';
- 对于
utf8mb4_0900_ai_ci
:
- 对于
utf8mb4_0900_bin
:
操控数据库
查看数据库
查看数据库:
show databases;
查看use了哪个数据库:
select database();
修改数据库
ALTER {DATABASE | SCHEMA} [db_name]
alter_option ...
alter_option: {
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
| [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}
| READ ONLY [=] {DEFAULT | 0 | 1}
}
刚刚不是创建了数据库吗,
如果发现有 alter_option
写错了,这里可以改。
但需注意:字符集和校验集,
你改了其中一个,另一个可能会被影响。
注:
- 数据库名的反引号
''
,防止数据库名是关键字。 /**/
在这里不是注释:
版本大于 4.01 执行第一个/**/
,大于 8.0016 执行第二个/**/
。
删除数据库
不要随意删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
本质就是在 /var/lib/mysql
中删除对应目录。
而Linux中,你删一个东西,一般贼难恢复,所以慎用。
备份与还原
这里只演示一种较简单的方法:
备份:
mysql> mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
-B
参数的作用是备份整个数据库,
包括我们历史上的所有操作,
比如数据库的创建语句。
还原:
mysql> source 数据库备份存储的文件路径;
如果不带 -B
,需要先创建数据库,再还原。
部分表操作
创建表
用法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
选项还有很多,可以去手册看。
示例:
mysql> create table if not exists user1(
-> id int,
-> name varchar(20) comment '用户名',
-> password char(32) comment '用户的密码',
-> birthday date comment '用户的生日'
-> )engine MyIsam;
Query OK, 0 rows affected (0.01 sec)
comment
表示描述
创建表时,最后一个字段不要加逗号。
用不同的存储引擎,创建的文件不同,
且不同的MySQL版本,创建的文件可能也不同(5.6之前,每个数据库表都会生成一个 .frm
文件)
由于用的是 MyIsam
存储引擎,此时的数据库中会创建三个文件:
如果用默认的 InnoDB
存储引擎,会创建一个文件:
查看表
查看有哪些表:
show tables;
查看详细信息:
desc 表名;
查看创建表时的详细信息:
show create table user1 \G
\G
用于格式化输出结果,和代替分号 ;
查看表中所有信息:
SELECT * FROM 表名;
修改表
改名字:
RENAME TABLE
tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...
或者
ALTER TABLE old_table RENAME new_table;
rename
不同于 alter
,可以一次改多张表。
插入信息:
INSERT INTO 表名 (列名) VALUES (值);
插入时理论上要在 values
前带上对应的列名称,
如果不带,默认所有列都要插入。
插入新的列:
alter table user1 add image_path varchar(128) comment '这个是用户的头像路径' after birthday;
修改列的属性:
alter table user1 modify name varchar(60);
以前的comment不见了。
说明是覆盖改。这一列的属性都被改。
希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!