mysql基本操作

王伟超

1、MySQL概述
1、什么是数据库
存储数据的仓库
2、都有哪些公司在用数据库
金融机构、游戏网站、购物网站、论坛网站 … …
3、提供数据库服务的软件
1、软件分类
MySQL、Oracle、SQL_Server、DB2、MongoDB、MariaDB
2、生产环境中,如何选择使用哪个数据库软件
1、是否开源
1、开源软件:MySQL、Mariadb、MongoDB
2、商业软件:Oracle、DB2、SQL_Server
2、是否跨平台
1、不跨平台 :SQL_Server
2、跨平台 :…
3、公司的类型
1、商业软件 :政府部门、金融机构
2、开源软件 :游戏网站、购物网站、论坛网站 …
4、MySQL的特点
1、关系型数据库
1、关系型数据库特点
1、数据是以行和列(表格)的形式去存储的
2、表中的每一行叫一条记录,每一列叫一个字段
3、表和表之间的逻辑关联叫关系
2、示例
1、关系型数据库存储
表1、学生信息表
姓名 年龄 班级
星矢 25 三班
水冰月 25 六班
表2、班级信息表
班级 班主任
三班 大空翼
六班 松人
2、非关系型数据库中存储
{“姓名”:“水冰月”,“年龄”:25,“班级”:“六班”}
{“姓名”:“星矢”,“年龄”:25,“班级”:“三班”,“班主任”:“大空翼”}
2、跨平台
可以在Unix、Linux、Windows上运行数据库服务
3、支持多种编程语言
python、java、php … …
5、数据库软件、数据库、数据仓库的概念
1、数据库软件
一个软件,看的见,可操作,实现数据库的逻辑功能
2、数据库
是一种逻辑概念,用来存放数据的仓库,侧重存储
3、数据仓库
从数据量上来说,比数据库庞大的多,主要用于数据分析和数据挖掘

  网购:
    数据库 :user表
数据仓库 :哪个时间段用户登录量最多,哪个用户一年购物最多

2、MySQL安装
1、Ubuntu安装MySQL服务
1、安装服务端
sudo apt-get install mysql-server
2、安装客户端
sudo apt-get install mysql-client
3、Ubuntu安装软件
1、sudo apt-get update
访问源列表中的每个网址,读取软件列表,保存到本地/var/lib/apt/lists/
2、sudo apt-get upgrade
把本地已安装软件与刚下载的软件列表进行对比,如果发现已安装软件版本低,则更新
3、sudo apt-get -f install
修复依赖关系
2、Windows安装MySQL
1、下载MySQL安装包(windows)
mysql-installer***5.7.***.msi
2、安装教程去安装
3、启动和连接MySQL服务
1、服务端启动
1、查看MySQL状态
sudo /etc/init.d/mysql status
sudo /etc/init.d/mysql start | stop | restart
2、客户端连接
1、命令格式
mysql -h主机地址 -u用户名 -p密码
mysql -hlocalhost -uroot -p123456
2、本地连接可省略 -h 选项
mysql -uroot -p123456
4、基本SQL命令
1、SQL命令的使用规则
1、每条命令必须以 ; 结尾
2、SQL命令不区分字母大小写
3、使用 \c 来终止当前命令的执行
2、库的管理
1、库的基本操作
1、查看已有库
show databases;
2、创建库(指定字符集)
create database 库名 [character set utf8];
3、查看创建库的语句(字符集)
show create database 库名;
4、查看当前所在库
select database();
5、切换库
use 库名;
6、查看库中已有表
show tables;
7、删除库
drop database 库名;
2、库名的命名规则
1、数字、字母、下划线,但不能使用纯数字
2、库名区分字母大小写
3、不能使用特殊字符和mysql关键字
3、练习
1、创建库testdb,指定字符集为 utf8
create database testdb character set utf8;
2、进入到库 testdb
use testdb;
3、查看当前所在库
select database();
4、创建库 testdb2,指定字符集为 latin1
create database testdb2 character set latin1;
5、进入到库 testdb2
use testdb2;
6、查看 testdb2 的字符集(查看创建库的语句)
show create database testdb2;
7、删除库 testdb
drop database testdb;
8、删除库 testdb2
drop database testdb2;
3、表的管理
1、表的基本操作
1、创建表(指定字符集)
create table 表名(
字段名 数据类型,
字段名 数据类型,

字段名 数据类型
);
2、查看已有表的字符集
show create table 表名;
3、查看表结构
desc 表名;
4、删除表
drop table 表名;
2、练习
1、创建库python1
2、在python1库中创建表 pymysql并指定字符集为utf8,字段有三个:id 、name char(15) 、 age
3、查看创建表pymysql的语句
4、查看pymysql的表结构
5、删除表pymysql
6、创建库python2
7、在python2中创建表t1并指定字符集为utf8,字段有 id 、name 、score,数据类型自己定义
8、查看t1的表结构
9、删除表t1
10、删除库 python2
4、注意
1、所有的数据都是以文件的形式存放在数据库目录下
2、数据库目录 :/var/lib/mysql
5、Mac安装mysql
1、cd
2、vi .bash_profile
添加 :PATH="$PATH":/usr/local/mysql/bin
3、source .bash_profile
6、表记录管理
1、插入(insert)
1、insert into 表名 values(值1),(值2),…;
2、insert into 表名(字段1,…) values(值1),…;
2、查询(select)
1、select * from 表名 [where 条件];
2、select 字段1,字段名2 from 表名 [where 条件];
3、练习
1、查看所有的库
show databases;
2、创建新库 studb
create database studb;
3、在 studb 中创建表 tab1 ,指定字符集utf8,字段有 id 、name、age
use studb;
create table tab1(
id int,
name char(10),
age int
)character set utf8;
4、查看tab1的表结构
desc tab1;
5、在tab1中随便插入2条记录
insert into tab1 values
(1,“张三丰”,100),(2,“张无忌”,30);
6、在tab1中的name、age两个字段插入2条记录
insert into tab1(name,age) values
(“金毛狮王”,88),(“紫衫龙王”,87);
7、查看tab1中所有记录
select * from tab1;
8、查看tab1表中所有人的姓名和年龄
select name,age from tab1;
9、查看tab1表中年龄大于20的信息
select * from tab1 where age>20;
5、如何更改默认字符集
1、方法(通过更改MySQL配置文件实现)
2、步骤
1、获取root权限
sudo -i
2、cd /etc/mysql/mysql.conf.d/
3、备份 :cp mysqld.cnf mysqld.cnf.bak
4、subl mysqld.cnf
[mysqld]
character_set_server = utf8
5、重启mysql服务
/etc/init.d/mysql restart

MAC:/etc/my.cnf
     [mysqld]
 character_set_server = utf8

6、客户端把数据存储到数据库服务器上的过程
1、连接到数据服务器 mysql -uroot -p123456
2、选择一个库 use 库名
3、创建表/修改表 update 表名…
4、断开与数据库连接 exit; | quit; | \q;
7、数据类型
1、数值类型
1、整型
1、int 大整型(4个字节)
取值范围 :2**32 - 1(42亿多)
2、tinyint 微小整型(1个字节)
1、有符号(signed默认) : -128 ~ 127
2、无符号(unsigned) : 0 ~ 255
age tinyint unsigned,
3、smallint 小整型(2个字节)
4、bigint 极大整型(8个字节)
2、浮点型
1、float(4个字节,最多显示7个有效位)
1、用法
字段名 float(m,n) m->总位数 n->小数位位数
float(5,2)取值范围? -999.99 ~ 999.99
2、decimal(最多显示28个有效位)
1、decimal(m,n)
2、存储空间(整数、小数分开存储)
规则:将9的倍数包装成4个字节

  余数    字节
    0       0
   1-2      1
   3-4      2
   5-6      3
   7-9      4
示例:decimal(19,9)
  整数部分:10/9=商1余1 4字节+1字节=5字节
  小数部分:9/9=商1余0 4字节+0字节=4字节
  占:9字节
3、练习
  1、创建库 studb2 ,并在库中创建表 stuinfo,要求:
    id :大整型
name :字符类型,宽度为15
age :微小整型,不能为负数
height :浮点型,小数位为2位(float)
money :浮点型,小数位为2位(decimal)
    
    create table stuinfo(
id int,
name char(15),
age tinyint unsigned,
    height float(5,2),
money decimal(20,2)
);
  2、查看stuinfo的表结构
  3、查看stuinfo的默认字符集
  4、在表中插入1条完整记录
    desc stuinfo;
insert into stuinfo values (1,"Bob",23,176,88888.88);
  5、查询所有表记录
    select * from stuinfo;
  6、在表中id 、name两个字段插入2条记录
    insert into stuinfo(id,name) values
(2,"Jim"),(3,"Tom");
  7、查询所有学生的id和姓名
    select id,name from stuinfo;

2、字符类型
1、char(定长)
1、取值范围:1~255
2、varchar(变长)
1、取值范围:1~65535
3、text / longtext(4G) / blob / longblob(4G)
3、char和varchar的特点
1、char :浪费存储空间,性能高
2、varchar :节省存储空间,性能低
8、作业
1、MySQL中数据类型有:____ ___枚举类型 日期时间类型
2、关系型数据库中的核心内容是 关系 即 二维表
3、简述客户端把数据存储到数据库服务器上的过程
4、char和varchar的区别,各自的特点
5、操作
1、创建一个学校的库 school
2、在库中创建表 students 用来存储学生信息:
id 大整型
姓名、年龄(不能为负)、性别、成绩(浮点)
3、查看students的表结构
4、在表中随意插入3条记录
5、在表中的 姓名、成绩两个字段插入3条记录
6、查看所有学生的姓名和成绩
8、查看成绩及格(>60分)的学生的姓名和成绩
Day02回顾
1、数据类型
1、数值类型
2、字符类型
3、枚举类型
1、单选 :enum(值1,…)
2、多选 :set(值1,值2,…)
## “MySQL,Python,Study”
4、日期时间类型
1、date
2、time
3、datetime # 不给值默认返回NULL
4、timestamp # 不给值默认返回系统当前时间
2、日期时间函数
1、NOW()
2、CURDATE()
3、CURTIME()
4、YEAR(字段名)
5、DATE(字段名)
6、TIME(字段名)
7、日期时间运算
select … from 表名
where 字段名 运算符(时间-interval 时间间隔单位)
1 day | 2 day | 3 hour
3、表字段操作
1、添加(add)
alter table 表名 add 字段名 数据类型 first|after.;
2、修改(modify)
alter table 表名 modify 字段名 新数据类型;
3、删除(drop)
alter table 表名 drop 字段名;
4、表重命名(rename)
alter table 表名 rename 新表名;
5、表字段重命名(change)
alter table 表名 change 原名 新名 数据类型;
4、表记录管理
1、删除
delete from 表名 where 条件;
2、修改
update 表名 set 字段1=值2,… where 条件;
5、运算符
1、数值&&字符&&逻辑比较
1、数值 :> >= < <= = !=
2、字符 := !=
3、逻辑 :and or
2、范围内比较
1、between 数值1 and 数值2
2、in(值1,…)
3、not in(值1,…)
3、空、非空
1、is NULL
2、is not NULL
4、模糊比较(like)
1、字段名 like 表达式
2、
%
6、SQL查询
1、order by
1、order by 字段名 ASC/DESC
2、limit
1、limit n
2、limit m,n
3、分页
每页显示m条,显示第n页内容
limit (n-1)*m,m
3、聚合函数
avg(…) sum(…) max(…) min(…)
count(字段名) ## 空值NULL不会被统计
Day03笔记
1、SQL查询
1、执行顺序
3、select …聚合函数 from 表名
1、where …
2、group by …
4、having …
5、order by …
6、limit …
2、group by
1、作用 :给查询结果进行分组
2、示例
1、查询表中一共有几个国家

  2、计算每个国家的平均攻击力
    select country,avg(gongji) from sanguo
    group by country;
    
先分组 -> 再聚合 -> 再去重
    蜀国
蜀国
蜀国   --> 120    --> 蜀国
魏国
魏国   --> 110    --> 魏国
吴国   --> 115    --> 吴国
  3、查找所有国家中英雄数量最多的前2名的 国家名称和英雄数量
   select country,count(id) as number from sanguo
   group by country
   order by number desc
   limit 2;
3、注意
  1、group by之后的字段名必须要为select之后的字段名
  2、如果select之后的字段名和group by之后的字段不一致,则必须对该字段进行聚合处理(聚合函数)

3、having语句
1、作用
对查询的结果进行进一步筛选
2、示例
1、找出平均攻击力>105的国家的前2名,显示国家名和平均攻击力
select country,avg(gongji) as pjgj from sanguo
group by country
having pjgj>105
order by pjgj DESC
limit 2;
3、注意
1、having语句通常和group by语句联合使用,过滤由group by语句返回的记录集
2、where只能操作表中实际存在字段,having可操作由聚合函数生成的显示列
4、distinct
1、作用 :不显示字段重复值
2、示例
1、表中都有哪些国家
select distinct country from sanguo;
2、计算蜀国一共有多少个英雄
select count(distinct id) from sanguo
where country=“蜀国”;
3、注意
1、distinct和from之间所有字段都相同才会去重
2、distinct不能对任何字段做聚合处理
5、查询表记录时做数学运算
1、运算符
+ - * / %
2、示例
1、查询时所有英雄攻击力翻倍
select id,name,gongji*2 as gj from sanguo;

sudo apt-get install python3-pip

sudo pip3 install pymysql

2、约束
1、作用 :保证数据的完整性、一致性、有效性
2、约束分类
1、默认约束(default)
1、插入记录,不给该字段赋值,则使用默认值
2、非空约束(not NULL)
1、不允许该字段的值有NULL记录
sex enum(“M”,“F”,“S”) not null defalut “S”
3、索引
1、定义
对数据库表的一列或多列的值进行排序的一种结构(Btree方式)
2、优点
加快数据检索速度
3、缺点
1、占用物理存储空间
2、当对表中数据更新时,索引需要动态维护,降低数据维护速度
4、索引示例
1、开启运行时间检测 :set profiling=1;
2、执行查询语句
select name from t1 where name=“lucy99999”;
3、查看执行时间
show profiles;
4、在name字段创建索引
create index name on t1(name);
5、再执行查询语句
select name from t1 where name=“lucy88888”;
6、查看执行时间
show profiles;
5、索引
1、普通索引(index)
1、使用规则
1、可设置多个字段
2、字段值无约束
3、key标志 :MUL
2、创建index
1、创建表时
create table 表名(…
index(字段名),index(字段名));
2、已有表
create index 索引名 on 表名(字段名);
create index name on t3(name);
3、查看索引
1、desc 表名; --> KEY标志为:MUL
2、show index from 表名\G;
4、删除索引
drop index 索引名 on 表名;
2、唯一索引(unique)
1、使用规则
1、可设置多个字段
2、约束 :字段值不允许重复,但可为 NULL
3、KEY标志 :UNI
2、创建
1、创建表时创建
unique(字段名),
unique(字段名)
2、已有表
create unique index 索引名 on 表名(字段名);
3、查看、删除 同 普通索引
3、主键索引(primary key)
自增长属性(auto_increment,配合主键一起使用)
1、使用规则
1、只能有一个主键字段
2、约束 :不允许重复,且不能为NULL
3、KEY标志 :PRI
4、通常设置记录编号字段id,能唯一锁定一条记录
2、创建
1、创建表时
(id int primary key auto_increment,
)auto_increment=10000;##设置自增长起始值
已有表添加自增长属性:
alter table 表名 modify id int auto_increment;
已有表重新指定起始值:
alter table 表名 auto_increment=20000;
2、已有表
alter table 表名 add primary key(id);
3、删除
1、删除自增长属性(modify)
alter table 表名 modify id int;
2、删除主键索引
alter table 表名 drop primary key;
4、外键索引
4、数据导入
1、作用 :把文件系统的内容导入到数据库中
2、语法
load data infile “/var/lib/mysql-files/文件名”
into table 表名
fields terminated by “分隔符”
lines terminated by “\n”;
3、将scoretable.csv文件导入到数据库的表中
1、在数据库中创建对应的表
create table scoretab(
id int,
name varchar(15),
score float(5,2),
number bigint,
class char(7)
);
2、把文件拷贝到数据库的默认搜索路径中
1、查看默认搜索路径
show variables like “secure_file_priv”;
/var/lib/mysql-files/
2、拷贝文件
sudo cp ~/scoretable.csv /var/lib/mysql-files/
3、执行数据导入语句
load data infile “/var/lib/mysql-files/scoretable.csv”
into table scoretab
fields terminated by “,”
lines terminated by “\n”;
4、文件权限
rwxrw-rw- 1 tarena tarena scoretable.csv
所有者 所属组
rwx : tarena用户
rw- : 同组其他用户
rw- : 其他组的其他用户(mysql用户)

   r -> 4
   w -> 2
   x -> 1
   chmod 644 文件名   rw-r--r--
5、Excel表格如何转化为CSV文件
  1、打开Excel文件 -> 另存为 -> CSV(逗号分隔)
6、更改文件编码格式
  1、用记事本/编辑器 打开,文件->另存为->选择编码

5、数据导出
1、作用
将数据库中表的记录导出到系统文件里
2、语法格式
select … from 表名
into outfile “/var/lib/mysql-files/文件名”
fields terminated by “分隔符”
lines terminated by “\n”;
3、把MOSHOU库下的sanguo表英雄的姓名、攻击值、国家导出来,sanguo.txt
select name,gongji,country from MOSHOU.sanguo
into outfile “/var/lib/mysql-files/sanguo.txt”
fields terminated by " "
lines terminated by “\n”;
$ sudo -i
$ cd /var/lib/mysql-files/
$ ls
$ cat sanguo.txt
4、将mysql库下的user表中 user、host两个字段的值导出到 user.txt
select user,host from mysql.user
into outfile “/var/lib/mysql-files/user.txt” fields terminated by " "
lines terminated by “\n”;
作业:
1、把 /etc/passwd 导入到数据库表userinfo里面
tarena : x : 1000 : 1000 : tarena,
用户名 密码 UID号 GID号 用户描述
: /home/tarena: /bin/bash
家目录/主目录 登录权限
2、在userinfo第一列添加一个 id 字段,主键、自增长、显示宽度为3,位数不够用0填充
3、面试题
有一张文章评论表comment如下
comment_id article_id user_id date
1 10000 10000 2018-01-30 09:00:00
2 10001 10001 … …
3 10002 10000 … …
4 10003 10015 … …
5 10004 10006 … …
6 10025 10006 … …
7 10009 10000 … …
以上是一个应用的comment表格的一部分,请使用SQL语句找出在本站发表的所有评论数量最多的10位用户及评论数,并按评论数从高到低排序
备注:comment_id为评论id
article_id为被评论文章的id
user_id 指用户id

Day01回顾
1、MySQL特点
1、关系型数据库
2、跨平台
3、支持多种编程语言
2、启动连接
sudo /etc/init.d/mysql start|stop|restart|status
mysql -hIP地址 -u用户名 -p密码
MySQL中数据是以文件形式存放在数据库目录/var/lib/mysql
关系型数据库的核心内容是 关系 即 二维表
3、基本SQL命令
1、库管理
1、show databases;
2、create database 库名 character set latin1;
3、select database();
4、use 库名;
5、show tables;
6、drop database 库名;
2、表管理
1、create table 表名(字段名 数据类型,…) char…;
2、show create table 表名; (字符集、存储引擎)
3、desc 表名;
4、drop table 表1,表2,表3;
3、表记录管理
1、插入记录
insert into 表名(字段1,…) values(值1),…;
2、查询记录
select 字段1,字段2,… from 表名 where 条件;
4、如何更改默认字符集
1、sudo -i
2、cd /etc/mysql/mysql.conf.d/
3、cp mysqld.cnf mysqld.cnf.bak
4、vi mysqld.cnf
[mysqld]
character_set_server = utf8
5、/etc/init.d/mysql restart | reload
6、数据类型
1、数值类型
1、整型
1、int (4个字节)
2、tinyint (1个字节)
1、默认有符号:signed
2、无符号: tinyint unsigned
3、bigint (8个字节)
char(11) 11个字节
2、浮点型
1、float(m,n) -->最多显示7个有效位
2、decimal(m,n)
2、字符类型
1、定长 char(15) : 浪费存储空间,性能高
2、边长 varchar(20) : 节省存储空间,性能低
3、text / longtext / blob / longblob
3、注意
1、浮点型 插入整数时会自动补全小数位位数
2、小数位多于指定的位数,会对下一位进行四舍五入
MySQL-Day02笔记
1、表字段的操作
1、语法 :alter table 表名 执行动作;
2、添加字段(add)
alter table 表名 add 字段名 数据类型;
alter table 表名 add 字段名 数据类型 first;
alter table 表名 add 字段名 数据类型 after 字段名;
3、删除字段(drop)
alter table 表名 drop 字段名;
4、修改数据类型(modify)
alter table 表名 modify 字段名 新数据类型;
5、表重命名(rename)
alter table 表名 rename 新表名;
6、练习
1、创建库 studb2
2、在库中创建表 t1 ,字段有3个:name、age、phnumber
use studb2;
create table t1(
name char(20),
age tinyint unsigned,
phnumber char(11)
);
3、查看表结构
desc t1;
4、在表中第一列添加一个 id 字段
alter table t1 add id int first;
5、把 phnumber 的数据类型改为 bigint
alter table t1 modify phnumber bigint;
6、在表中最后一列添加一个字段 address
alter table t1 add address varchar(50);
7、删除表中的 age 字段
alter table t1 drop age;
8、查看表结构
desc t1;
2、数据类型
1、数值类型
2、字符类型
1、字符类型宽度和数值类型宽度的区别
1、数值类型宽度为显示宽度,只用于select查询显示,和占用存储无关,可用zerofill查看效果
2、字符类型的宽度超过之后则无法存储
3、枚举类型
1、单选(enum) :字段名 enum(值1,值2,…)
2、多选(set) :字段名 set(值1,值2,…)
## 插入记录时: “F,study,Python”
create table t5(
id int(3) zerofill,
name varchar(15),
sex enum(“M”,“F”,“Secret”),
likes set(“F”,“M”,“study”,“Python”)
);
insert into t5(likes) values(“F,study,Python”);
4、日期时间类型
1、date :“YYYY-MM-DD”
2、time :“HH:MM:SS”
3、datetime :“YYYY-MM-DD HH:MM:SS”
4、timestamp :“YYYY-MM-DD HH:MM:SS”
5、注意
1、datetime :不给值默认返回NULL值
2、timestamp :不给值默认返回系统当前时间
create table t7(
id int,
name varchar(15),
birthday date,
money int,
shijian datetime
);
insert into t7 values(2,“王”,date(now()),10000,now());
3、日期时间函数
1、now() 返回服务器当前时间
2、curdate() 返回当前日期
3、curtime() 返回当前时间
4、year(date) 返回指定时间的年份
5、date(date) 返回指定时间的日期
6、time(date) 返回指定时间的时间
7、练习
1、在表中插入3条记录
insert into t7 values
(3,“小昭”,19000520,3000,20180630000000),
(4,“赵敏”,19000521,4000,20180702000000),
(5,“周芷若”,19010522,3500,20180702100000);
2、查找2018年7月2日有哪些用户充值了
select * from t7 where date(shijian)=“2018-07-02”;

3、查找2018年7月份充值的信息
  select * from t7 
  where 
  date(shijian)>="2018-07-01" and date(shijian)<="2018-07-31";

4、查找7月30日10:00-12:00充值的信息
  select * from t7 
  where
  date(shijian)="2018-07-31" and 
  time(shijian)>="10:00:00" and 
  time(shijian)<="12:00:00";

4、日期时间运算
1、语法格式
select * from 表名
where 字段名 运算符 (时间-interval 时间间隔单位);
时间间隔单位:
1 day | 2 hour | 1 minute | 2 year | 3 month
2、练习
1、查询1天以内的记录
select * from t7
where shijian > (now()-interval 1 day);
age > 20
2、查询1年以前的记录
select * from t7
where shijian < (now()-interval 1 year);
3、查询1天以前,3天以内的记录
select * from t7
where
shijian < (now()-interval 1 day) and
shijian > (now()-interval 3 day);
5、表记录管理
1、删除表记录
1、delete from 表名 where 条件;
2、注意
delete语句后如果不加where条件,所有记录全部清空
2、更新表记录
1、update 表名 set 字段1=值1,字段2=值2,… where 条件;
2、注意
必须加where条件
3、练习(表hero)
1、查找所有蜀国人的信息
select * from hero where country=“蜀国”;
2、查找所有女英雄的姓名、性别和国家
select name,sex,country from hero
where sex=“女”;
3、把id为2的记录改为典韦,性别男,国家魏国
update hero set name=“典韦”,sex=“男”,country=“魏国” where id=2;
4、删除所有蜀国英雄
delete from hero where country=“蜀国”;
5、把貂蝉的国籍改为魏国
update hero set country=“魏国”
where name=“貂蝉”;
6、删除所有表记录
delete from hero;
4、运算符操作
1、数值比较/字符比较
1、数值比较 := != > >= < <=
2、字符比较 := !=
3、练习
1、查找攻击力高于150的英雄的名字和攻击值
select name,gongji from sanguo where gongji>150;
2、将赵云的攻击力设置为360,防御力设置为68
update sanguo set gongji=360,fangyu=68
where name=“赵云”;
2、逻辑比较
1、and (两个或多个条件同时成立)
2、or (任意一个条件成立即可)
3、练习
1、找出攻击值高于200的蜀国英雄的名字、攻击力
select name as n,gongji as g from sanguo
where gongji>200 and country=“蜀国”;
2、将吴国英雄中攻击值为110的英雄的攻击值改为100,防御力改为60
update sanguo set gongji=100,fangyu=60
where country=“吴国” and gongji=110;
3、查找蜀国和魏国的英雄信息
select * from sanguo
where country=“蜀国” or country=“魏国”;
3、范围内比较
1、between 值1 and 值2
2、where 字段名 in(值1,值2,…)
3、where 字段名 not in(值1,值2,…)
4、练习
1、查找攻击值100-200的蜀国英雄信息
select * from sanguo
where gongji between 100 and 200 and
country=“蜀国”;
2、找到蜀国和吴国以外的国家的女英雄信息
select * from sanguo
where country not in(“蜀国”,“吴国”)
and sex=“女”;
3、找到id为1、3或5的蜀国英雄 和 貂蝉的信息
select * from sanguo
where
(id in(1,3,5) and country=“蜀国”) or name=“貂蝉”;
4、匹配空、非空
1、空 :where name is null
2、非空:where name is not null
3、示例
1、姓名为NULL值的蜀国女英雄信息
select * from sanguo
where
name is null and country=“蜀国” and sex=“女”;
2、姓名为 “” 的英雄信息
select * from sanguo where name="";
4、注意
1、NULL :空值,只能用 is 或者 is not 去匹配
2、"" :空字符串,用 = 或者 != 去匹配
5、模糊比较
1、where 字段名 like 表达式
2、表达式
1、_ : 匹配单个字符
2、% : 匹配0到多个字符
3、示例
select name from sanguo where name like “%”;
select name from sanguo where name like “%”;
## NULL不会被统计,只能用is、is not去匹配
select name from sanguo where name like “___”;
select name from sanguo where name like “赵%”;
5、SQL查询
1、总结
3、select …聚合函数 from 表名
1、where …
2、group by …
4、having …
5、order by …
6、limit …;
2、order by
1、给查询结果进行排序
2、… order by 字段名 ASC/DESC
3、升序:ASC(默认)
降序:DESC
4、示例
1、将英雄按防御值从高到低排序

  2、将蜀国英雄按攻击值从高到低排序

  3、将魏蜀两国英雄中名字为三个字的按防御值升序排列
    select * from sanguo 
    where
    country in("蜀国","魏国") and name like "___"
    order by fangyu ASC;

select * from sanguo
    where
    (country="魏国" or country="蜀国") and name like "___"
    order by fangyu;

3、limit (永远放在SQL语句的最后写)
1、作用 :限制显示查询记录的个数
2、用法
1、limit n -> 显示 n 条记录
2、limit m,n
m 表示 从第m+1条记录开始显示,显示 n 条
limit 2,3 : 第 3、4、5 三条记录
3、示例
1、在蜀国英雄中,查找防御值倒数第二名至倒数第四名的英雄的记录
select * from sanguo
where country=“蜀国”
order by fangyu asc
limit 1,3;
2、在蜀国英雄中,查找攻击值前3名且名字不为 NULL 的英雄的姓名、攻击值和国家
select name,gongji,country from sanguo
where
country=“蜀国” and name is not NULL
order by gongji DESC
limit 3;
4、分页
每页显示5条记录,显示第4页的内容

  第1页 :limit 0,5        # 1 2 3 4 5 
  第2页 :limit (2-1)*5,5  # 6 7 8 9 10
  第3页 :limit (3-1)*5,5  # 11 12 13 14 15
  第4页 :limit (4-1)*5,5  # 16 17 18 19 20

  每页显示n条记录,显示第m页 :limit (m-1)*n,n

4、聚合函数
1、分类
avg(字段名) : 求该字段平均值
sum(字段名) : 求和
max(字段名) : 最大值
min(字段名) : 最小值
count(字段名) : 统计该字段记录的个数
2、示例
1、攻击力最强值是多少
select max(gongji) from MOSHOU.sanguo;
2、统计id 、name 两个字段分别有几条记录
select count(id),count(name) from sanguo;
## 空值 NULL 不会被统计,""会被统计

  3、计算蜀国英雄的总攻击力
    select sum(gongji) from MOSHOU.sanguo
where country="蜀国";
  4、统计蜀国英雄中攻击值大于200的英雄的数量
    select count(*) from MOSHOU.sanguo
where gongji>200 and country="蜀国";

数据导入
语法
load data infile “文件名”
into table 表名
fields terminated by “分隔符”
lines terminated by “\n”
将scoretable.csv文件导入到数据库的表中

  1. 在数据库中创建对应的表

  2. 把文件拷贝到数据库的默认搜索路径中
    Show variables like “secure_file_priv”查看文件的默认路径

  3. 执行数据导入语句
    load data infile “文件的绝对路径” into table 表名 fields terminated by “,”
    lines terminated by “\n”;

  4. Excel 表格如何转化为csv文件
    1.打开excel文件 -> 另存为->csv(逗号分隔)

  5. 更改文件编码格式

    1. 用记事本/编辑器打开, 文件->另存为->选择编码
      文件导出
  6. 作用
    将数据库中表的记录导出到系统文件里

  7. 语法格式
    Select … from 表名
    Into outfile “默认文件路径/文件名”
    Lines terminated by “\n”;
    外键(foreign key)

  8. 定义:让当前表字段的值在另一个表的范围内选择

  9. 语法
    foreign key(参考字段名)
    reference 主表(被参考字段名)
    on delete 级联动作
    on update 级联动作

  10. 使用规则

  11. 主表,从表字段数据类型要一致

  12. 主表被参考字段:主键
    示例
    Create table jftab(
    id int primary key,
    name varchar(15),
    class char(5),
    money int
    );
    create table bjtab(
    stu_id int,
    name varchar(15),
    money int,
    foreign key(stu_id) references jftab(id)
    on delete cascade
    on update cascade
    );

  13. 删除外键
    alter table 表名 drop foreign key 外键名;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值