mysql基本命令脚本
关系型数据库
1.支持复杂的sql语句查询
2.支持事务
非关系型数据库
1.NQSQL不需要经过SQL层的处理
2.可扩展性,因为是键值对的形式所以水平扩展非常容易
事务
事务是逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部失败,这个特性就是事务
注意:MYSQL支持事务,但是要求必须是innoDB引擎
解决这个问题: mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全
如何使用:
1.在执行sql语句之前,我们要开启事务start transaction; 2.正常执行我们的sql语句; 3.当sql语句执行完毕,存在2种情况 第一种;全部成功,我们讲sql语句对数据库造成的影响提交到数据库中,commit 第二种;某些sql语句失败,我们执行rollback(回滚),将对数据库的操作赶紧撤销
一 进入到数据库
net start mysql57
-h host 主机名
-u user 用户名
-p password 密码
启动数据库
mysql -hlocalhost -uroot -p
注:root超级管理员 可以创建和管理其他的用户,root用户不可以远程登录
二 对于库的操作
CREATE 创建
DROP 删除
ALTER 修改
SHOW 展示
(1) 查看所有的数据库
show databases;
(2) 创建数据库
create database 库名;
create database if not exists 库名; 防止创建同名的库出现错误
(3) 查看创库语句
show create database 库名;
(4)使用数据库(进入到当前的库中)
use 库名
(5)查看当前所在的数据库
select database
(6)数据库的删除
drop database 库名
(7)创建数据库并设置字符集
create database 库名 character set utf8;
(8)创建数据库 并设置字符集
create database 小杰 character 字符集;
三 对于表的操作
0.查看所有的表
show tables;
1.创建表
mysql> create table if not exists fs( -> id int unsigned primary key auto_increment, -> username varchar(20), -> sex tinyint, -> age tinyint unsigned, -> info varchar(100) -> );复制代码
2.查看表结构
desc 表名;
mysql> create table if not exists fs( -> id int unsigned primary key auto_increment, -> username varchar(20), -> sex tinyint, -> age tinyint unsigned, -> info varchar(100) -> );复制代码
3.删除表中的某个字段
alter table 表名 drop 字段名;
4.删除表
drop table if exists 表名;删除表如果该表存在
5.增加表中的数据
insert into 表名 字段名 values(值);
6.查看表数据
select * from 表名;
7.查看创表语句
show create table 表名(\G);(竖着查看)
8.重命名表名
rename table 原表名 to 新表名;
9.修改表结构
alter table 表名 add|change|drop 字段名 (类型);
四 MYSQL表的创建
字段类型
(1) 整形
类型 大小 范围 无符号范围 用途 tinyint 1字节 -128,127 0,255 小整数值 smallint 2字节 -32768,32767 0,65535 大整数值 int 4字节 2-》10位置 4... 10 位的 大整数值 float(m,n) 4个字节 单精度浮点型 double(m,n) 8个字节 双精度浮点型 decimal(m,n) 根据存储的值 小数据值(更加精准) 浮点数中的m代表当前存储的长度 n代表小数的位数 m-n代表整数的位数 超出则报错 整形后面的数字的意义: 整形后面给定数字 并不是限定当前存储值的长度 并没有任何的意义 除非配合可选参数 zerofill 零填充 才有意义 字符串类型后面给定的长度 则是限制当前存储数据的长度 整形默认长度会比本身长度大1,因为是符号位(2) 字符串类型
char和varchar的相同和不同点 :char和varchar的存储长度都为0-255
char的执行效率高于varchar
varchar要比 char更节省存储空间
当char存储的值达不到指定的长度时 则使用空来占位
enum和set区别
enum只能选择其中的一个值
set可以选择多个值 多个值使用逗号来隔开
(3) 时间和日期
五 字段约束
unsigned 无符号 正数
只能用于数值类型 不允许出现负数 存储长度会扩大一倍
zerofill 零填充
只能用于数值类型 当指定的位数不足的时候 零填充
default 默认值
如果当前字段没有传值 则值为默认值 (不设定默认值 默认为null)
null 和 not null
默认为null 当不插入值则插入的为null,当设置当前字段为 not null的时候
则该字段必须传值
comment 设置当前字段的说明
auto_increment 自增
注意
SQL 语句以分号作为结束
SQL命令 不区分大小写
数据库的切换使用use
\c 撤销当前命令
\G 竖着查看
当遇到在终端中 不管怎样输入命令都不执行 name查看一下左侧 是否为->
在Windows下 不区分库,表名的大小写 但是在Ubuntu下区分
退出数据库的几种方式
\q exit quit
六 数据操作
1 增
a 全列插入
格式:insert into (表名) values(...);
说明:主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功以后以实际数据为准
b.缺省插入
格式:insert into 表名 (字段1,字段2,...) values (...)
c.同时插入多条数据
格式:insert into 表名 values (...),(...),...
2.删
格式:delete from 表名 where 条件;
示例:delete from student where id=4;
注意: !!没有条件是全部删除,慎用;
3改
格式:update 表名 set 字段1=值1,字段2=值2,.... where 条件
示例:update student set age=16 where id = 7;
注意:如果没有条件,是全部字段都修改;
4查
1.基本语法
格式:select * from 表名
说明:from 关键字后面是表名,表示数据来源于这张表
select 后面写表中的字段名," * " 表示所有字段名, 在select 后面字段名,可以使用as为字段名起别名 这个别名显示在结果集中 如果要查询多个字段,直接使用逗号分隔复制代码
示例:select name,age from student; select name as a,age from student;
2.消除重复行
在select后面字段名的前面使用distinct可以消除重复的行
示例:select distinct genger from student
3.条件查询
a.语法: select * from 表名 where 条件;
b.比较运算符
等于 大于 小于 大于等于 小于等于 不等于复制代码
需求:查询id大于8的所有数据
示例:select * from student where id > 8;
逻辑运算符
and or not
需求;查询id>7的女同学
示例;select * from student where id>7 and gender=0;
d.模糊查询
like %:表示任意多个任意字符 :表示任意一个字符 需求:查询姓习的同学 示例:select * from student where name like "习%"; 示例:select * from student where name like "习";
e.范围查询
in:表示在一个非连续的范围内
between..and...:表示在一个连续的范围内
需求:查询编号为8,10,12的学生
示例:select * from student where id in(8,10,12);
需求;查询编号为6-8的学生
示例; select * from student where id between 6 and 8;
f:空判断
注意:null与" "是不同的
判断空: isnull
判断非空: is not null
需求:查询没有地址的同学 示例;select * from student where address is null
g:优先级
小括号,not 比较运算符,逻辑运算符 and比or优先级高
4.聚合
为了快速得到统计的数据,提供了5个聚合函数
a. count(*) 表示计算总行数,括号中可以写*和字段名;b. max(列) 表示求此列的最大值c. min(列) 表示求此列的最小值d. sum(列) 表示求此列的和e. avg(列) 表示求此列的平均值复制代码
需求:查询学生总数:
示例:select count(*) from student;
需求:查询女生编号的最大值;
示例:select max(id) from student where gender=0;
需求:查询女生编号的最小值;
示例:select min(id) from student where gender=0;
需求:查询所有学生的年龄和
示例:select sum(age) from student;
需求:查询所有学生的年龄平均值
示例:select avg(age) from student;
5 分组
按照字段分组,表示此字段相同的数据会被放到一个集合中,分组后,只能查询出相同的数据列。对于有差异的数据列,无法显示在结果集中,可以对分组后的数据进行统计,做聚合运算
语法:select 列1,列2,聚合...... from 表名 group by 列1,列2,列3,......
需求:查询男女生总数
示例:select gender,count(*) from student group by gender;
python操作mysql
python操作mysql步骤
import pymysql
(1) 链接mysql数据库
db = pymysql.connect(主机名,用户名,密码,数据库名)
(2) 设置字符编码
db.set_charset('utf8')
(3) 创建游标对象
cursor = db.cursor()
(4) 准备sql语句
sql = '...'
(5) 执行sql语句
cursor.execute(sql)
(6) 获取所有结果集
cuesor.fetchall()
(7) 获取一条结果集
cursor.fetchone()
(8) 获取受影响的行数
cursor.rowcount
(9) 关闭数据库链接
db.close()
pymysql的事务处理
默认开启事物处理
需要提交或者回滚
import pymysqldb = pymysql.connect('127.0.0.1','root','123456','hz03')db.set_charset('utf8')cursor = db.cursor()try: sql = 'insert into goods values(null,1,"商品名称",12.1)' cursor.execute(sql) db.commit()except: db.rollback()print(cursor.rowcount)db.close()复制代码
示例: import pymysql
1.连接mysql数据库
db = pymysql.connect('localhost','root','abcdef','test')
2.设置字符编码
db.set_charset('utf8')
3. 创建游标对象
cursor = db.cursor()
4. 准备sql语句
sql = 'select * from hz03'
5. 执行sql语句
cursor.execute(sql)
6. 获取所有结果集
date = cursor.fetchall() print('结果集为',date)
7. 获取受影响的行数
print('受影响的行数为',cursor.rowcount)
8. 关闭数据库连接
db.close()