最近开始系统的学习MySQL了,每个阶段都把自己觉得重要的东西记录下来。
目前使用的版本是8.0.13
下载链接:https://dev.mysql.com/downloads/windows/installer/8.0.html
使用的图形化工具是Navicat,数据库管理工具推荐使用mysql administrator
有兴趣的可以看看mysql源码:https://github.com/mysql/mysql-server
下面进入主题
一.数据库操作
1.链接数据库
mysql -h 主机名 -u 用户名 -p
通过控制台进入后如下图:
2.创建新数据库test
create database test; (注意每个执行语句都已;结尾)
3.使用数据库test
use test;
4.查看所有数据库名
show databases;
5.显示操作错误或警告
show errors;
show warnings;
6.显示操作关键字的用法
如:help show 显示所有show语句用法;
help create 显示所有create语句用法。
二.创建表
1.创建新表person(后面都已此表作为实例)
create table `person` (
`id` int(10) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`age` int(10) DEFAULT NULL,
`birth` date DEFAULT NULL,
`sex` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`int`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
其中:
id为主键,表示人物id;
name为人物名称;
age为人物年龄;
birth为人物出生日期;
sex为人物性别;0-男 1-女
存储引擎为InnoDB,默认编码为utf8
2.查看所有表名称
show tables;
show也可以用来显示表列
show columns from person;
原理同desc person一致!
执行后结果如下图:
3.显示创建表的MySQL语句
show create table person;
三.插入数据
1.单条插入
INSERT INTO `person` VALUES (1, 'aa', 10, '2010-01-01', 0);
INSERT INTO `person` VALUES (2, 'bb', 20, '2015-05-05', 1);
INSERT INTO `person` VALUES (3, 'cc', 30, '2013-03-03', 0);
INSERT INTO `person` VALUES (4, 'dd', 40, '2018-08-08', 1);
2.多条插入
INSERT INTO `person` VALUES (1, 'aa', 10, '2010-01-01', 0),(2, 'bb', 20, '2015-05-05', 1),(3, 'cc', 30, '2013-03-03', 0),(4, 'dd', 40, '2018-08-08', 1);
3.插入某个字段
insert INTO `person`(`id`) VALUES (5);
其它字段已默认值插入
四.检索数据
1.单条检索
select name from person;
2.多条检索
select id,name,birth from person;
3.全部检索
select * from person;
4.去重检索
select distinct sex from person;
5.限制查询
1) select * from person limit 2;
查询前2行数据
2) select * from person limit 1,2;
查询重第2行开始后2行的数据,limit 后的1是索引,即0代表第1行
3) select * from person limit 2 offset 1;
原理同2)一致
6.使用完全限定名检索
当同时检索两个表并且有相同字段时,需要将字段名加上限定
select person.name from test.person;
结果同1)一致,这里表名也可以加限定
7.排序检索
select * from person order by age;
注:
1)如果需要按多个列排序,则以,分开对应字段即可;
2)默认排序是asc,可以省略,如果想要降序,则在后面添加desc
3)如果多个列都要降序的话,则每个字段后都必须添加desc
4)order by和limit可同时使用
select * from person order by age desc limit 2;
8.过滤检索
1.where
select * from person where id > 1;
注:查询条件较多时,最好添加()
2.between
select * from person where age between 10 and 20;
3.判断NULL
select * from person where name is not null;
4.in
select * from person where name in(2, 1);
注:
1)in功能与or相当,且比or执行快一些,更直观
2)in可以与not同时使用
5.like
select * from person where name like 'a%';
注:
1)%---表示任意字符出现任意次数
2)_---表示任意字符出现1次
6.正则表达式
6.1 基本使用
select * from person where birth regexp '2015';
注:
1)'.'---表示匹配任意字符
2)regexp后面的字符串表示若该字段包含它就满足条件
6.2'|' 表示or的意思
select * from person where birth regexp '2015|2010';
6.3 []的使用
select * from person where birth regexp '201[05]-0[15]-0[15]';
select * from person where birth regexp '201[3-5]-0[3-5]-0[3-5]';
3-5表示匹配范围是3-5
6.4特殊字符
如果要查询包含字符'.',则需要在'.'前加上'\\';
'\\'也用来引用元字符(具有特殊含义的字符),如下:
6.5匹配字符类
预定义字符集,即字符类,如下所示:
6.6多实例匹配
有时候需要对匹配的数目进行更强的控制,则需要重复元字符完成,如下:
select * from person where name regexp '[:alpha:]{2}';
6.7定位符
1)'^'表示必须从开头匹配
2)'$'表示必须从结尾匹配
6.8其它
正则表达式还可以实现其它功能,如想判断莫字符串是否包含数字,如下:
select 'asd' regexp '[0-9];
返回0则表示不包含,返回1则表示包含