MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,而MySQL AB 公司被 Oracle 公司收购,故 MySQL 现在属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL 是开源的,所以你可以免费使用它。
MySQL 支持大型的数据库,可以处理拥有上千万条记录的大型数据库。但是根据实际生产经验,当单表的数据量达到三千万之后,数据库性能急剧下降,甚至整个数据库都瘫痪了,登录不上。
MySQL 使用标准的 SQL 数据语言形式,结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
MySQL 安装好了之后,就可以登录使用了。最主要就是使用 SQL 进行增删改查的操作。
1、查看数据库
# mysql -u root -p'P@ssw0rd'
mysql> show databases;
2、切换数据库
mysql> use mysql;
注意:
1:information_schema # 这个数据库保存了 MySQL 服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型不访问权限等。
2:performance_schema # MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为 PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为 PERFORMANCE_SCHEMA 的表。
3:mysql 库是系统库,里面保存有账户信息,权限信息等。
4:mysql5.7 增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息。元数据是关于数据信息的数据,如数据库名或表名,列的数据类型,或访问权限等。
3、创建数据库
语法:create database 数据库名;
创建数据库注意事项:
1、在文件系统中,MySQL 的数据存储区将以目录方式表示 MySQL 数据库。因此,上面命令中的数据库名字必须与操作系统的约束的目录名字一致。例如不允许文件和目录名中有 \,/,:,*,?,”,<,>,| 这些符号,在 MySQL 数据库名字中这些字母会被自动删除。<遵从目录的约束>
2、数据库的名字不能超过64个字符,包含特殊字符的名字或者是全部由数字或保留字组成的名字必须用反引号``包起来。
3、数据库不能重名。
mysql> create databases 'YF-test'; # 使用单引号,建库失败
mysql> create databases `YF-test`; # 使用反引号,建库成功
# ls /var/lib/mysql/ #查看数据库存放目录
4、查看自己所处的位置及默认所在的位置
mysql> select database();
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
# 如果什么数据库也没有选择,默认显示的是NULL,Null意味着没有选择数据库
mysql> use mysql;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| mysql |
+------------+
1 row in set (0.00 sec)
5、删除数据库
删除数据库没有任何提示,要慎重操作;最好操作的时候,旁边有人看着你操作。
方法1:mysql> drop database `create`;
方法2:直接到数据库存放目录移出就行。
6、查看库有哪些表,查看表,要进入到数据库再查看
7、创建表:
语法:create table 表名 (字段名 类型, 字段名 类型, 字段名 类型);
mysql> create database test;
mysql> use test;
mysql> create table student(id int(20),name char(40),age int);
8、查看表的结构
9、删除表
mysql> drop table student;
10、修改表名称alter
语法:alter table 表名 rename 新表名;
11、修改表中的字段类型
语法:alter table 表名 modify 要修改的字段名 要修改的类型;
mysql> alter table students modify id int(10);
12、修改表中的字段类型和字段名称
语法:alter table 表名 change 原字段名 新字段名 新字段类型;
注意:mysql 不支持同时修改多个字段,
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
注:CHANGE 和MODIFY的区别:
CHANGE 对列进行重命名和更改列的类型,需给定旧的列名称和新的列名称、当前的类型。MODIFY 可以改变列的类型,此时不需要重命名(不需给定新的列名称)。
13、在表中添加字段
语法:alter table 表名 add 字段名 字段类型;
mysql> alter table students add sex enum('M','W');
14、指定位置添加字段,在第一列添加一个字段
mysql> alter table students add uid int(10) first;
> alter table students add address char(40) after age;
15、删除表中字段:
语法:alter table 表名 drop 字段名 ;
mysql> alter table students drop address;
16、插入字段<记录>insert
语法:insert into 表名values (字段值1,字段值2, 字段值3);
mysql> create table student(id int(20),name char(40),age int);
mysql> insert into student values(1,'zhangs',21);
插入记录时要对应相对的类型
mysql> insert into student values(2,'lis',24),(3,'wange',26);
同时插入多条,使用,分开
mysql> insert into student (id,name)values(4,'hangl');
17、查询表中记录:
语法:select * from 表名称;
mysql> select * from student; # *表示所有
当字段比较多的时候我们也可以使用\G
mysql> select * from student\G
只查询表中某个字段的内容:
mysql> select name from student;
18、查看别的数据库的表或者不在本数据库上进行查看
语法:SELECT 字段 FROM 数据库名.表名;
mysql> select *from HA.student;
# 查看某个数据库下指定的表内容,数据库名.表名
19、删除记录
删除id为3的行
mysql> delete from students where id=3;
删除age为空的行
mysql> delete from students where age is null;
20、更新记录
mysql> update students set sex='M' where id=2;
mysql> update students set id=2; # 所有的都变为2
mysql> update students set stname='zhangsan',age=21 where uid=1;
# 同时更新多个字段时候用,逗号隔开
21、SQL基础条件查询语句
语法:select 字段名1,字段名2 from 表名 [where 条件];
(1)查询students表中的name,age
mysql> select name,age from student;
(2)去重复查询distinct
mysql> select distinct name,age from student;
mysql> select distinct id,name,age from student where id=3;
mysql> select distinct * from students; # mysql的distinct可以对*使用
(3)使用and和or进行多条件查询
or和and 同时存在时,先算and的两边值,逻辑与先执行
mysql> select id,name,age from student where id>3 and age>25;
mysql> select id,name,age from student where id>3 or age>25;
mysql> select * from students where stname='zhangsan' and (age=21 or age=24);
注意and和or都是用的时候的逻辑关系
(4)MySQL区分大小写查询
MySQL查询默认是不区分大小写的,对比如下:
mysql> select name from student where name='jk';
mysql> select * from student where binary name='jk';
# BINARY是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写。
(5)MySQL查询排序:
语法:select distinct 字段1,字段2 from 表名order by 字段名;
默认为升序 asc
mysql> select distinct id from student order by id asc;
mysql> select distinct id from student order by id desc;