博客链接: http://codeshold.me/2017/10/learning_mysql_mariadb_notes.html
- 本文是《MySQL与MariaDB学习指南》的简要学习笔记,方便日后查询和回忆!
- 原书容较为基础,但够用了,尤其常用函数和数据导入导出写的很不错! 适合初学者以及对mysql了解不用很深的人(仅会用)! 原书不涉及任何sql的优化!
- 发现了书中两处错误,已提交勘误!
- 进阶读物《深入理解MariaDB和MySQL》
- 作者网站mysqlresources.com有很多资料
0x01 准备
- 自己没有安装相关工具,使用了docker mariadb 镜像
- 相关命令如下
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mariadb -d mariadb:latest
docker exec -it mariadb bash
docker start mariadb
登陆说明
root@b2659b21f321:/# mysql -uroot -proot # 默认用户名和密码为root Welcome to the MariaDB monitor. Commands end with ; or \g. # 命令要以分号(;) 或斜线 +g(\g)结尾 Your MariaDB connection id is 10 # 本次连接标识符 Server version: 10.2.7-MariaDB-10.2.7+maria~jessie mariadb.org binary distribution Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. # 可清除之前缓存的输入一半的mysql命令 MariaDB [(none)]>
help 帮助命令, 最有用的
help contents
help
help Data Manipulation
help SHOW DATABASES
prompt
可修改提示符- 大小写区别
- MySQL 不区分关键字(如 SHOW)的大小写,所以可以 用 show 甚至 sHoW
- 数据库、表和列的名字却可能是区分大小写的,尤其是在那些大小写敏感的操作系统上,如Mac OS X或Linux
- 用户自定义变量, 以 @ 开头的名字,再用 = 连接上一个值,或者一个表达式,又或者一条返回单个 值的 SQL 语句, 即
SET @fav_site_total =
show tables from msyql;
显示mysql数据库中的所有表describe mysql.user;
- 创建数据库和表
CREATE SCHEMA swf
==CREATE DATABASE swf
CREATE DATABASE swf2 CHARACTER SET latin1 COLLATE latin1_bin;
# MySQL 数据的存储方式是二进制拉丁字符- 表名可以是 SQL 保留字以外的任何东西。事实上,用保留字也可以,但需要加上引号以作区分
- AUTO_INCREMENT 选项告诉 MySQL 此列的值是自增的
- TEXT类型,即长度可变,但最多65 535字节
- 如果你能确定某列内容的长度,那就用 CHAR,否则用 VARCHAR
- UNIQUE, 会截短显示为 UNI
ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
, 首先是表类型,或者说是该表使用的存储引擎的类型; 剩下两个是表的默认字符集(latin1)和默认校对方式(latin1_bin)- 校对方式,则可选 latin5_turkish_ci,它会根据土耳其语的字母表来排序
- BLOB 二进制大对象
- 备份数据库
mysqldump --user='russell' -p rookery birds > /tmp/birds.sql
- 导入数据库
mysql --user='russell' -p rookery < rookery-ch2-end.sql
CREATE TABLE test.birds_new LIKE birds;
仅复制表结构CREATE TABLE birds_new_alternative SELECT * FROM rookery.birds;
复制表结构和表数据
0x02 相关操作
ALTER TABLE birds ADD COLUMN test INT
ALTER TABLE birds_new ADD COLUMN wing_id CHAR(2);
ALTER TABLE birds_new ADD COLUMN wing_id CHAR(2) AFTER family_id;
# 在特定的列之后加入一列ALTER TABLE birds_new DROP COLUMN wing_id;
ALTER TABLE birds_new ADD COLUMN bill_id CHAR(2) AFTER body_id, ADD COLUMN endangered BIT DEFAULT b'1' AFTER bill_id;
可同时添加多列ALTER TABLE birds_new CHANGE COLUMN common_name common_name VARCHAR(255);
在使用CHANGE COLUMN时,就算只想修改该列的某一方面, 也需要完整地声明整个新列。MODIFY COLUMN子句的语法只要求输入一次列名, MODIFY COLUMN是不能用来 改列名的
ALTER TABLE birds_new MODIFY COLUMN endangered ENUM('Extinct', 'Extinct in Wild', 'Threatened - Critically Endangered', 'Threatened - Endangered', 'Threatened - Vulnerable', 'Lower Risk - Conservation Dependent', 'Lower Risk - Near Threatened', 'Lower Risk - Least Concern') AFTER family_id;
SHOW COLUMNS FROM birds_new LIKE 'endangered' \G
结果仅显示 endangered 列的设定SHOW FULL COLUMNS
显示更全的信息
ALTER TABLE birds_new ALTER conservation_status_id DROP DEFAULT;
修改默认值的设定SELECT auto_increment FROM information_schema.tables WHERE table_name = 'birds';
ALTER TABLE birds AUTO_INCREMENT = 10;
- 这个命令虽说是更改 bird_orders 表,但实际修改的是服务器上保存 AUTO_INCREMENT 值的表 (information_schema数据库中的)
- 重命名一个表
RENAME TABLE table1_altered TO table1;
- 将一个表移动到另一个数据库中
RENAME TABLE rookery.bi