MySQL的一些基本命令笔记(4)
delete 语句嵌套子查询: delete from 表名1 where 列名 操作符 (select 列名 from 表名2 where 条件); 示例:
delete from customers_1 where salary > (select avg(salary) from customers_1);[删除一个之后还会在重新计算avg(salary)之后再重新执行执行该语句]
delete from customers_1 where age in (27,32);
***delete from customers_2 where salary > (select avg(salary) from customers_1); 这个可以用 update customers_2 set salary=salary*2 where age > (select avg(age) from customers_1) SQL函数
1.SQL aggregate 聚合函数
avg():average 平均值
count(): 行数
max(): 最大值
min(): 最小值
sum(): 求和 2.SQL Scalar 标量函数
ucase():upper case 以大写字母显示
lcase():lower case 以小写字母显示
length(): 求字符长度
round(): 对某个数字字段进行指定小数位数的四舍五入
now(): 返回当前的系统日期和时间
format(): 格式化某个字段的显示方式 思考题:
1.求出customers表中,地址为北京的顾客的总收入
select * from customers where address ="beijing" and (select sum(salary)from customers );
select sum(salary) from customrs where address="beijing"; 2.选出customers表中,工资大于所有顾客平均工资的人,并且以大写字母显示,以小写字母显示住址
提示:select ucase(),lcase()where
select ucase(name),lase(address) from cuatomers where salary >(select avg(salary) from customers); 3.列出customers表中的工资(只取整数部分),工资的位数,以及当前系统的时间
select round(salary,0),length(salary),now() from customers;
select round(salary,0),length(salary)-3,now() from customers; 4.列出customers表中,每个顾客工资与所有顾客的平均工资
提示分两步做
select avg(salary)from customers;先求出平均工资的数然后在
select name,salary-[上面求出的数字] from customers;
select name,salary -(select avg(salary) from customers) as difference
[是把salary -(select avg(salary) from customers) 重命名为didderence] from customers; mid(列名,起始位置,长度)
substring(列名,起始位置,长度)
以上两个语句在这个版本是没有啥区别的 select mid (name,1,3) from customers;
1.从起始位置为1开始
2.打印出三个字母的长度
注意:第一个字母的位置为1,不是0 ***as 别名;
select formate (列名,新的格式) from 表名;
select date_format(now(),"%Y-%M-%D") as date from customers; Union:综合多个select语句,且返回不重复的行
如果要返回重复的行用union all
注意:
1.每个select语句中必须选中相同数量的列
2.列的数目要一致
3.列的数据类型要一致
4.列的顺序要一致 例如:
选中customers表中,年龄小于25岁和大于27岁的人的姓名和年龄
1.select * from customers where age <25 or age>27; 2.select * from customers where age <25 union select * from customers where age>27; 思考题:
选择出customers 表中,所有顾客的工资,并且最后一行打印出顾客的总工资
select salary from customers union select sum(salary) from customers; alter table 向表中添加一个新的列 alter table 表名 add 列名 数据类型
alter table customers add gender char(20);
alter table customers add gender char(20) default "F"; 向表中删除一个列
alter table 表名 drop column 列名;
alter table customers drop column gender; 修改表中某列的数据类型
alter table 表名 modify column 列名 新的数据类型 alter table customers modify column salary float; 微观修改表中的元素[改变行] 宏观修改表中的元素[改变列]
修改 update alter ..modify column..
删除 delete alter ..drop column..
添加 insert alter ..add column.. 对表取消主键限制
alter table 表名 drop primary key; show creat table courses;
alter table courses drop primary key;
show create table corses; 对表添加主键限制
alter table 表名 add primary key(列名);
alter table customers add primary key(ID); 对表取消外键限制:
alter table 表名 drop foreign key 列名;
alter table courses drop primary key instructor; 对表添加外键限制
alter table 表名 add foreign key (列名) references 表名(列名); 对表添加非空限制:
alter table 表名 modify 列名 数据类型 not null;
alter table courses modify name varchar(20) not null; 对表删除非空限制
alter table 表名 modify 列名 数据类型;
alter table 表名 modify 列名 数据类型 default null;
alter table courses modify name varchar(20) default null; *********
truncate table:保留表头,也即保留表的格式,只删除表中存放的数据内容
truncate table 表名;
truncate table customers_1;
delete from customers_1;[和truncate table功能一样,一般常与where条件语句一起使用] drop table customers_1: 连表头带表中的内容全部删除 思考题:
查询customers表中,城市的平均工资大于3000的城市名和工资信息
select address,salary,avg(salary) from customers having avg>3000 where (select address from customers); 学生疑问1;
删除外键必须用show create table 查看系统自动生成的外键名(如:courses_ibfk_1,而不是instructor),用该生成的新名字来删除外键,例如
alter table courses drop foreign key courses_ibfk_1;
alter table courses add foreign key(instructor) references teachers(name); 学生疑问2
alter table 表名 rename 新表名;
alter table customers rename customers_update; 学生疑问3
alter table 表名 change 旧名字 新名字 数据类型;
alter table courses change ID c_id int; 执行事务:
事务机制:确保数据一致性
事务的4个属性:
1.原子性:一个事务是一个不可分割的工作单位,事务中包括的各个操作要么都做,要么都不做
2.一致性:事务必须是数据库从一个一致性状态变到另一个一致性状态
3.隔离性:一个事务的执行不能被其他并发的事务打扰
4.持久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的
注意:
1.MYSQL中默认aql语句的结果自动commit到数据库
2.开始需要写start transaction,这样自动commit就会被禁用,知道我们使用commit或rollback终止这个transaction
start transaction
sql1
sql2
...
sqln
commit;
示例:
start transction;
insert into teachers values("wei","m","instructor");
insert into teachers values("wang","f","instructor");
select * from teachers;
commit; 回滚的演示:
start transction;
insert into teachers values("han","m","instructor");
rollback;[删除上面的数据] python3与mysql
pysql库: import pymysql
#打开数据库链接(commect链接)
db = pymysql.connect("localhost","root","","testDB")
#使用cursor()方法创建一个游标对象cursor
cursor =db.cursor()
#使用execute()方法执行sql查询返回值为表中所有记录的总数
SQL="select * from customers;"
cursor.execute(SQL)
#等价于cursor.execute("select * from customers;")
#使用fetchone()方法获得单条数据
data =cursor.fetchone()#[相当于迭代器只打印一行,超出行数不会报错也啥都不显示]
#注意,返回的data是保存在元组tuple中,用()包起来
print ("The first row in the table is:",data) sql = "drop table customers_bkp;"#是将生成的表格进行删除,如果不删除再次运行表格已经存在就会报错 cursor.execute(sql)
#写sql语句,创建一个新的表格,叫customers_bkp包括id,name,age,address,salary,gender
SQL_CREATE="create table customers_bkp(\
Id int,\
name varchar(20),\
age int,\
address char(25),\
salary float\
);" #使用execute()方法执行上面的sql语句
cursor.execute(SQL_CREATE) #写sql语句,像customers_bkp表中插入行,完成对customers表内容的复制
#提示insert into ...select * from .....
SQL_INSERT="insert into customers_bkp\
(id,name,age,address,salary)\
select * from customers;" cursor.execute(SQL_INSERT)#[插入表格之后还的执行之后才会出现上面语句的结果] #使用execute()方法执行上面的sql语句
cursor.execute("select * from customers_bkp;") #fetchall()接收全部的返回结果,即表中所有的行,返回结果存在元组中
data2 = cursor.fetchall()#[把上面的表格数据以元组形式返回]
#rowcount是一个只读属性,返回执行execute()方法影响的行数
print(cursor.rowcount)#[返回执行execute()的行数]
#打印
for row in data2:
id=row[0]
name=row[1]
age=row[2]
address=row[3]
salary=row[4]
print(str(id),name,str(age),address,str(salary))
#提交到数据库内执行
db.commit()
#最后关闭数据库
db.close() 思考题:
把customers表中工资大于所有顾客的平均工资的人的姓名和工资还有地址打印出来
要求利用nysql库完成
select name,address,salary from customers where salary>(select avg(salary) from customers); import pymysql
db=pymysql.connect("localhost","root","","testDB")
c =db.cursor()
sql="select name,address,salary from customers where salary>(select avg(salary) from customers);"
c.execute(sql)
d=c.fetchall()
# print(d)
for x in d:
name=x[0]
address=x[1]
salary=x[2]
print(name,address,salary)
db.commit
db.close() ******select address,sum(salary) from customers group by address having address in("beijing","shenzhen");
MySQL的一些基本命令笔记(4)的更多相关文章
- MySQL的一些基本命令笔记(1)
关系型数据库的建模构建块: 1.数据是以行和列的形式存储数据. 2.这一系列的行和列称为表(关系) 3.表中的每一行表示一条记录(元组) 4.表中的每一列表示记录的一个属性 5.一组表组成了数据库 6 ...
- MySQL的一些基本命令笔记(3)
指明外键: 1 :1 两个表中的主键都可以当成外键 1 :N 在 "多" 的实体表中新增加一个字段,该字段是 "一" 实体表的主键 M : N 拆成两个1 :N ...
- MySQL的一些基本命令笔记(2)
1.逻辑运算符的补充 between 的用法:(在....之间) select column1,column2,......columnN from 表名 where columnX between ...
- Ubuntu 14 编译安装 PHP 5.4.45 + Nginx 1.4.7 + MySQL 5.6.26 笔记
Ubuntu 14 编译安装 PHP 5.4.45 + Nginx 1.8.0/1.4.7 + MySQL 5.6.26 笔记,主要是给自己的PC机安装,非生产环境! 一.下载必要的源码 1.1.下 ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- mySQl数据库的学习笔记
mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- CentOS6.8下MySQL MHA架构搭建笔记
转载请注明出处,本文地址:http://www.cnblogs.com/ajiangg/p/6552855.html 以下是CentOS6.8下MySQL MHA架构搭建笔记 IP资源规划: 192. ...
- Mysql经常使用基本命令汇总及默认账户权限与改动
一直仅仅是在浅显利用数据库存储数据.也被windows惯坏了.非常多命令使用的时候记不起来.so,换LINUX系统!不再使用GUI管理数据库!也想深入学习下Mysql.从权限管理開始.也就诞生了这篇学 ...
随机推荐
- Python简单多进程demo
''' 多线程使用场景: 怎样用Python的多线程提高效率? io操作不占用CPU 计算操作占用CPU Python多线程不适合CPU操作密集型的任务,适合io操作密集型的任务 如果有CPU操作密集 ...
- 【Linux基础】grep命令
1.简介 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 命令格式:grep [option] pattern file 2.常用参数与举例: -e : 使用P ...
- .NET CORE学习笔记系列(2)——依赖注入[8]: .NET Core DI框架[服务消费]
原文:https://www.cnblogs.com/artech/p/net-core-di-08.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的I ...
- 常见设计模式 (python代码实现)
1.创建型模式 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对 ...
- C# 里面swith的或者
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 利用SQL注入漏洞登录后台
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询 ...
- (四)Exploring Your Cluster
The REST API Now that we have our node (and cluster) up and running, the next step is to understand ...
- shell杀死指定端口的进程
杀死端口代码如下: lsof -i: kill - PID 上面的与下面的代码作用相同. 命令如下所示(这种方式更自动化): kill - $(netstat -nlp | grep : | awk ...
- 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(配置保存数据的数据库)
配置信息如下:这是我的python软件和APP软件默认连接的配置 数据库名称:iot 编码utf8 表格名字:historicaldata 字段 id 自增,主键 date ...
- 安装Laravel框架,利用composer
学一学PHP框架--Laravel的设计思想. 先安装Laravel: Laravel的文档很全:参考 http://www.golaravel.com/ 既然文档很全,就简单说下几个重点.以下以安装 ...