Mysql命令总结

day7
数据库(mysql:关系型数据库管理系统)

(总结:https://blog.csdn.net/picway/article/details/53646994
练习:https://www.cnblogs.com/aqxss/p/6563625.html

1.数据库语言(5种)

1.数据定义语言DDL(Data Definition Language)	:create、drop、truncate、alter、show语句
2.数据操作语言DML(Date Manipulation Language)	:insert、update、delete语句
3.数据查询语言DQL(Data Query Language)	:select语句
4.数据控制语言DCL(Data Control Language)	:grant、revoke语句
5.事务控制语言DTL(Data Transaction Language)	:commit,rollback等语句


 1:数据定义语言(DDL)
	 用于创建、修改、和删除数据库内的数据结构,如:1:创建和删除数据库(CREATE DATABASE || DROP  DATABASE);2:		创建、修改、重命名、删除表(CREATE  TABLE || ALTER TABLE|| RENAME TABLE||DROP  TABLE);3:创建和删除索引				(CREATEINDEX  || DROP INDEX)

2:数据查询语言(DQL)
    	从数据库中的一个或多个表中查询数据(SELECT)

3:数据操作语言(DML)
	修改数据库中的数据,包括插入(INSERT)、更新(UPDATE)和删除(DELETE)

4:数据控制语言(DCL)
      	用于对数据库的访问,如:1:给用户授予访问权限(GRANT);2:取消用户访问权限(REMOKE)
5.事务控制语言DTL(Data Transaction Language)	:commit,rollback等语句

2.打开doc命令窗口:win+r

3.cmd登录mysql:mysql -u root -p
root

4.数据库mysql:(别删库!)
数据库中:数据集是utf8,没有-
数据库启动、关闭:计算机管理–服务和应用程序–服务(修改数据库配置内容时,有时候需要在里面停止再启动或重启)
数据库结束语: 分号“;”,windows中mysql命令不区分大小写,linux区分(所以尽量区分养成习惯)

5.数据类型:4种

1、数值型:整型,小数型(double,float)

	1.整数型:
		tinyint(1字节)  :-128---127
  			smallint(2字节) :-32768---32767
  			mediumint(3字节):-8388608-8388607
  			int(4字节)      :-2147483648-2147483647
  			bigint(8字节)   :太大

	2.小数型:
		float(浮点型)
		double(双精度浮点型)
		
		decimal(定点型)

3.字符串:
	enum(限定字符串):
	char(<=225b)	:每次存数据,余出来的内存会用空格填补,反应时间短(适用于定长字符串)
	varchar(<=225b):优化,每次存数据,多出来的内存会释放,反应时间较长
	text(文本)


3、时间
	1.year(年份)	:	yyy
	2.date(年月日):	yy-mm-dd
	3.time(时分秒)	:	hh-ii-ss
	4.datetime	:	yy-mm-dd hh-ii-ss


4、空
	null?



5.类型附加功能
	unsigned		:不分正负,	如tinyint unsigned	   (tinyint是-128---127,加unsigned后范围在0---255中)

	zerofill		: 最少位数,	如int(6) zerofill	   (最少显示六位,多写多显示)

6.null 和 default
not null和default : 非空和默认值,如int(6) not null default 0 (非空,默认值为0)

7.字符集(编码作用)
字符集与校对规则:https://www.cnblogs.com/geaozhang/p/6724393.html?utm_source=itdadao&utm_medium=referral

查看mysql支持哪些字符集		:show character set;
查看当前服务器使用的字符集?	:show variables like 'character_set_server';
查看当前服务器字符集的校对规则	:show variables like 'collation_server';
查看当前Mysql数据库的字符集	:show varialbes like 'character_set_database';
数据库字符集的校对规则		:show variables like 'collation_database';
设置字符集			:set names 'utf8'
查看某个校对规则对应的字符集	:show collation like '校对规则(gbk_chinese_ci)'
查看所有校队规则对应的字符集	:show collation like '%';(%表查全部)
查看字符串长度			:select length('张三');
数据库创建字符集		:create database 库名 default character set 字符集 collate 校对规则;
数据表创建字符集		:create table 表名(...) default character set 字符集 collate 校对规则;

一、事务
定义:
Transaction
事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就 是一个最小的工作单元)
一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成
事务只和DML语句有 关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同

事务四大特性:
		原子性(A):事务是最小单位,不可再分
		一致性(C):事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
		隔离性(I):事务A和事务B之间具有隔离性
		持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

关于事务的一些术语
	开启事务:Start Transaction
	事务结束:End Transaction
	提交事务:Commit Transaction
	回滚事务:Rollback Transaction

和事务相关的两条重要的SQL语句(TCL)
	commit:提交
	rollback:回滚

六、事务开启的标志、事务结束的标志
	开启标志:

-任何一条DML语句(insert、update、delete)执行,标志事务的开启

	结束标志(提交或者回滚):

提交:成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步

	回滚:失败的结束,将所有的DML语句操作历史记录全部清空

8.表(引擎):背

1.mysiam
	1.成熟、稳定、易于管理
	2.支持表级锁,优化高并发
	3.optimize table:处理碎片,该属性可以优化空间
	4.缺点:不支持事务处理,行级锁
	5.空间占有量相对小
	6.支持全文索引
	7.不支持外键约束


2.innodb(创建表默认类型)
	1.myisam的更新产品
	2.支持事务,回滚等功能
	3.与myisam不同的是,他属于行级锁
	4.空间占用量太大(大约是myisam两倍),操作慢,不支持索引
	5.不支持全文索引


3.设定表类型,字符集
	create table 表(字段 类型 是非空 自增长 primary key,字段1,类型1 是非空 默认值,..)engine=myisam default character set gbk collate gbk_Chinese_ci;

	create table A(zd1 int auto_increment primary key,zd2 varchar(50) not null defalut 0) default character set gbk collate gbk_chinese_ci;	#自增长主键必须是int类型

退出数据库:exit
增加用户:grant select on db.* to admin@localhost identified by ‘123’;

7.命令(结束加分号):

1.对数据库:
	1.启动数据库:

	2.关闭数据库:

	3.返回  :\c	
	
	4.登录数据库	:mysql -h localhost -u root -p 或 mysql -h localhost -u root -proot

   		5.退出数据库	:exit  quit  Ctrl+c(偶尔不好使)

	6.查看当前数据库服务中有哪些库	:show databases;	(databases:数据库,复数)

	7.创建库	:create database 库名

	8.选择库(进入库)	:use 库名

	9.删除库	:drop database 库名


	
2.对表:
	1.查看当前库下所有表	:show tables;

	2.创建表	:create table 表(字段 类型 是非空 自增长 primary key,字段1...,..)engine=表类型(myisam,innodb) default character set 字符集(gbk) collate (校对规则)gbk_Chinese_ci;
			create table 库名.表名(字段 数据类型【长度】 字段属性,字段 数据类型【长度】 字段属性,...,primary key(主键字段))
			如:not null auto_increment primary key,字段名1 数据类型,字段2 数据类型);
			(auto_increment自增长只能在int中用)

	3.查看表信息	:select * from 表名;

	4.查看表结构	:desc 表名   (default:默认值)

	5.查看表的创建(详细)信息	:show create table 表名;

	6.修改表名	:alter table 旧表名 rename 新表名;

	7.删除表		:drop table 表名



9.对数据(insert into..., update..set..,delete..from...):
	1.(增)插入字段数据
		insert 表(字段名) values(内容)

		insert into 表(字段1,字段2,...) values('..',)

		insert into 表 values(字段1的值,......)  #这种插入方法	必须将表中所有字段全部插入	按照从左到右依次填写	尽量不要用强制转换机制

		insert into 表 values(null,....)	  #主键若为自增长 主键值写null,null为默认值,虽not null,但自增长优先级高,主键值会自动插入

		insert into 表 set 字段1 = '值1',字段2 = ‘值2’,...;(相对不好用)


	2.(改)修改表数据
		update 表 set 字段 = 值,字段 = 值 where 主键 = 值;   (where后跟的是:条件,不写where整个列都修改)


	3.(删)删除表数据
		truncate (table) tb#删除表中所有数据,不能与where一起使用,truncate为DDL语句,隐式提交,不可rollback
		delete from db where 主键='zhi'		#删一个,delete可以rollback
		delete from db where 主键 in('zhi1','zhi2')	#多个
	区别:truncate、delete:
		1、事务:truncate是不可以rollback的,但是delete是可以rollback的;
          			原因:truncate删除整表数据(ddl语句,隐式提交),delete是一行一行的删除,可以rollback
     		2、效果:truncate删除后将重新水平线和索引(id从零开始) ,delete不会删除索引    
     		3、 truncate 不能触发任何Delete触发器。
     		4、delete 删除可以返回行数





10.对字段(alter...add/change/drop):
	1.(增)添加字段,设置字段位置(add):
		alter table 表 add 字段 类型

	  	alter table 表 add 添加字段 类型 是否空 默认 after/first 已有字段



	2.(改)修改字段(change):
		alter table 表 change 旧字段名 新字段名 新数据类型 ... (如:alter table student change weight weight int not null;)



	3.(删)删除字段(drop):
		alter table 表 drop 字段

查询语句(所有查询语句不会造成影响行数)

简单查询:(select ... from ...)

	select 字段1,字段2.../(*) from 表  (速度比*快,是一种优化)
	select 字段1,字段2.../(*) from 表 where id =/in()




逻辑查询:(select ... from ... where ...)

	select 字段1,字段2.../(*) from 表 where id 【=/>/</!=】 限制条件;






运算查询:(select ... from ...)加减乘除,取模(取余)

	select 字段1,字段2.../(*) from 表 where id = 1+1;






模糊查询(关键字,_,%):(select ... from ... where ... like ...)

	select * from 表 where 字段 like 值
	select * from 表 where 字段 like 'Mar_';   (匹配Mary,一个_只能匹配一个任意字符)
	select * from 表 where 字段 like ‘%a%"; (匹配Mary,一个%匹配若干个任意字符)
	show character set "%'	:查看校对规则




排序查询order by:(不能使用where,也不能接条件)

	????select ... from ... where ... order by 字段
	select * from 表 order by 字段 asc(顺)/desc(逆);	 排序语句不能使用where



受限查询:limit 0,3(分页)

	select * from 表 limit 5,3   (从0开始数,第5条开始取3个)
	select * from 表 limit 0,2



隐藏数据:

	alter table 表 add `delete` enum('1','0') not null default '1';
	update 表 set delete='0' where 主键 in (1,3,5,7,9);
	select * from 表 where `delete` = '1';	



聚合查询:

	select count(id/*) from biao;   (计算有几个id)
	select sum/max/min/avg(age) from 表   (运算)



区间查询:betwwen

	select * from 表 where id between 2 and 5;   (2到5之间,包括2,5)





分组查询:group by(不能使用where)  having+条件(只能和group by 连用)

	create table ks(id int not null auto_increment primary key,username varchar(66) not null default '',content text not null)	创建

	insert into ks values(null,'Eric','asdfgh');  #插入
	
	select username,count(username) from ks group by username;     #group by用username分组 




嵌套查询:(分组,排序,查询)

	select username,count(username) from ks group by username order by count(username) desc limit 0,3;	#先分组,再排序,最后受限
	select username,count(*) from ks group by username having count(*) >=5;
	select username,count(*) from ks group by username having count(*) >=5 order by count(*) desc;



多表查询:

	select students.name,scores.* from students,scores where students.id=scores.pid;




联合查询(比多表快7倍)

	select students.name,scores.* from students join scores on students.id = scores.pid && students.name='zhanglin';




左右表查询:

	左键查询:select students.name,scores.* from students left join scores on students.id=scores.pid;  
			(一切以左表students为主:左表students对应的所有行都会显示,如scores无对应行也会用空补齐,scores若有多余行则不会显示)

	右键查询:select students.name,scores.* from students right join scores on students.id=scores.pid;
			(一切以右表scores为主:右表scores对应的所有行都会显示,如students无对应行也会用空补齐,students若有多余行则不会显示)

外键(innodb支持外键)
主表(innodb) 从表(innodb)(先填主表,再填从表)

create table score(....,foreign key(pid) references students(id))   主表主键

sql注入:条件等于真,会把所有信息拿出来

笛卡尔乘积:

索引(前三要记):提高检索速度

1.主键索引:

2.外键索引:foreign key 外键 references 主表(主键)

3.唯一索引:只有确认某一列不能出现重复的值是才能使用
	设定唯一索引:usename varchar(66) not null default '' unique

4.普通索引:只是提高查询速度
	创建索引:create index 索引名 on 表(字段);
	查看索引:show index from biao
	删除索引:drop index 索引名 on biao

数据库事务(回滚只适用innodb类型):

概念:将多个sql语句要完成的任务看成是一个任务

提交:
	开启手动提交,关闭自动提交(每次登陆都要重新设置)
		set autocommit=0;

	提交
		commit;

	回滚(只对innodb类型表的数据有效,对结构(库,表等)无效)
		rollback(回滚到上一次提交的时间);

用户管理:

root:	库user,库mysql是核心库,千万不要动

查询用户信息:
	use mysql
	select user,host,password from user;

mysql加密PASSWORD(64位):select PASSWORD('123');

创建用户:create user "用户名'@'localhost' identified by '密码'

登陆用户:mysql -h localhost -u admin -p

赋予添加,修改,删除,选择权限:
	1.*.* 	
	2.库.*  
	3.库.表
				1.use mysql
				2.grant insert,update,delete,select on python0806.* to 'admin'@'lacalhost';
收回权限:
	revoke delete,insert,update on python0806.* from 'admin'@'localhost';

修改密码
	查看用户信息:select user,host,password from user;
	update user set password=PASSWORD('新密码') where user='admin' && host='localhost';
	重启配置(电脑-计算机管理-服务-mysql-重启动)
删除用户:
	use mysql
	show tables;

	drop user 'admin'@'localhost';(推荐用)
	重启

	delete from user where user='admin' && host='localhost';(不建议使用delete,删除不干净,删除后创建同名用户时会报错,用户已存在)
	重启mysql

视图(虚拟的表:不占用物理空间):可插入数据,基表和视图的数据互相影响,联合视图改不了视图
创建视图:create…as…

	create view 视图名 as select * from ks;
	create view muth_view as select student.name,scores.linux,scores.mysql from students join scores on students.id=scores.pid;



查看视图创建信息:

	show create view ks_view;


查看视图:

	select * from ks_view;


查看创建视图信息:

	show create view muth_view;


删除视图:

	drop view muth_view

备份,恢复
使用bin的mysqldump:

备份:
	mysqldump -u root -p practice >D:/practice.sql    (备份数据库practice)

恢复:  
	create table practice;		(先创建一个空库)
	mysql -u root -p practice <D:/practice.sql	(恢复备份的数据库practice)

连接数据库
import pymysql
database = pymysql.connect(‘localhost’,‘root’,‘root’,‘practice’,3309) #链接数据库:主机 用户 用户密码 库名 端口号(默认端口号是3306.可在初始化文件查看)
cur = database.cursor() #创建游标对象
sql = 'select * from students’ #编辑sql语句,表名,字段名都用反引,值用引号
num = cur.execute(sql) 执行
print(cur.fetchall()) 显示结果
database.commit() 提交数据库

小注释:
(关于输错命令要取消返回的解释:http://www.anbob.com/archives/579.html)
(翻译:2 rows affected:影响行数为2(表示执行了两行))
(注意:数据库中库,表,数据,万不得已不要删(drop delete updatas慎用(用的话一定加上where语句,批量修改也不能恢复))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值