mysql数据库的基础操作
注 : 本文中注释因为方便写了# ,mysql中规范应为 --
创建用户
通过root管理员权限可以创建各种用户,并为他们分配权限及可以操作的数据库。
语法:create user '用户名'@'ip地址' identified by '密码'
creata user 'sakura'@'%' identified by '';
其中,ip地址可以用通配符%来表示任意地址。
例'%',代表任意ip地址都能链接。
'10.31.160.%',代表以10.31.160开头的ip地址可以链接。
为用户设置权限
grant select,insert,update on db1.t1 to 'sakura'@'%'; # 给用户设置查询,添加,修改的权限,范围为db1库的t1表。
grant all privileges on db1.t1 to 'sakura'@'%'; #给用户设置所有的权限。 revoke all privileges on db1.t1 from 'sakura'@'%'; #移除用户所有的权限。
操作库
create database db2;
create database db2 default charset utf8; # 为库设置默认编码格式
show databases;
drop database db2; # 删除数据库db2
操作文件
show tables; create table t1(
列名 类型 null,
列名 类型 not null,
列名 类型 not null auto_increment primary key,
id int,
name char(10)
)engine=innodb default charset=utf8; # engine:引擎模式
# innodb 支持事务,原子性操作 # 当实行结果不满足预期时,数据会回滚,不会丢失。 auto_increment 表示:自增
primary key: 表示 约束(不能重复且不能为空); 加速查找;主键
not null: 是否为空
数据类型:
数字:
tinyint 比int范围小,推荐使用,运行速度快
int 整型
bigint 大数字
FLOAT 浮点型,在小数位置长时,结果不一定准确
DOUBLE 双精度,在小数位置长时,结果不一定准确,但比FLOAT准确
decimal 绝对准确,在底层是以字符串实现的数据存储,应用于银行卡余额之类的要求绝对准确的数据。
字符串:
char(10) 速度快,就算只写了3个字符,也会在系统中占10个字符。所以系统在扫描时是知道你的字符长度的,扫描速度快。
varchar(10) 节省空间,写了几个字符就在系统中占了多少字符,但是扫描的速度慢,系统不知道你的字符长度,每次都需要去判断。
PS: 创建数据表定长列往前放,即数据类型为char的列尽量往前放,例如手机号固定为11位,总归是要占11个字符的,用char可以加速系统的扫描速度。
表的基本操作
清空表:
delete from t1; # 只会清空表的内容,不会清空主键(id)的值
truncate table t1; # 清空表的内容,并连同主键(id)的值一并清空
删除表:
drop table t1;
修改表:
添加列:alter table 表名 add 列名 类型
删除列:alter table 表名 drop column 列名
修改列:
alter table 表名 modify column 列名 类型; -- 类型
alter table 表名 change 原列名 新列名 类型; -- 列名,类型 添加主键:
alter table 表名 add primary key(列名);
删除主键:
alter table 表名 drop primary key;
alter table 表名 modify 列名 int, drop primary key; 添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键:alter table 表名 drop foreign key 外键名称 修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
说明
主键
主键作为一个表中的唯一标识,就像每个人的身份证号码一样,即便删除了表中间的一条数据,也不会引起别的数据id的变化
create table tb1(
id int not null auto_increment primary key,#这里给id设置了主键并自增
name char(10),
department int,
)engine=innodb default charset=utf8;
外键
外键可以通过另一张表来限制本表的数据
为什么要使用外键??用一张图说明

create table t1(
id int auto_increment primary key,
name char(10),
id1 int,
id2 int,
CONSTRAINT fk_t1_t2 foreign key (id1,id2) REFERENCES t2(nid,pid) # fk_t1_t2表示外键名 把本表的id1,id2受到t2表中的nid,pid限制
)engine=innodb default charset=utf8;
索引
为什么要用索引?
1.索引可以加快查找的速度
2.索引可以限制一个字段的数据不能重复,例如name列中已经有了一个'sakura',那么在后面就不能再写'sakura'
索引可以为空,而主键不能为空
create table t1(
id int ....,
num int,
xx int,
unique 唯一索引名称 (列名,列名),
constraint ....
)
数据行操作
数据查询
select * from tb12;
select id,name from tb12;
select id,name from tb12 where id > 10 or name ='xxx'; # and not or 用法与python中一致
select id,name as cname from tb12 where id > 10 or name ='xxx'; # as 可以给字段取别名
select name,age,11 from tb12; # 会出现一个整列都是11的列
其他:
select * from tb12 where id != 1
select * from tb12 where id in (1,5,12);
select * from tb12 where id not in (1,5,12);
select * from tb12 where id in (select id from tb11) # ()内也可以放一个查询的结果
select * from tb12 where id between 5 and 12; # 查询id 5-12之间所有的数据
通配符:
select * from tb12 where name like "a%" # %可以匹配任意字符任意多个
select * from tb12 where name like "a_" # _只能匹配一个任意字符
分页:
select * from tb12 limit 10; # 显示前10项的内容
select * from tb12 limit 0,10;
select * from tb12 limit 10,10; # 从第10项开始,显示10项内容
select * from tb12 limit 20,10; # 从第20项开始,显示10项内容
select * from tb12 limit 10 offset 20;
# 从第20行开始读取,读取10行;
结合Python分页:
# page = input('请输入要查看的页码')
# page = int(page)
# (page-1) * 10
# select * from tb12 limit 0,10; 1
# select * from tb12 limit 10,10;2
排序:
select * from tb12 order by id desc; 大到小
select * from tb12 order by id asc; 小到大
select * from tb12 order by age desc,id desc;
取后10条数据
select * from tb12 order by id desc limit 10;
分组:
select count(id),max(id),part_id from userinfo5 group by part_id;
聚合函数:
count
max
min
sum
avg
**** 如果对于聚合函数结果进行二次筛选时 必须使用having
注:where后面不能写聚合函数
select count(id),part_id from userinfo5 group by part_id having count(id) > 1;
select count(id),part_id from userinfo5 where id > 0 group by part_id having count(id) > 1;
连表操作:
# 获取两张表内的内容,并排显示
select * from userinfo5,department5
select * from userinfo5,department5 where userinfo5.part_id = department5.id
select * from userinfo5 left join department5 on userinfo5.part_id = department5.id
select * from department5 left join userinfo5 on userinfo5.part_id = department5.id
# userinfo5左边全部显示
# select * from userinfo5 right join department5 on userinfo5.part_id = department5.id
# department5右边全部显示
select * from userinfo5 innder join department5 on userinfo5.part_id = department5.id
将出现null时一行隐藏
select * from
department5
left join userinfo5 on userinfo5.part_id = department5.id
left join userinfo6 on userinfo5.part_id = department5.id
select
score.sid,
student.sid
from
score
left join student on score.student_id = student.sid
left join course on score.course_id = course.cid
left join class on student.class_id = class.cid
left join teacher on course.teacher_id=teacher.tid
select count(id) from userinfo5;
mysql数据库的基础操作的更多相关文章
- (转)总结之:CentOS 6.5 MySQL数据库的基础以及深入详解
总结之:CentOS 6.5 MySQL数据库的基础以及深入详解 原文:http://tanxw.blog.51cto.com/4309543/1395539 前言 早期MySQL AB公司在2009 ...
- MySQL数据库的常见操作(七)
MySQL数据库的常见操作 1.创建数据库 2.创建重名的数据库以及如何查看警告信息 3.设置数据库的编码方式(默认为utf8) 4.修改和查看数据库的编码方式 5.删除数据库 6.6.删除已经删除了 ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- linux系统上Mysql数据库导入导出操作
需求:把MySQL数据库目录中的dz数据库备份到/home/dz_bak.sql ,然后再新建一个数据库dzbak,最后把/home/dz_bak.sql 导入到数据库dzbak中.操作如下:以下操作 ...
- 【代码学习】MYSQL数据库的常见操作
---恢复内容开始--- ============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与 ...
- PHP对MySQL数据库的相关操作
一.Apache服务器的安装 <1>安装版(计算机相关专业所用软件---百度云链接下载)-直接install<2>非安装版(https://www.apachehaus.com ...
- mysql 数据库必备命令操作,入门练习一下
mysql 数据库必备命令操作 show databases: 查看所有的数据库: create database jfedu: 创建名为jfedu数据库: use nihao: 进入jfedu数据库 ...
- 第二百七十九节,MySQL数据库-pymysql模块操作数据库
MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connec ...
随机推荐
- JDK8新增接口的默认方法与静态方法
JDK8之前,interface中可以定义常量和抽象方法,访问修饰符是public. public interface A { /** a1和a2写法是等价的 */ public static fin ...
- 20190422 T-SQL 触发器
-- 1 数据库服务 -- 2 触发器 CREATE TRIGGER no_inserton xsAFTER INSERT ASBEGIN RAISERROR('XS不让插入数据',1,1); ROL ...
- jQuery实现购物车物品数量的加减
基于jquery的一款代码,实现购物车数据的加减,在淘宝网.京东商城购物时时经常见到的一个功能,点击文本框两侧的“+”与“-”,就可以增加或减少文本框内的数字值,每次步长为1,当然这个是可以自己设置的 ...
- 洛谷P1605 迷宫 (DFS)
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- pyCharm的第一个项目
首先打开编译器pyCharm 创建一个项目 在location :新建文件夹 在interpreter:指定python解释器的路径 python解释器下载官网: https://www.python ...
- ogg跳过某个RBA
1.从库复制进程报如下错误 ************************************************************************* ...
- Virtual DOM 和 diff 算法
virtual DOM : virtual DOM 用 js 模拟 DOM 结构,用 js 来对比前后变化,提高重绘性能. diff: 比如在 git 中,如果用命令 git diff xxx文件 ...
- java基础hashmap
Iterator中hasNext(), next() 在Iterator类中,我们经常用到两个方法: hasNext(), next(),具体含义: next(), 是返回当前元素, 并指向下一个元 ...
- mysql 5.7 运维命令
MySQL安装 1)卸载旧版本 a) 停掉mysql #pkill -9 mysqld b) 查看rpm包 # rpm -qa|grep -i mysql c) 删除 #yum -y remove m ...
- kindeditor4.1.11的使用方法
在引入某个外部框架/功能件的 时候, 通常是 先引入css, 后引入js. css的必要属性是rel和href, js的必要属性是charset和src. js都是用javascript的,所以 cs ...