MySql教程

MySQL基础

本文主要是介绍MySQL基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一:基础操作指令

cmd界面登录 MySQL

#方式一:在 -p 后面输入密码
	mysql -uroot -ppassword
#方式二: 在弹出输入密码指示时输入密码
	mysql -uroot -p
	password

使用数据库

#1.查询有哪些数据库
show databases;
#2.选择使用的数据库,我这里使用的mydb
use mydb;
#3.查询数据库中有哪些表
show tables;
#4.查询 user 表中的所有字段
select * from user;

查询操作

#查询当前使用的数据库
select database();  #分号别忘记加
#查看mysql的版本号
show version();
#查看创建表语句
show create table 表名;
#查看表结构
desc 表名;

增删数据库

#创建数据库mydb
create database mydb;

#删除数据库mydb(慎用)
drop database mydb;

如果想要结束一条语句在后面加上 \c 回车即可

二:SQL语句

SQL语句分类
1.DQL(数据查询语言):查询语句,凡是 select 语句都是DQL
2.DML(数据操作语言):insert、delete、update,对表中的数据进行增删改
3.DDL(数据定义语言):create、drop、alter,对表中结构进行增删改
4.TCL(事务控制语言):commit提交事务,rollback回滚事务
5.DCL(数据控制语言):grant授权,revoke撤销授权等

三:表的基本操作

概述

table是数据库的基本组成单元,所有的数据都是以表格的形式组织,目的是可读性强

表的组成

1.一个表包含行和列
:被称为数据/记录(data)
列:被称为字段(column)
2.每一个字段应该包含哪些属性:字段名(id), 数据类型(int), 相关的约束(not null(不能为空))

表的创建

建表语句:

drop table if exists user  #如果表存在则删除
create table user(
	id int auto_increment primary key,
	name varchar(20) not null,
	address varchar(40) not null
)engine=InnoDB default charset=utf8;

数据类型:
int、bigint、float、char、varchar、date、BLOB(二进制大对象)、CLOB(字符大对象)

表的复制

创建新表emp 复制表use中的所有数据
create table emp as select * from user;

删除表

#drop table if exists 表名
drop table if exists emp;
#删除大表
truncate table emp;

增删改查

插入数据

#insert into 表名(字段名1,字段名2,字段名3,..)values(值1,值2,值3,..);
#字段数量和值数量相同,并且数据类型要对应
#单行插入
insert into user(id,name,address) values(4,'xiaoliu','henan');
#多行插入
insert into user(id,name,address) values(1,'zhangsan','beijin'),(2,'lisi','tianjin'),(3,'wangwu','jiangxi');

删除数据

#delete from 表名 where 条件;
#没有条件全部删除
#删除姓名为 xiaoliu 的一行数据
delete from user where name = 'xiaoliu';

修改数据

#update 表名 set 字段名=值1,字段名2=值2.. where 条件;
#没有条件的话整张表数据更新
#修改id=3的一行数据
update user set name='hihi',address='sichuan' where id=3;

简单查询

#查询所有字段
select * from user;
#给查询结果的列重命名 as后面跟新名称
select id,name,address as a from user;
#查询指定字段
select id,name from user;
#条件查询  先执行from,然后where,最后select
select id,name,address from user where id = 2;

排序

概述
排序分为升序和降序,分别是 asc(升序),desc(降序),MySQL中默认是降序排序
升序排序(asc)

mysql> select * from user order by address asc;
+----+----------+---------+
| id | name     | address |
+----+----------+---------+
|  1 | zhangsan | beijin  |
|  3 | hihi     | sichuan |
|  2 | lisi     | tianjin |
+----+----------+---------+
3 rows in set (0.00 sec)

降序排序(desc)

mysql> select * from user order by address desc;
+----+----------+---------+
| id | name     | address |
+----+----------+---------+
|  2 | lisi     | tianjin |
|  3 | hihi     | sichuan |
|  1 | zhangsan | beijin  |
+----+----------+---------+
3 rows in set (0.00 sec)

分组

概述:按照某个字段或者某些字段进行分组
语法:group by和having

#按照城市进行分组,找出id最大的
mysql> select max(id) from user group by address;
+---------+
| max(id) |
+---------+
|       1 |
|       3 |
|       6 |
+---------+
3 rows in set (0.00 sec)

#一个完整的SQL语句 ()内是执行顺序
#select(5) ... from(1) ... where(2) ...group by(3) ... having(4) ... order by(6)

having 是对分组之后的数据进行再次过滤。
注意:
1.分组函数一般会和 group by 联合使用,并且任何一个分组函数都是在 group by 执行结束后再执行
2.当一条语句有 group by 时,只允许select 后面出现参加分组的字段以及分组函数

分页

概述:limit是mysql特有的,其他数据库中没有,作用是取结果集中的部分数据。
语法:

  • limit y :读取y条数据
  • limit x,y:跳过x条数据,读取y条数据
  • limit y offset x:跳过x条数据,读取y条数据
  • limit n:等价于limit 0,n;
#查询两条数据
select * from user limit 2;
#跳过第一条数据,查询两条数据
select * from user limit 1,2;

注意:limit 是 sql 语句中最后执行的环节。

分组函数

概述
所有的分组函数都是对一组数据进行操作的,分组函数只有5个,分别是:

  • count 计数
    1.count(*):统计总记录条数(和某个字段无关)
    2.count(comm):统计comm字段中不为 NULL 的数据的总数量
mysql> select count(*) from user;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.01 sec)
  • sum 求和
mysql> select sum(id) from user;
+---------+
| sum(id) |
+---------+
|       6 |
+---------+
1 row in set (0.01 sec)
  • avg 平均值
mysql> select avg(id) from user;
+---------+
| avg(id) |
+---------+
|  2.0000 |
+---------+
1 row in set (0.01 sec)
  • max 最大值
  • min 最小值

注意
1.所有数据库都是这样规定的,只要有NULL参与运算的运算结果一定是NULL。
2.分组函数自动忽略 null,不需要添加判断条件。
3.SQL语句中规定分组函数不可直接使用在 where 子句当中,因为group by 是在where 语句执行结束之后才执行。

空处理
ifnull()空处理函数:属于单行处理函数
语法:ifnull(可能为空的数据,被当做什么值)

#如果地址为空,值就被当做中国
select id,name if(address,'zhongguo') from user;

余数
语法:MOD(X,Y):返回 X 被 Y 除后的余数

时间差
语法:datediff(da1,da2):返回da1 - da2的天数,获取时间差

结果集去重:字段前面加一个 distinct

mysql> select distinct address from user;
+---------+
| address |
+---------+
| beijin  |
| tianjin |
| sichuan |
+---------+
3 rows in set (0.00 sec)

注意:distinct 关键字必须在所有字段的最前面

四:连接查询

根据表的连接方式可以分为内连接和外连接

内连接

1.等值连接
定义:查询两个表都符合条件的数据,即集合的交集
语法:table_name inner join table_name on 条件;
例子:select * from table_a a inner join table_b b on a.name = b.name
2.非等值连接
定义:连接条件中的关系是非等量关系
3.自连接
定义:一张表看作两张表,自己连接自己

外连接

1.左外连接(left join)
定义:左连接会将左表的所有数据展示出来,而右表只会展示符合搜索条件的数据
语法:table_name left join table_name on 条件
例子:select * from left_table l left join right_table r on l.name = r.name
2.右外连接(right join)
定义:右连接会将右表的所有数据展示出来,而左表只会展示符合搜索条件的数据
语法:table_name right join table_name on 条件
例子:select * from left_table l right join right_table r on l.name = r.name

子查询

1.where后面接子查询
2.from后面接子查询: 将查询结果当成一张新表(临时表)来看待
3.select后面接子查询

五:约束

概述

约束是作用于表中列上的规则,用于限制加入表的数据,约束的存在保证了数据库中数据的正确性、有效性和完整性。

约束的分类

1.非空约束(not null):保证列中所有的数据不能有null值
2.唯一约束 (unique):保证列中所有数据各不相同
3.主键约束 (primary key):主键是一行数据的唯一标识,要求非空且唯一
4.检查约束 (check):msyql不支持
5.默认约束 (default):保存数据时,未指定值则采用默认值
6.外键约束 (foreign key):外键用来让两个表之间建立连接,保证数据的一致性和完整性

六:设计三范式

概述

为了建立逻辑结构合理、冗余较小的数据库,在设计数据表时必须要遵循的设计规范。

1.数据库第一范式(1NF)

数据库第一范式是设计数据库时需要满足的最基本的范式
定义:任何一张表都必须有主键,要求数据库中所有字段都是不可拆分的原子字段
例子:电话(phone)字段,定义不明确,可以拆分为座机电话和手机电话,不符合数据库第一范式的原子性
优点:字段定义清晰,方便业务层逻辑开发,便于后续维护

2.数据库第二范式(2NF)

在满足第一范式的基础上,第二范式对字段定义更严格约束
定义:要求数据库中的每一列都和主键相关,不能和主键部分相关
例子:在电商设计订单时,如果将订单的订单编号和商品编号作为联合主键时,不仅会有不同订单编号存在大量相同的商品编号,造成数据的冗余,而且商品单价只与商品编号有关,而与订单编号无关,不符合第二范式,需要将订单信息和商品信息进行分离。
优点:降低了数据库的冗余存储,并且逻辑清晰,查询商品信息走商品表,查询订单信息走订单表

3.数据库第三范式(3NF)

在满足以上2范式的继承上
定义:要求数据库表中的每个字段和主键都直接相关,不能间接相关
例子:用户的省份和省会城市,省会和省会城市与用户弱相关,并且存在间接传递关系,造成数据冗余,需要将用户信息和省会信息进行分表设计
优点:提高了表的独立性,降低了数据冗余

这篇关于MySQL基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!