mysql数据库相关的操作
MySql数据库
Mysql的sql语句
SQL :Stucture Query Language 结构化查询语言
SQL分类
- DDL:数据定义语言 :定义数据库 数据表他们的结构 create(创建) drop(删除) alter(修改)
- DML:数据操纵语言:主要是用来操作数据 insert(插入) update(修改) delete(删除)
- DCL:数据控制语言:定义访问权限,取消访问权限,安全设置 grant
- DQL:数据查询语言:select(查询) from字句 where字句
首先登陆MySql
登陆MySql:mysql -uroot -proot
创建数据库有下面3种方式
create database 数据库的名字create database demo;
创建数据库的时候制定字符集
create database 数据库名字 character set 字符集;create database demo character set utf8;
创建数据库的时候制定字符集和校对规则
create database 数据库名字 character set 字符集 collate 校对规则;create database demo character set utf8 collate utf8_bin;
查看数据库
查看数据库定义的语句
show create database 数据库名字;show create database demo;
查看所有数据库
show databases;
修改数据库的操作
修改数据库的字符集
alter database 数据库的名字 character set 字符集;alter database demo character set gbk;
删除数据库
drop database 数据库名字;drop database demo;
其他数据库操作命令
切换数据库(选中数据库)
use 数据库名字;use demo;
查看当前正在使用的数据库
select database();
数据库中表的创建
列的类型
java sql
int int
char/string char/varchar char 固定长度varchar 可变长度char(3) 1空格空格 空格补满varchar(3) 1 不用补满 比较省空间
double double
float float
boolean boolean
date date YYYY-MM-DDtime hh:mm:ssdatetime YYYY-MM-DD hh:mm:ss 默认是nulltimestamp YYYY-MM-DD hh:mm:ss 默认是当前时间text 主要用来存放文本blob 存放二进制
列的约束
主键约束 primary key唯一约束 unique 非空约束 not null
创建表
create table 表的名字(列名 列的类型(可以指定长度) 约束,列名2 列的类型 约束) ;1分析实体 学生2 学生ID 3 姓名4 性别5 年龄create table student(sid int primary key,sname varchar(31),sex int,age int);
查看表
查看所有的表
show tables;
查看表的定义
show create table 表名;show create table student;
查看表的结构
desc 表名;desc student;
修改表
添加列(add)alter table 表名 add 列名 列的类型 列的约束;alter table student add chengji int not null;修改列(modify)alter table 表名 modify 列名 列的类型;alter table student modify sex varchar(2);修改列名(change)alter table 表名 change 旧列名 新列名 新列名类型;alter table student change sex gender varchar(2);删除列(drop) alter table 表名 drop 列名;alter table student drop chengji;修改表名(rename) 通常不会动的rename table 旧表名 to 新表名;rename table student to person;修改表的字符集 通常不会动的alter table 表名 character set 字符集;alter table person character set gbk;
删除表
drop table 表名;drop table person;
SQL完成对表中数据的CRUD的操作
插入数据
insert into 表名(列名1,列名2,列名3) values (值1,值2,值3) ;insert into person(sid,sname,age)values(1,'zhangsan',3);-------简单写法---- 必须是全列名 并且是按照顺序插入insert into person values(2,'lisi',11);-------批量插入-----insert into person values(3,'haha',12 ),(5,'haha',16 );---单条插入效率不如批量插入的效率高喔 但是批量插入一条失败导致全部失败----
命令行下插入中文问题 insert into person values(11,'啦啦',12);
临时解决方案:set name gbk; 相当于告诉mysql服务器软件,我们当前在命令行下输入的内容是GBk编码 当命令窗后关闭后,它再输入中文依旧存在问题
永久解决方法:修改my.ini 配置(在mysql软件安装路径里)
1 暂停mysql服务 2 在mysql安装路径中找到my.ini配置文件 3 将 my.ini配置文件中的编码修改成gbk 4 保存文件退出 5 启动mysql服务
删除数据
delete from 表名 (where 条件);
delete from person where sid =10;
delete from person; 如果没有指定条件将会将表中的数据全部删除---面试问题 请说一下 delete 删除数据和 truncate 删除数据有什么区别
delete :DML 一条一条删除表中的数据
truncate:DDL 先删除表再重新建表
关于哪条sql执行效率高,具体看表中的数据量
如果数据比较少,delete 效率比较高
如果数据比较多,truncate效率比较高
更新数据
update 表名 set 列名=列值,列名2=列值2 (where 条件);---将sid 为5 的名字改为李四------如果参数是字符串,或者日期要加上单引号---update person set sname='李四' where sid =5;--更新多列数据--update person set sname='李四',sex=0 where sid =5;-- 更新数据不加where字句 表中的所有字段都会修改--update person set sname='李四',sex=0;
查询数据
--[] 代表可选参数--select [distinct] [*] [列名,列名2] from 表名 [where 条件];distinct:去除重复的数据select: 选择显示那些列的内容
具体查询的实例
===商品分类 手机数码,鞋靴箱包1 分类ID 2 分类名称3 分类描述-- auto_increment 自增长属性create table category(cid int primary key auto_increment,cname varchar(10),cdesc varchar(35) );insert into category values (null,'手机数码','电子产品,手工制作');insert into category values (null,'鞋靴箱包','鞋靴箱包,江南皮革厂');insert into category values (null,'香烟酒水','黄鹤楼,钻石');insert into category values (null,'酸奶饼干','娃哈哈蒙牛');-- 查询所有--select * from category;-- 查询指定的列select cname,cdesc from category;=== 所有商品1 商品id2 商品名称3 商品价格4 生产日期5 商品属于的分类 (分类id)---商品和商品分类:所属关系-- cno 类型对应商品分类的cidcreate table product(pid int primary key auto_increment,pname varchar(20),price double,pdate timestamp,cno int );insert into product values (null,'小米',999,null,1);insert into product values (null,'锤子',1299,null,1);insert into product values (null,'阿迪达斯',1299,null,2);insert into product values (null,'老村长',19,null,3);insert into product values (null,'小熊饼干',1,null,4);-- 查询所有的商品select * from product;---查询商品名称和商品价格select pname,price from product;---别名查询 as 关键字 ,as 关键字是可以省略的 -- 表别名 : select p.pname,p.price from product p;(主要用来多表查询)select p.pname,p.price from product as p;-- 列别名:select pname as 商品名称,price as 商品价格 from product;select pname as 商品名称,price as 商品价格 from product;select pname 商品名称,price 商品价格 from product; // as 可以省略--- 去掉重复的值 distinct-- 查询商品的所有价格select price from product;select distinct price from product; ---select 运算查询 仅仅在查询结果上做运算 数据库中的保存的值不变select * ,price*1.5 from product;select * ,price*0.89 as 折后价 from product;----条件查询 [where 字句] 指定条件 确定要操作的数据列select * from product where price>60;---where 后的条件写法---关系运算符 > >= < <= = != <><>:不等于 标准sql语法!=:不等于 非标准sql语法---查询商品价格不等于88的所有商品select * from product where price <> 88; --- 查询商品价格在10-100之间的select * from product where price>10 and price<100;---between...and... 什么之间select * from product where price between 10 and 100 ;----逻辑运算 and , or ,not---查询商品价格小于100或者商品价格大于900select * from product where price<30 or price>900;---like :模糊查询_ : 代表的是一个字符% :代表多个字符---查询出名字中带有饼的所有商品 %饼%select * from product where pname like '%饼%';---查询第二个字是熊的所有商品'_熊'select * from product where pname like '_熊%';---in 在某个范围中获得值------查询出商品分类id 在1 ,4 里面的所有商品select * from product where cno in(1,4);**排序查询** :order by 关键字asc:ascend 升序 (默认的排序方式)desc:descend 降序---0 查询所有的商品 按照价格排序 select * from product order by price;---1 查询所有的商品按照价格进行降序排序(asc ==升序 desc ==降序)select * from product order by price desc;---2 查询所有名称有小的商品按照价格降序排序1查询名称有小的商品select * from product where pnem like '%小%';2进行排序得出结果 order by desc;select * from product where pnem like '%小%' order by desc;
查询中的聚合函数
sum() 求和avg() 求平均值count() 统计数量max() 最大值 min() 最小值---1 获得所有商品的价格的总和 select sum(price) from product ---2获得所有商品的平均价格select avg(price) from product;---3 获得所有的商品的个数select count(*) from product;---4 查出商品价格大于平均价格的商品 select * from product where price >(select avg(price) from product); ---注意 where 条件后面不能接聚合函数
查询中的分组查询 group by
1 根据cno字段分组 分组后统计商品的个数select cno,count(*) from product group by cno;2 根据cno分组 分组统计每组商品的平均价格 并且商品平均价格>60select cno, avg(price) from product group by cno having avg(price)>60;---having 关键字 后面可以接聚合函数 出现在分组之后 ---where 关键字他不可以接受聚合函数 出现在分组之前
查询语句中关键字顺序
编写顺序...S...F...W...G...H...Oselect...from...where...group by ...having...order by 执行顺序F...W...G...H...S...Ofrom...where...group by ...having ...select ...order by
创建数据库的原则
通常情况下 一个项目对应一个数据库
MySql中多表操作
技术分析
多表之间的关系怎么维护
外键约束:foreign key给product 中的这个cno 添加一个外键约束alter table product add foreign key(cno) references category(cid);
多表之间的建表原则
- 一对多 :商品和分类
- 建表原则:在多的一方添加一个外键,指向一的一方的主键
- 多对多 :老师和学生,学生和课程
- 建表原则:多建一张中间表将多对多的关系拆成一对多的关系,中间表至少有两个外键,这两个外键分别指向原来的那两张表
- 一对一:班级和班长,公民和身份证,国家和国旗
- 建表原则:
- 将一对一的情况当做是一对多的情况处理,在任意一张表中添加一个外键,并且这个外键要唯一,指向另一张表
- 直接将两张表合并成一张表
- 将两张表的主键建立连接,让两张表里面主键相等
- 实际用途:用的不是很多(拆表操作)
- 相亲网站
- 个人信息: 姓名,性别,年龄,身高,体重,兴趣爱好,(年收入,特长,学历,职业等)
- 拆表操作:将个人信息的常用信息和不常用信息拆开,减少表的臃肿,
- 相亲网站
- 建表原则:
- 一对多 :商品和分类
网上商城表实例分析 :用户购物流程
用户表(用户的ID 用户名 密码 手机)
create table user(uid int primary key auto_increment,username varchar(31),password varchar(31),phone varchar(11));insert into user values(1,'zhangsan','123','13651141556');
订单表(订单编号,总价,订单时间,地址,外键用户的id)
create teble orders(oid int primary key auto_increment,sum double not null,otime timestamp,address varchar(100),uno int ,foreign(uno) key reference user(uid) // 将uno 字段指向user表中的uid);insert into orders values(1,200,null,'放回去老家',1);insert into orders values(2,300,null,'放回去老家11',1);
商品表(商品ID,商品名称,商品价格,外键cno)
create table product(pid int primary key auto_increment,pname varchar(10),price double,cno int,foregin key(cno) reference category(cid));insert into product values(null,'小米手机',999,1);insert into product values(null,'锤子手机',1999,1);insert into product values(null,'阿迪达斯',999,2);insert into product values(null,'老村长',9,3);insert into product values(null,'禁酒',35,3);insert into product values(null,'小熊饼干',1,4);insert into product values(null,'卫龙拉片',1,5);insert into product values(null,'雪饼',215,5);
订单项:中间表(订单id,商品id,商品数量,订单项总价)
create table orderitem(ono int,pno int,foregin key(ono) reference oders(oid),foregin key(pno) reference product(pid),ocount int, subsum double);---给1号订单添加商品200元的商品insert into orderitem values(1,7,100,100); insert into orderitem values(1,8,100,100); ---给2号订单添加商品 250块钱的商品insert into orderitem values(2,5,1,35);insert into orderitem values(2,8,1,215);
商品分类表(分类id ,分类名称,分类描述)
create table category(cid int primary key auto_increment,cname varchar(20),cdesc varchar(100)); insert into category values(null,'手机数码','电子产品,江苏电子厂'); insert into category values(null,'鞋靴箱包','江南皮革厂'); insert into category values(null,'香烟酒水','黄鹤楼,茅台'); insert into category values(null,'酸奶饼干','娃哈哈蒙牛酸奶'); insert into category values(null,'馋嘴零食','瓜子花生,八宝粥');
多表查询
交叉连接查询 笛卡尔积
隐式内连接
select *from product,category; 交叉查询查出来的是两张表的成绩查出来的结果没有意义 --过滤有意义的数据 select * from product ,category where cno=cid;-- 为了更明确可以用as 写别名 select * from product as p,category as c where p.cno=c.cid; --as 关键字可以省略 select * from product p,category c where p.cno=c.cid;
显示内连接
select * from product p, inner join category c on p.cno = c.cid;
隐式内连接:在查询出结果的基础上去做的where条件过滤
显示内连接:带着条件去查询结果,执行效率高
左外连接
select * from product p left outer join category c on p.cno=c.cid; 左外连接 会将左表中的所有数据查询出来,如果右表中没有对应的数据,用null填充
右外连接
select * from product p right outer join category c on p.cno=c.cid; 会将右表所有数据全出查询出来,如果左表没有对应数据全部用null填充
内连接查询出来的是交集
分页查询
关键字 limit
- 每页数据10条
- 起始索引从0开始
- 第一页起始索引0
第二页起始索引10
起始索引用算法去做:index:代表显示第几页 页数从1开始但是表里面的数据是用0开始的每页显示3条数据startindex = (index-1)*3;select * from product limit 0,10;
子查询
查询分类名称为手机数码的所有商品
- 查询出分类名称为手机数码的idselect cid from category where cname='手机数码'; //找到cid=1 - 得出ID为1的结果 select * from product where cno=1; - 改进为子查询select * from product where cno =(select cid from category where cname='手机数码');
查询出(商品名称,商品分类名称)信息
--左连接实现 select p.pname,c.cname from product p left outer join category c on cno=cid;--子查询操作 select pname,cno from product; select pname,(select cname from category c where p.cno=c.cid) as 商品分类名称 from product p;
总结了3天终于可以告一段落了 得到帮助的朋友 可以选择打赏喔 谢谢
mysql数据库相关的操作相关推荐
- Linux下Mysql数据库的基础操作
Linux下Mysql数据库的基础操作 一.Mysql数据介绍 二.数据库相关术语介绍 1.数据库相关名词 2.相关术语介绍 三.Mysql数据库的管理 1.创建数据库用户 2.查询用户状态 3.修改 ...
- mysql数据库限流方案_用于对MySQL数据库的并发操作进行控制的方法及装置的制造方法_3...
的数据库操作特点,预先设置的所述第一限流类型可以不同于本实施例中的设置,同样可以实现本申请的技术方案,也在本申请的保护范围之内. [0103]步骤102-3:判断MySQL数据库的threads_ru ...
- 后端程序员必备:mysql数据库相关流程图/原理图芬芬细雨
前言 整理了一些Mysql数据库相关流程图/原理图,做一下笔记,大家一起学习. 1.mysql主从复制原理图 mysql主从复制原理是大厂后端的高频面试题,了解mysql主从复制原理非常有必要. 主从 ...
- Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等
MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...
- mysql和foxbase_Mysql使用基础知识和MYSQL数据库的简单操作 -(转)
Mysql使用基础知识 有很多朋友虽然安装好了mysql但却不知如何使用它.在这篇文章中我们就从连接MYSQL.修改密码.增加用户等方面来学习一些MYSQL的常用命令. 一.连接MYSQL.格式:my ...
- 后端开发-MySQL数据库相关流程图原理图
前言 整理了一些 MySQL 数据库相关流程图/原理图.做一下笔记,分享给大家一起学习. 1. MySQL 主从复制原理图 MySQL 主从复制原理是大厂后端的高频面试题,了解 MySQL 主从复制原 ...
- mysql重启数据库_重启MySQL数据库的实际操作步骤概述
以下的文章主要介绍的是重启MySQL数据库的实际操作方案,当我们修改了my.cnf,就需要对MySQL数据库进行重启服务,以下的文章就是对重启MySQL数据库的实际操作方案的具体描述,望你会有所收获. ...
- mysql数据库代码_【代码总结】MYSQL数据库的常见操作
============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与关闭 -h:指定所连接的服 ...
- 第二百七十九节,MySQL数据库-pymysql模块操作数据库
MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数 使用方式: 模块名称.conne ...
最新文章
- centos 安装 NTFS支持
- 临床研究中的基因组学、药物基因组学、蛋白质组学和转录组学 Omics in Clinical Practice: Genomics, Pharmacogenomics, Proteomics, and
- std::priority_queue
- 浅析WebRtc中视频数据的收集和发送流程
- 第一次离线写Blog,先上个图先
- map/vector erase
- python 进阶知识点_高效率 Python 进阶:10 个关键知识点与特性
- Zedboard安装桌面系统ubuntu及opencv(2)
- 愚公移山第一章伪代码
- 深度学习图像分类(三): VggNet
- JS-13-jquery
- 中标麒麟linux系统安装打印机_国产中标麒麟操作系统的打印机安装
- PPT教程 从入门到实践
- Jedis的hget方法简单用法
- 董桥《南山雨》(选自:旧时月色)
- Android中跳转到系统设置界面
- 用HTML做树形菜单,jquery实现树形菜单完整代码
- 2022中国汽车测试及质量监控博览会
- 中新峰会 | 新加坡金融管理局首席金融科技官:今年或将看到区块链商用,数字货币是关键...
- php 写入文件编码,PHP写入到文本文件乱码
热门文章
- Linux结束sh脚本命令,Shell脚本break和continue命令简明教程
- puppet部署mysql_puppet之mysql批量安装案例
- java反转数组_Java中如何将数组反转?Java数组反转的2种方法(代码示例)
- 计算机网络技术发展模式研究,计算机网络技术的发展模式研究
- 【机器学习笔记】——感知机(Perceptron)
- Altium Design 如何出带元件的印制板图纸
- Openlayers加载离线地图Arcgis瓦片
- 快手工程笔试题A卷 部分知识点总结
- NFS服务器搭建与配置
- 面试前这些接口测试知识要点,终于梳理好了,拿走不谢