MySQL is a relational database management system developed by MySQL AB of Sweden and currently owned by Oracle. MySQL is one of the most popular relational database management systems. MySQL is one of the best RDBMS (Relational Database Management System) applications for WEB applications.
MariaDB is a branch of the MySQL source code, which is used in the same way as Mysql, and mariadb outperforms mysql in some respects.
Next, explain how to use mariab.
Install
MySQL/MariaDB 的安装比较简单,下面主要介绍以下 Mac/Linux 上的安装方法,以及基础设置。
MAC
- 安装 Homebrew
brew 是 Mac 下的一个包管理工具/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 检查 Homebrew
brew doctor
- 更新 Homebrew
brew update
- 确认 MariaDB 版本
brew info mariadb
- 安装 MariaDB
brew install mariadb
- 运行 MariaDB 的安装程序
unset TMPDIR
cd /usr/local/opt/mariadb/bin/
mysql_install_db
- 运行 MariaDB
后台启动brew services start mariaDB
前台启动mysql.server start
- 安全的完成安装,重设root用户的密码、移除匿名用户、移除默认的test数据等
mysql_secure_installation
- 添加环境变量
vi ~/.bash_profile
export PATH=$PATH:/usr/local/opt/mariadb/bin:/usr/local/sbin/
运行生效source ~/.bash_profile
- 修改 root 密码
直接运行mysql
,然后输入alter user 'root'@'localhost' identified by 'new_password';
修改 - 登录之后修改 root 密码
set password for root@localhost=password('new_password');
或者update user set password=password('888') where user='root';
- 创建用户
create user 'USERNAME'@'HOST' identified by 'PASSWORD';
- 删除用户
drop user 'USERNAME'@'HOST';
- 用户授权
grant privilege(PRIVILEGE1,PRIVILEGE2) on DATABASE.TABLE to ‘USERNAME'@'HOST' [identified by 'PASSWORD'];
授予所有权限grant all on *.* to 'USERNAME'@'HOST';
刷新权限flush privileges;
查看用户获得的授权show grants for 'USERNAME'@'HOST';
- 显示表结构
desc TABLE_NAME
RedHat
- 安装
sudo yum install mariadb-server
- 开启 mariadb 服务
systemctl start mariadb
- 设置 mariadb 服务为开机自启
systemctl enable mariadb
- 数据库配置
mysql_secure_installation
- 设置 MariaDB 字符集为 utf-8
编辑/etc/my.cnf
, 输入编辑1
2
3
4
5init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake/etc/my.cnf.d/client.cnf
, 在[client]
下面输入编辑1
default-character-set=utf8
/etc/my.cnf.d/mysql-clients.cnf
, 在[mysql]
下面输入注意新版本的 MariaDB 默认字符集的设置方法为1
default-character-set=utf8
编辑/etc/my.cnf.d/server.cnf
,在[mysqld]
下面输入编辑1
2
3
4
5
6[mysqld]
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8/etc/my.cnf.d/client.cnf
,在[client]
下面输入重启 MariaDB 服务1
default-character-set=utf8
其他的数据库操作方法与 MAC 一致,数据库的使用方法见下面。1
systemctl restart mariadb
远程连接
数据库有许多远程连接的软件,如 navicat 等,下面主要介绍命令行中连接数据库的方法mysql -u USER_NAME -h ADDRESS -P PORT -p PASSWORD -D DATABASE_NAME
端口一般为 3306
使用方法
MySQL 用连接软件连接或者使用 mysqladmin 管理的话,可以直接在 用户界面中操作,下面主要介绍在命令行中的使用方法
- 创建数据库
create
create database DATABASE_NAME
- 删除数据库
drop
drop database DATABASE_NAME
- 选择数据库
use
use DATABASE_NAME
MySQL 数据类型
数值类型
| 类型 | 大小 | 用途 |
|:—-:|:—-:|:—-:|
|tinyint
|1 字节|整数|
|smallint
|2 字节|整数|
|mediumint
|3 字节|整数|
|int
|4 字节|整数|
|bigint
|8 字节|整数|
|float
|4 字节|单精度浮点数|
|double
|8 字节|双精度浮点数|日期和时间类型
| 类型 | 大小 | 格式 | 用途 |
|:—-:|:—-:|:—-:|:—-:|
|date
|3 字节|YYYY-MM-DD|日期值|
|time
|3 字节|HH:MM:SS|时间值或持续时间|
|year
|1 字节|YYYY|年份值|
|datetime
|8 字节|YYYY-MM-DD HH:MM:SS|混合日期和时间值|
|timestamp
|4 字节|YYYYMMDDHHMMSS|混合日期和时间的时间戳|字符串类型
| 类型 | 大小 | 用途 |
|:—-:|:—-:|:—-:|
|char
|255 字节|定长字符串|
|varchar
|65535 字节|变长字符串|
|tinytext
|255 字节|短文本字符串|
|text
|65535 字节|长文本数据|
|mediumtext
|16777215 字节|中等长度文本数据|
|longtext
|4294967295 字节|极大文本数据|
- 创建数据表
create
create table TABLE_NAME (COLUMN_NAME1 TYPE1,COLUMN_NAME2 TYPE2);
具体使用如下1
2
3
4
5
6
7create table if not exists `TABLE_NAME`(
`runoob_id` int unsigned auto_increment,
`runoob_title` varchar(100) not null,
`runoob_author` varchar(40) not null,
`submission_date` date,
primary key ( `runoob_id` )
)engine=InnoDB default charset=utf8;
- 如果字段设为 not null,则在操作数据库时如果输入的该字段为 null 就会报错。
- auto_increment 定义为自增属性,一般用于主键,数值会自动 +1
- primary key 关键字用于定义主键,主键可以定义多列,中间用逗号分割
- engine 设置存储引擎,charset 设置编码
- 删除数据表
drop
drop table TABLE_NAME
- 插入数据
insert
insert into TABLE_NAME (COLUMN_NAME1, COLUMN_NAME2, COLUMN_NAME3) values (VALUE1, VALUE2, VALUE3);
数据为字符串,必须使用‘ ’
或" "
- 数据查询
select
select COLUMN_NAME1,COLUMN_NAME2 from TABLE_NAME where CONDITION limit N offset M;
limit
设置返回的记录数offset
指定select
语句开始查询的数据偏移量,默认为 0where
子句可以使用and
或者or
指定一个或多个条件,where
也可以用于delete
或update
- 数据更新
update
update TABLE_NAME set COLUMN_NAME1=VALUE1,COLUMN_NAME2=VALUE2 where CONDITION;
- 删除数据
delete
delete from TABLE_NAME [where CONDITION];
- 模糊匹配
like
like
后面是条件,条件可以使用正则,like
通常与%
一起使用,%
表示任意字符,类似于正则表达式中的*
, 如果没有%
,like
相当于=
select COLUMN1,COLUMN2 from TABLE_NAME where COLUMN like CONDITION1 [and[or]] CONDITION2=VALUE;
- union 操作符
SELECT_STATEMENT1 union [ all | distinct ] SELECT_STATEMENT2;
distinct
可选,删除结果集中重复的数据,union
操作符默认已经删除了重复数据,所以distinct
对结果没有什么影响all
可选,返回所有结果,包含重复数据 - 结果排序
order by
select COLUMN1,COLUMN2 from TABLE_NAME1 TABLE_NAME2 order by COLUMN1 [ asc | desc ],COLUMN2 [ asc | desc ];
asc
设置查询结果是升序,默认结果desc
设置查询结果是降序 - 结果分组
group by
、with rollup
select COLUMN_NAME, from TABLE_NAME where CONDITION group by COLUMN_NAME;
group by
对结果进行分组with rollup
对结果字段进行相同的统计
以上两个语句都可以使用count
、sum
、avg
等coalesce
用来设置字段的取代名称,如果一个字段为 null ,则用coalesce
中设置的值代替select coalesce(COLUMN_NAME,SPARE_COLUMN,SPARE_NAME);
如果COLUMN_NAME
字段的值为 null,则用SPARE_COLUMN
字段的值代替,如果两个都为 null,则用SPARE_NAME
代替。SPARE_COLUMN
和SPARE_NAME
可以使用多个,从前往后依次检查,直到不为 null 为止 - 连接查询
join
inner join
内连接或等值连接,获取两个表中字段匹配关系的记录left join
左连接,获取左表所有的记录,即使右表没有对应匹配的记录right join
右连接,获取右表所有的记录,即使左表没有对应匹配的记录full outer join
完全外连接,完整连接所有表中的数据
以上三种连接中空字段全部用 null 填充select COLUMN1,COLUMN2,COLUMN3 from TABLE1 inner join TABLE2 on CONDITION;
- null 值处理
MySQL 中的 null 值处理方法有两个,分别为is null
和is not null
1
2select * from TABLE_NAME where COLUMN is null;
select * from TABLE_NAME where COLUMN is not null; - 正则表达式
regexp
模式 | 描述 | ||||
---|---|---|---|---|---|
^ |
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 | ||||
$ |
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。 | ||||
. |
匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 | ||||
[...] |
字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。 | ||||
[^...] |
负值字符集合。匹配未包含的任意字符。例如, ‘abc‘ 可以匹配 “plain” 中的’p’。 | ||||
`p1 | p2 | p3` | 匹配 p1 或 p2 或 p3。例如,’z | food’ 能匹配 “z” 或 “food”。’(z | f)ood’ 则匹配 “zood” 或 “food”。</font> |
* |
匹配前面的子表达式零次或多次。例如,zo 能匹配 “z” 以及 “zoo”。 等价于{0,}。 | ||||
+ |
匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 | ||||
{n} |
n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 | ||||
{n,m} |
m 和 n 均为非负整数,其中 n<=m。最少匹配 n 次且最多匹配 m 次。 |
- 修改表名或字段
alter
1
2
3
4
5alter table TABLE_NAME drop COLUMN; # 删除 TABLE_NAME 中的 COLUMN 字段
alter table TABLE_NAME add COLUMN TYPE [ first [COLUMN] | after [COLUMN] ]; # 添加字段
alter table TABLE_NAME modify COLUMN NEW_TYPE; # 修改字段类型
alter table TABLE_NAME change OLD_COLUMN NEW_COLUMN NEW_TYPE; # 修改字段为新字段
alter table TABLE_NAME modify COLUMN INT NOT NULL DEFAULT 100; # 修改字段 - 临时表
temporary table
MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。
创建方法与普通表的创建基本类似,只是把 table
修改为 temporary table
- 防止 SQL 注入
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
在程序设计中永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。
- 导出数据表
导出到文件into outfile
select * from TABLE_NAME into outfile 'FILE_PATH'
导出作为原始数据到指定目录mysqldump
mysqldump -u roop -p --no-create-info --tab=PATH runoob TABLE_NAME
导出表为 SQL 格式数据到指定文件mysqldump
mysqldump -u root -p runoob TABLE_NAME > FILE
导出整个数据库到指定文件mysqldump -u root -p runoob > FILE
备份所有数据mysqldump -u root -p --all-databases > FILE
导入备份数据到 MySQLmysql -u root -p DATABASE_NAME < FILE
使用管道直接将数据导入到远程的服务器上,mysqldump -u root -p DATABASE_NAME | mysql -h OTHER_HOST_ADDRESS DATABASE_NAME
- 导入数据表
mysql 命令导入mysql -u USER -p PASSWORD < file
source 命令导入,需要先登录到数据库1
2
3
4create database DATABASE_NAME;
use DATABASE_NAME;
set names utf8;
source FILE - 函数
MySQL 有很多内置的函数,这里就不一一介绍了。

...
...
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !