时间:2021-07-01 10:21:17 帮助过:22人阅读
关系型数据库和非关系型数据库
关系型数据库的特点:
1.数据以表格的形式出现;
2.每行是各种记录名称;
3.每列是记录名称所对应的数据域;
4.许多的行和列组成一张表单;
5若干的表单组成数据库。
MySQL数据库基本操作
连接数据库:
mysql:采用匿名账号和密码登陆本机服务。
mysql -h localhost -u root -proot:采用root账号和root密码登陆本机服务。
注:localhost指本地主机,即MySQL数据库所在的那台主机。
mysql -u root -p:推荐方式默认登陆本机
Enter password:***
mysql -u root -p mydb:直接进入mydb数据库的方式登陆
SQL语句中的快捷键:
\G:格式化输出(文本式)
\s:查看服务器端信息
\c:结束命令输入操作
\q:退出当前sql命令行模式
\h:查看帮助
数据库操作:
show databases; 查看当前用户下的所有数据库
create database [if not exists] 数据库名; 创建数据库
use 数据库名; 选择进入数据库
show create database 数据库名\G; 查看建库语句
select database(); 查看当前所在的数据库位置
drop database [if exists] 数据库名; 删除一个数据库
数据表操作:
show tables; 查看当前库下的所有数据表
desc(describe) 数据表; 查看数据表的结构
show columns from 数据表; 查看数据表的结构
show create table 表名\G 查看建表语句
create table 表名(
name varchar(16) not null,
age int); 创建数据表
drop table if exists 数据表名; 删除数据表
数据操作(增、删、改):
增加数据
insert into stu(name, age, sex) values(‘zhangsan’, 22, ‘male’);
不指定字段名添加一条数据
insert into stu values(‘zhangsan’, 22, ‘male’);
指定部分字段名添加一条数据
insert into stu(name, age) values(‘zhangsan’, 22);
批量添加数据
insert into stu(name, age, sex) values(‘zhangsan’, 22, ‘male’), (‘lisi, 21, ‘female’);
删除数据
delete from stu; 清空表中所有数据
delete from stu where name = ‘zhangsan’; 有条件的删除表中部分数据
修改数据
格式:update 表名 set 字段1=值1, 字段2=值2,… where 条件
update stu set age=26; 无条件的修改所有数据
update stu set age=26 where name = ‘zhangsan’; 有条件的修改部分数据
update stu set age=26, sex=’female’ where name = ‘zhangsan’; 同时修改两个字段信息
MySQL数据类型
MySQL的数据类型分为三个类:数值类型、字串类型、日期类型 。 还有一个特殊的值:NULL。
数值类型:
*tinyint(1字节) 0~255 或 -128~127
smallint(2字节)
mediumint(3字节)
*int(4字节)
bigint(8字节)
*float(4字节) float(6,2)
*double(8字节)
decimal(自定义)字串形数值
字串类型:
普通字串类型
*char 定长字串 char(8)
*varchar 可变字串 varchar(8)
二进制类型
tinyblob
blob
mediumblob
longblob
文本类型
tinytext
*text 常用于<textarea></textarea>
mediumtext
longtext
*enum枚举
set集合
时间和日期类型:
date 年月日
time 时分秒
*datetime 年月日时分秒
timestamp 时间戳
year 年
NULL值:
NULL意味着“没有值”或“未知值”
可以测试某个值是否为NULL
不能对NULL值进行算术计算
0或NULL都意味着假,其余值都意味着真
表的字段约束
unsigned 无符号(正数)
zerofill 前导零填充
auto_increment 自增
default 默认值
not null 非空
primary key 主键(非null并不重复)
unique 唯一性(可以为null但不重复)
index 常规索引
建表语句格式
create table 表名(
字段名 类型 [字段约束],
字段名 类型 [字段约束],
字段名 类型 [字段约束],
...
);
create table stu(
-> id int unsigned not null auto_increment primary key,
-> name varchar(8) not null unique,
-> age tinyint unsigned,
-> sex enum(‘m‘,‘w‘) not null default ‘m‘,
-> classid char(6)
-> );
MySQL的运算符
算术运算符:+ - * / %
比较运算符:= > < >= <= <> !=
数据库特有的比较:in,not in, is null, is not null, like, between ... and
逻辑运算符:and or not
修改表结构:
格式: alter table 表名 action(更改选项);
添加字段:alter table 表名 add 字段名信息
alter table stu add class char not null; 在stu表的最后增加一个class字段。
alter table stu add hobby varchar(255) default null after name; 在stu表的name字段后增加一个hobby字段。
alter table stu add school varchar(255) not null first; 在stu表的最前面增加一个school字段。
删除字段:alter table 表名 drop 被删除的字段名
alter table stu drop score; 删除stu表的score字段。
修改字段:alter table 表名 change[modify] 被修改后的字段信息
注意:change可以修改字段名, modify 不能修改字段名。
alter table stu modify age tinyint not null default 0; 修改stu表中的age字段信息(使用modify只修改字段信息,不修改字段名)。
alter table stu change hobby gender enum(‘m‘, ‘w‘) not null default ‘m‘; 将stu表中的hobby字段改为gender字段(使用change可修改字段名和信息)。
添加和删除索引:
alter table stu add index index_school(school); 为stu表中的school字段添加普通索引,索引名为index_school。
alter table stu add unique unique_uid(uid); 为stu表中的uid字段添加唯一性索引,索引名为unique_uid。
alter table stu drop index unique_uid; 将stu表中的unique_uid索引删除。
更改表名称:alter table stu rename as students; 将旧表明stu改为新表明students。
更改auto_increment的初始值:alter table students auto_increment=1;
更改表类型:alter table students engine=‘InnoDB‘;
MySQL数据库中的表类型一般常用两种:MyISAM和InnoDB。
MySQL单表查询
格式:
select [字段列表]|* from 表名
[where 搜索条件]
[group by 分组字段 [having 子条件]]
[order by 排序 asc|desc]
[limit 分页参数]
无条件查询:
# 查询所有字段信息 > select * from stu; +----+----------+--------+---------+-----+ | id | name | gender | class | age | +----+----------+--------+---------+-----+ | 1 | zhangsan | m | python3 | 20 | | 2 | lisi | w | python4 | 20 | | 3 | wangwu | w | python3 | 21 | | 4 | zhaoliu | m | python5 | 22 | | 5 | yang | w | python6 | 26 | | 6 | wagbon | m | python5 | 25 | | 7 | aaa | w | python4 | 22 | | 8 | bbb | m | python5 | 23 | | 9 | ccc | w | python6 | 21 | | 10 | dd02 | m | python3 | 20 | +----+----------+--------+---------+-----+ # 查询部分字段 > select id, name from stu; +----+----------+ | id | name | +----+----------+ | 1 | zhangsan | | 2 | lisi | | 3 | wangwu | | 4 | zhaoliu | | 5 | yang | | 6 | wagbon | | 7 | aaa | | 8 | bbb | | 9 | ccc | | 10 | dd02 | +----+----------+ # 查询部分字段,并增加字段查询 > select id, name, age, age+5 from stu; # 得到5年后的年龄 +----+----------+-----+-------+ | id | name | age | age+5 | +----+----------+-----+-------+ | 1 | zhangsan | 20 | 25 | | 2 | lisi | 20 | 25 | | 3 | wangwu | 21 | 26 | | 4 | zhaoliu | 22 | 27 | | 5 | yang | 26 | 31 | | 6 | wagbon | 25 | 30 | | 7 | aaa | 22 | 27 | | 8 | bbb | 23 | 28 | | 9 | ccc | 21 | 26 | | 10 | dd02 | 20 | 25 | +----+----------+-----+-------+ # 也可以在查询的时候重命名字段名 > select id, name as stu_name, age, age+5 age5 from stu; # 字段name重命名为stu_name, +----+----------+-----+------+ # 字段age+5重命名为age5,关键字as可省略 | id | stu_name | age | age5 | +----+----------+-----+------+ | 1 | zhangsan | 20 | 25 | | 2 | lisi | 20 | 25 | | 3 | wangwu | 21 | 26 | | 4 | zhaoliu | 22 | 27 | | 5 | yang | 26 | 31 | | 6 | wagbon | 25 | 30 | | 7 | aaa | 22 | 27 | | 8 | bbb | 23 | 28 | | 9 | ccc | 21 | 26 | | 10 | dd02 | 20 | 25 | +----+----------+-----+------+
where条件查询(基于MySQL 的运算符)
> select * from stu where id=5; # 查询id=5的学生信息 +----+------+--------+---------+-----+ | id | name | gender | class | age | +----+------+--------+---------+-----+ | 5 | yang | w | python6 | 26 | +----+------+--------+---------+-----+ > select * from stu where id in (2, 4, 7); # 查询id分别为2、4、7的学生信息 +----+---------+--------+---------+-----+ | id | name | gender | class | age | +----+---------+--------+---------+-----+ | 2 | lisi | w | python4 | 20 | | 4 | zhaoliu | m | python5 | 22 | | 7 | aaa | w | python4 | 22 | +----+---------+--------+---------+-----+ > select * from stu where id between 3 and 6; # 查询id在3-6之间的学生信息 +----+---------+--------+---------+-----+ | id | name | gender | class | age | +----+---------+--------+---------+-----+ | 3 | wangwu | w | python3 | 21 | | 4 | zhaoliu | m | python5 | 22 | | 5 | yang | w | python6 | 26 | | 6 | wagbon | m | python5 | 25 | +----+---------+--------+---------+-----+ > select * from stu where id>3 and id < 9; # 查询id大于3小于9的学生信息 +----+---------+--------+---------+-----+ | id | name | gender | class | age | +----+---------+--------+---------+-----+ | 4 | zhaoliu | m | python5 | 22 | | 5 | yang | w | python6 | 26 | | 6 | wagbon | m | python5 | 25 | | 7 | aaa | w | python4 | 22 | | 8 | bbb | m | python5 | 23 | +----+---------+--------+---------+-----+ > select * from stu where class=‘python5‘ and gender=‘m‘; # 查询班级为python5性别为m的学生信息 +----+---------+--------+---------+-----+ | id | name | gender | class | age | +----+---------+--------+---------+-----+ | 4 | zhaoliu | m | python5 | 22 | | 6 | wagbon | m | python5 | 25 | | 8 | bbb | m | python5 | 23 | +----+---------+--------+---------+-----+View Code
like运算符模糊查询
> select * from stu where name like "%a%"; # 模糊查询名字中间有字母a的学生 +----+----------+--------+---------+-----+ | id | name | gender | class | age | +----+----------+--------+---------+-----+ | 1 | zhangsan | m | python3 | 20 | | 3 | wangwu | w | python3 | 21 | | 4 | zhaoliu | m | python5 | 22 | | 5 | yang | w | python6 | 26 | | 6 | wagbon | m | python5 | 25 | | 7 | aaa | w | python4 | 22 | +----+----------+--------+---------+-----+ > select * from stu where name like "%ang%"; # 模糊查询名字中间有字母ang的学生 +----+----------+--------+---------+-----+ | id | name | gender | class | age | +----+----------+--------+---------+-----+ | 1 | zhangsan | m | python3 | 20 | | 3 | wangwu | w | python3 | 21 | | 5 | yang | w | python6 | 26 | +----+----------+--------+---------+-----+ > select * from stu where name like "____"; # 模糊查询名字为四个字符的学生,一个_表示一个字符 +----+------+--------+---------+-----+ | id | name | gender | class | age | +----+------+--------+---------+-----+ | 2 | lisi | w | python4 | 20 | | 5 | yang | w | python6 | 26 | | 10 | dd02 | m | python3 | 20 | +----+------+--------+---------+-----+ > select * from stu where name like "z%"; # 模糊查询名字以字母z开头的学生 +----+----------+--------+---------+-----+ | id | name | gender | class | age | +----+----------+--------+---------+-----+ | 1 | zhangsan | m | python3 | 20 | | 4 | zhaoliu | m | python5 | 22 | +----+----------+--------+---------+-----+ > select * from stu where name like "%g"; # 模糊查询名字以字母g结尾的学生 +----+------+--------+---------+-----+ | id | name | gender | class | age | +----+------+--------+---------+-----+ | 5 | yang | w | python6 | 26 | +----+------+--------+---------+-----+
聚合函数:count()、max()、min()、sum()、avg()
# count()函数统计非空数据条数 > select count(*) from stu; # 统计学生人数 +----------+ | count(*) | +----------+ | 10 | +----------+ > select count(id) from stu; # 通过非空字段统计 +-----------+ | count(id) | +-----------+ | 10 | +-----------+ # max()、min()、sum()、avg()分别统计某字段的最大值、最小值、总和、平均值 > select count(id), max(age), min(age), sum(age), avg(age) from stu; +-----------+----------+----------+----------+----------+ # 统计了学生的最大年龄、最小年龄、年龄总和、平均年龄 | count(id) | max(age) | min(age) | sum(age) | avg(age) | +-----------+----------+----------+----------+----------+ | 10 | 26 | 20 | 220 | 22.0000 | +-----------+----------+----------+----------+----------+
group by分组查询(配合聚合函数使用)
> select class from stu group by class; # 按班级分组进行查询 +--