Mysql数据库组成
服务端:主要存储数据,并接收用户发过来的SQL语句,并执行结果返回给客户端
客户端:下发用户要执行的sql语句,并显示服务器返回的执行结果
命令行数据库连接方式
数据类型
数字类型
字符串类型
时间和日期类型
约束
命令行操作数据库、表
查看所有的数据库 | show database; |
使用数据库 | use 数据库名; |
查看当前使用的数据库 | select database(); |
创建数据库 | create database 数据库名 charset=utf8; |
删除数据库 | drop database 数据库名; |
查看数据库所有的表 | show tables; |
查看数据库表的结构 | desc 表名;(desc =describe) |
查看数据表的创建语句 | show create table 表名; |
数据库表操作
1.创建数据库表
语法:
create table表名(
字段名1 类型 约束,
字段名2 类型 约束
... ... ...
)
例子:
创建一个学生表,字段要求:姓名(长度为10),年龄,身高(保留2位小数)
CREATE table students(id int UNSIGNED PRIMARY KEY auto_increment,name VARCHAR(20),height decimal(5,2))
2.删除数据库表
drop table 表名 (该命令将永久性删除表和其所有数据)
drop table if exists students (删除表之前检查表是否存在。如果表存在,则表会被删除;如果表不存在,则不会引发错误)
数据增删改查操作
增(insert):
1.1增加一行数据
insert into 表名 values(...)
例子:
insert into students values(0,'jingbeng',12.66);
//主键自增长可以用0或者NULL代替
另一种写法:
insert into students(name) values('nnn')
1.2增加多行数据
方式一:写多条insert语句,多条语句之间用";"隔开
insert into students(name) value ('jingbeng1');
insert into students(name) value ('jingbeng3');
insert into students values(0,'jingbeng2',23,167.56)
方式二: 通过一条insert语句插入多条数据,数据间用","分隔
格式一: insert into 表名 values (...), (...) ...
例: insert into students values(0,'亚瑟3',23,167.56),(0,'亚瑟4',23,167.56)
格式二: insert into 表名(字段名1,...) value(值1,...),(值1,...)...
例: insert into students(name) value ('老夫子5'),('老夫子6')
2.查(select):
1.1简单查询
select * from 表名;
例子:select * from students;
1.2查询部分字段数据
select 字段1,字段2... from 表名;
例子:select name,sex,age from students;
1.3起别名
表起别名:select 别名.字段1,别名.字段2... from 表名 as 别名;
例子:select s.name,s.age from students as s;
字段起别名:select 字段1 as 别名1,字段2 as 别名 from 表名
例子:select name as n,age as a from students;
1.4字段内容去重
select distinct 字段 from 表名;
1.5条件查询(where)
select 字段1,字段2... from 表名 where 条件;
例: select * from students where id=1;
说明: where支持多种运算符进行条件处理
比较运算
逻辑运算
模糊查询
范围查询
空判断
1.5.1条件查询-比较运算符
例1:查询小乔的年龄
select age from students where name='小乔’
例2:查询20岁以下的学生
select * from students where age<20
例3:查询家乡不在北京的学生
select * from students where hometown!='北京'
1.5.2条件查询-逻辑运算符
例1:查询年龄小于20的女同学
select * from students where age<20 and sex='女'
例2:查询女学生或'1班'的学生
select * from students where sex='女' or class='1班
例3:查询非天津的学生
select * from students where not hometown='天津'
1.5.3条件查询-模糊查询
关键字: like
% :匹配任意多个字符
- : 匹配一个任意字符
例1:查询姓孙的学生
select * from students where name like '孙%'
例2:查询姓孙且名字是一个字的学生
select * from students where name like '孙_'
例3:查询姓名以‘乔’结尾的学生
select * from students where name like '%乔'
例4:查询姓名中包含‘白’的学生
select * from students where name like '%白%'
1.5.4条件查询-范围查询
in表示在一个非连续的范围内
例:查询家乡是北京或上海或广东的学生
select * from students where hometown in('北京','上海','广东')
between ... and ...表示在一个连续的范围内
例:查询年龄为18至20的学生
select * from students where age between 18 and 20
1.5.5条件查询-空判断
注意:Mysql中空表示null,与 ‘’ (空)是不一样的。
判断为空: is null
例:查询没有填写身份证的学生
select * from students where card is null
判断非空: is not null
例:查询填写了身份证的学生
select * from students where card is not null
1.6排序(降序需要加desc)
1.7聚合函数
使用聚合函数是为了方便进行数据进行统计
聚合函数不能在where中使用:
count():查询总记录数
max(字段名):查询最大值
min(字段名):查询最小值
sum(字段名):求和
avg(字段名):求平均数
1.8分组(group by)
语法:select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...
1.9分组后的筛选(having...)
语法: select 字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 条件
having和where的对比:
where 是对 from 后面指定的表进行数据筛选,属于对原始数据的筛选。
having 是对 group by 的结果进行筛选。
having 后面的条件中可以用聚合函数,where后面不可以。
1.10分页-获取部分数据
语法:select * from 表名 limit start count
start表示开始位置,索引默认从0开始
count表示从start位置开始获取count条数据
例子:获取学生表的第2-4行的信息
select * from students limit 1,3;
1.10.1分页显示
分页查询:select * from students limit (n-1)*m,m
说明:n表示显示第几页的数据;m表示每页显示多少条数据
1.11连接查询
内连接(inner join...on...)
语法:
select * from 表1 inner join 表2 on 表1.列=表2.列;
select * from 表1,表2 where 表1.列=表2,列;
左连接(left join...on...)
定义:(右连接反之)
- 左连接是从左表(左侧的表)中选择所有的行,并包括符合连接条件的右表(右侧的表)中的匹配行。
- 如果左表的某一行在右表中没有匹配的行,那么结果集中将会显示右表中对应列的值为 NULL。
- 结果集中将包含左表中的所有行,而右表中不符合连接条件的行将被排除
语法:select * from 表1 left join 表2 on 表1.列=表2.列
右连接
ps:左右连接中谁左(右)哪个最长的表就放在左(右)边
1.14子查询
充当条件
充当数据源
改(update)
语法:update 表名 set 字段名1=新值1,字段名2=新值2....where 条件
删(delete)
语法:delete from 表名 where 条件;