python@ubuntu:~$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.26-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
1.数据查询语言(DQL)
用于对数据的查询------select
2.数据操作语言(DML)
修改数据库中的数据,包括插入---insert,更新---update,和删除---delete;
3.数据控制语言(DCL)
用于对数据的访问,如:
1.给用户授予访问权限---grant(授予);
2.取消用户访问权限-----revoke;
4.数据定义语言(DDL)
用于创建,修改,和删除数据库内的数据结构
1,创建和删除数据库(create database || drop database);
2.创建,修改,重命名,删除表(create table || alter table || rename table || drop table);
3.创建和删除索引(create index || drop index);
5.重启数据库的服务端
注意:要退出了服务器才能重启
python@ubuntu:~$ sudo service mysql restart;
[sudo] python 的密码:
mysql> create database student(数据库名) charset=utf8;
Query OK, 1 row affected (0.10 sec)
注意:创建数据库的时候,指定编码格式
mysql> drop database student(数据库名);
Query OK, 0 rows affected (0.23 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| shanghuiyoupin |
| student |
| student1 |
| student2 |
| student3 |
| student4 |
| sys |
+--------------------+
10 rows in set (0.00 sec)
mysql> use student(数据库名);
Database changed
mysql> select database();
+----------------+
| database() |
+----------------+
| shanghuiyoupin |
+----------------+
1 row in set (0.00 sec)
mysql> show tables;
+--------------------------+
| Tables_in_shanghuiyoupin |
+--------------------------+
| brande |
| cate |
| goods |
| oder |
| user |
+--------------------------+
5 rows in set (0.00 sec)
mysql> create table users(
-> id int unsigned primary key auto_increment,
-> name varchar(32) not null,
-> password varchar(16) not null
-> );
Query OK, 0 rows affected (0.18 sec)
mysql> desc goods(表名);
+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| price | decimal(8,2) | YES | | NULL | |
| is_delete | int(11) | YES | | 0 | |
| is_show | int(11) | YES | | 1 | |
| is_selt | int(11) | YES | | 0 | |
| cate_id | int(10) unsigned | YES | MUL | NULL | |
| brande_id | int(10) unsigned | YES | MUL | NULL | |
+-----------+------------------+------+-----+---------+----------------+
8 rows in set (0.27 sec)
alter table 表名 add 列名 类型 约束;
alter table students add father_phone int not null;
alter table 表名 drop 列名;
alter table students drop father_phone;
alter table 表名 change 原来的名字 现在的名字 类型以及约束;
alter table students change father_phone mother_phone char(11) not null unique;
物理上储存的顺序
当前字段不允许出现空值
当前字段不允许重复
删除唯一性
Alter table students drop index xxxxx
注意:xxxx不是列名,是key_name
在当前的字段存在默认值,如果不写,就用默认值,如果写,就用写的数据
mysql> select * from students(表名);
Empty set (0.00 sec)
mysql>
如果没有数据,展示空集
查询多个指定字段,并且distinct可以做去重操作,注意点:只是在展示的过程中做去
select 字段1,字段2 from users;
去重:select distinct 字段1,字段2 from users;
语法结构:
select 查询字段
from 表名
where 条件筛选
总结:比较运算符
= > < >= <=
不等于 != 或者 <>
逻辑运算符(两个条件之间的关系)
And(&&) or(||) not
默认升序
查找所有的字段,按照单价来排序,计算总价,如果count为null,则设置为0
当我们需要的数据来源于多张表的时候,将多张表连接成一个大的集合
Select * from 表1 inner join 表二 on 表1的字段=表二的字段
Select * from student inner join classes on student.cls_id=classes.id;
Select * from student left join classes on student.cls_id=classes.id;
左连接:
查询结果为两个表匹配到的数据,对于左表中特有的数据,如果右表没有对应的数据,则用null填充
右连接
作用:便于理解,提高可读性;如果需要查询的字段有重名,可以区分开(链接查询时)
方法1:使用as 关键字
方法2:不需要as,直接写
注意:当别名有关键字或者特殊符号时,建议将别名加引号,单和双都行,但是建议写双引
连接成一个字段
仅仅一个功能,是运算符
两个操作数都是数值型,则为加法运算;其中一个数据为字符型,试图将字符型转成数值型,转换成功做加法;如果转换失败,则将字符变为0计算;只要一方为null,那结果肯定为null
案例:
除
1、全列插入(全字段插入)
注意点:插入数据与字段顺序一一对应
效果图:
总结:首先id ,设置的是自增,需要占位,0 、null 、default都可以
2、部分字段插入的方式
SQL | 动词 | 解释 |
---|---|---|
数据查询 | select | 选择 |
数据定义 | create,drop,alter | 创建,删除表索引数据库等,修改 |
数据操作 | insert,update,delete | 插入,修改,删除 |
数据控制 | grant,revoke | 授权,撤销授权 |
注意点:数据库的备份与恢复,必须在退出数据库的基础上
1、一个表必须有一个主键
2、没有包含在主键中的字段必须完全依赖于主键
1、不区分大小写,但是建议关键字大写,表名 列名小写
2、每一条命令用分号结尾
3、每条命令根据需要,进行缩进或者换行
4、注释
单行注释#注释文字
-- 注释(注意需要有空格)
多行注释: /* 注释文字 */
cur = connect_obj.cursor
sql = 'select * from student'
ret = cur.fetchall
print(ret)
注:返回一个大元组,包含各个小元组,如果查询的是不存在的id,fetchall()反会一个空集合
不指定的话,默认打印一行
3.插入语句
4.修改和删除
注意点:凡是通过修改的数据或者删除或者插入新数据,都需要提交,提交指令看情况书写位置
1.查找生鲜商品的价格平均值
2.查找所有种类的平均值
round(数据,保留位数)
as 起别名,不影响数据库的数据,只是修改展示字段名
3.找出每一种类型的商品中最便宜,最贵,平均价格和数量
4.三表联查
int bit
数据类型 | 说明 | 储存需求 |
---|---|---|
tinyint | 很小的整数 | 1个字节 |
smallint | 小的整数 | 2个字节 |
mediumint | 中等大小的整数 | 3个字节 |
int(integer) | 普通大小的整数 | 4个字节 |
bigint | 大整数 | 8个字节 |
decimal
类型名称 | 说明 | 存储需求 |
---|---|---|
float | 单精度浮点数 | 4个字节 |
double | 双精度浮点数 | 8个字节 |
decimal(m,d) | 压缩的"严格"定点数 | m+2个字节 |
char(固定长度),char(4)‘as’------‘as’
Varchar(可变长度字符串),varchar(4)—‘as’—‘as’
text(文本存储)字符>4000
类型名称 | 说明 | 存储需求 |
---|---|---|
char(m) | 固定长度非二进制字符 | m字节,1<=m<=255 |
varchar(m) | 变长非二进制字符串 | L+1字节,L<=m和1<=m |
tinytext | 非常小的非二进制字符串 | L+1字节,L<2^8 |
text | 小的非二进制字符串 | L+2字节,L<2^16 |
mediuntext | 中等大小的非二进制字符 | L+3字节,L<2^24 |
longtext | 大的非二进制字符 | L+4字节,L<2^32 |
enum | 枚举类型,只能有一个枚举字符串值 | 一或两个字节,取决于枚举值的数目,最大值为65535 |
set | 一个设置,字符串对象可以有零个或多个set成员 | 1,2,3,4,或8个字节,取决于聚合成员的数量,最多64个成员 |
enum
date
time
Datetime
类型名称 | 日期格式 | 日期范围 | 储存需求 |
---|---|---|---|
year | yyyy | 1901~2155 | 1字节 |
time | hh:mm:ss | -838:59:59~838:59:59 | 3字节 |
date | yyyy:mm:dd | 1000-0101~9999-12-3 | 3字节 |
datetime | yyyy:mm:dd hh:mm:ss | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 8字节 |
timestamp | yyyy:mm:dd hh:mm:ss | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 4字节 |
1、整数和浮点数
如果不需要小数部分,则使用整数来保存数据,并且根据整数的大小,来选择合适的整数类型,如果需要小数部分,则使用浮点数类型,浮点数类型中,有float和double,如果需要精度高一点,则选择double。根据自己的需求来决定选什么。
2、浮点数和定点数
浮点数FLOAT、DOUBLE相对应定点数DECIMAL的优势在于:在长度一定的情况下,浮点数能表示更大的数据范围,但是浮点数容易产生误差,因此在精度比较高时,建议使用DECIMAL,比如货币这一类东西,就用DECIMAL比较合理,注意浮点数在进行加减运算时也容易出现问题。如果进行数值比较,也建议用DECIMAL
3、日期与时间类型
可以看上面详解时的图,根据各种格式,选择自己所需要的数据类型,注意TIMESTAMP和DATETIME的区别,一个是跟时区有关,一个无关,其他没什么大的区别。
4、CHAR与VARCHAR之间的特点与选择
区别:
CHAR是固定长度字符、VARCHAR是可变长度字符。CHAR会自动删除插入数据的尾部空格,VARCHAR不会。
CHAR是固定长度,处理速度比VARCHAR更快,缺点很明显,浪费存储空间,所以对存储不大,但在速度上有要求的可以使用CHAR类型,反之用VARCHAR。
5、ENUM和SET
ENUM只能取单值,也就是从枚举类型中选取其中一个值,但是SET可以取多值,
ENUM最多能存放65535个成员,SET只能65个
空字符串也能在SET中存储,要存储一个人的喜爱时,最好使用SET类型,其实最重要的是看具体的情况在选取最为合适的把
6、BLOB和TEXT
BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息,BLOB主要存储图片、音频信息,而TEXT只能存储纯文本文件。分清楚两者的用途
7、BINARY和VARBINARY
这两个的区别和CHAR与VARCHAR的区别差不多,BINARY是固定长度、VARBINARY是可变程度,这两个的作用就是为了区分大小写的,注意这两个是字节字符串。