一 .MySql客户端命令介绍
https://downloads.mysql.com/archives/community/ 下载地址
1. mysql命令的作用
>>> 用于管理数据库
>>> 用于连接数据库
通过命令接口自带命令
"""1、\h 或 help 或 ?
2、\G 可以把查询出来的表格式化
3、\T 或 tee 记录一下日志 tee /tmp/a.log sql语句执行后记录在a.log
4、\c 或 CTRL+c 当前sql输错了结束掉
5、\s 或 status 数据库的一些负载情况 版本等 线程状态信息
6、\. 或 source 用来导入一个sql脚本
7、\u 或use"""
接收用户SQL语句
1. DDL : 数据库定义语言
2. DCL : 数据库控制语言
3. DML : 数据库操作语言
2. mysqladmin命令
一般都是些sql脚本才能用到
"""“强制回应 (Ping)”服务器。
关闭服务器。
创建和删除数据库。
显示服务器和版本信息。
显示或重置服务器状态变量。
设置口令。
重新刷新授权表。
刷新日志文件和高速缓存。
启动和停止复制。
显示客户机信息。"""
#mysqladmin -uroot -p1 ping # 看下数据库是否在启动#mysqladmin -uroot -p1 status#mysqladmin -uroot -p1 variables|grep server_id # 查看当前数据库的参数#mysqladmin -uroot -p1 password 1#mysqladmin -uroot -p1 shutdown
二. SQL(Structure query language) 结构化查询语言
SQL语言分为4个部分: DDL(定义),DML(操作),DQL(查询),DCL(控制)
"""1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
3、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE
4、DQL语句 数据库操纵语言:查询数据SELECT"""
1.关系型与非关系型数据库
"""mysql数据库管理软件,记录事物一些数据特征:
由库,表,记录组成.
库相当于一个文件夹
表相当于一个文件
记录就是文件里面一条一条的内容
表中的成员属性就是一个一个字段
可以为每个项目建立一个数据库
关系型数据库:表与表之间有联系
比如:mysql,oracle,db2,sqlserver
非关系型数据库: key-value 键值对形式 没有表的概念
比如:redis,mongodb,memcache"""
关系型数据库用的比较多的是mysql,reacle
非关系型数据库用的比较多的是redis
2. SQL语句中的快捷键
"""\G 格式化输出(文本式,竖立显示)
\s 查看服务器端信息
\c 结束命令输入操作
\q 退出当前sql命令行模式
\h 查看帮助"""
三. Linux与windows的Mysql服务启停
windows
"""net start mysql
net stop mysql"""
linux
"""service mysql start
service mysql stop
service mysql restart"""
四. 通过命令行连接mysql
1. 连接数据库
"""登录mysql的完整语法
mysql -u用户名 -p密码 -h地址ip"""
列举:
#(1) 登录mysql语法 默认root账户 是系统最高权限用户
mysql -uroot -p127.0.0.1 =>localhost 本地ip地址#(2) 退出mysql
exit 或者 \q#(3) 远程连接mysql服务器
mysql -uroot -p -h192.168.65.135
2.查看登录用户,设置密码
"""# 查询当前登录的用户是谁
select user()
# 设置密码
set password = password("123456")
# 去除密码
set password = password("")"""
3. 为某个ip设置账号密码
#给具体某个ip设置账号密码,用来访问数据库(公网ip)
create user 'ceshi100'@'192.168.65.1' identified by '333';#给具体某个网段下的所有ip设置共同的账号密码,用来访问数据库(公网ip) %代表任意的ip 0~255
create user 'ceshi101'@'192.168.65.%' identified by '444';#所有的ip都可以登录到服务器数据库中
create user 'ceshi102'@'%' identified by '555';
4. 查看和增加权限
show grantsfor 'ceshi102'@'%';#USAGE 没有任何权限
"""+--------------------------------------+
| Grants for ceshi102@% |
+--------------------------------------+
| GRANT USAGE ON *.* TO 'ceshi102'@'%' |
+--------------------------------------+"""
增:
grant 权限 on 数据库.表名 to '用户名'%'ip地址' identified by '密码'
主要权限:
"""# 主要权限
select 查看数据表的权限
insert 插入数据表的权限
update 更新数据表的权限
delete 删除数据表的权限
drop 删除数据库的权限
* 代表所有"""
列如:
grant select,drop on *.* to 'ceshi102'@'%' identified by "333"
#all 代表所有权限
grant all on *.* to 'ceshi102'@'%' identified by "333"
#移除权限#单个
revoke drop on *.* from 'ceshi102'@'%'
#所有
revoke all on *.* from 'ceshi102'@'%'
#删除用户
drop user 'ceshi102'@'%'
#刷新权限,立刻生效
flush privileges
五. 操作数据库
--增--创建一个数据库, 如果存在s3会报错
create database db0824 charset utf8;--不会报错 1个warring
create databaseif notexists s3--更改编码方式utf8
create databaseif notexists s4 character set utf8--查--查看所有数据库
show databases--查看建立数据库的语句
show create database db0824#CREATE DATABASE `db0824` /*!40100 DEFAULT CHARACTER SET utf8 */
--改
alter database db0824_1 charset gbk--删
drop database db0824_1;
六.操作数据表(就是文件)
#先选择数据库#use 数据库名#退回到上一层#use mysql
--增--字段名1 类型1 ,字段名2 类型2 , ... ...
create table t1(id int , name char);--查--查看所有表
show tables;--查看建表语句 配合\G 可以垂直显示
show create table t1;"""Create Table: CREATE TABLE `t1_1` (
`id` int(11) DEFAULT NULL,
`name` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8"""
--查看表结构
desc t1--改--modify 只能改变数据类型
alter table t1 modify name char(5)-- change 连字段名 +类型一起改变
alter table t1 change name newname char(4)--add 添加字段
alter table t1 add age int;--指定位置进行添加列--表中的首列添加一列
alter table t1 add age int FIRST;--在age列后面添加一个telnum列
alter table t1 add telnum int AFTER age;--在name列前面添加一个birthday列
alter table t1 add birthday varchar(30) after id--drop 删除字段 column列
alter table t1 drop column age--rename 更改表名
alter table t1 rename t1_2--删
drop table t1_2;
七. 操作记录(文件中的数据)
--增--一次插入一条数据--insert into 表名(字段1,字段2,...) values(值1,值2, .... )
insert into t1_1(id,name) values(1,"xboy1");--一次插入多条数据
insert into t1_1(id,name) values(2,"xboy2"),(3,"xboy3"),(4,"xboy4");--不指定具体字段插入(默认把所有字段对应的值插一遍)
insert into t1_1 values(5,'xboy5');--指定单个字段插入数据
insert into t1_1(name) values('xboy6');--查-- *代表所有
select* fromt1_1;--指定字段进行查询
select id,namefromt1_1;--改-- update 表名 set 字段=值 where 条件
update t1_1 set name="kxq" where id = 1
--切记更改时,加上条件,否则全都改掉了
update t1_1 set name="kxq"
--删-- 指定id=2的这条数据删除
deletefrom t1_1 where id = 1
--如果不加条件,删除所有数据
deletefromt1_1-- 重置数据表 (删除数据 +重置id)
truncate table t1_1;
八.数据类型
1.整型与浮点型
2. 字符串
3. 时间类型
九. mysql中常用的函数
select user()
select concat()
select concat(参数1,参数2,参数3 , ... ) 把所有的参数拼接在一起
十. 枚举和集合
十一. 索引原理和联合索引
>>>>原理#innodb和myisam的索引的存储方式是不同的
#innodb 存储引擎 索引和数据都存在ibd文件中
#myisam 把所有的索引全部单独存储,就是那个MYI文件
#索引的数据结构使用的是b+树
一个叶子节点也叫一个数据页,可以存多条数据,大概16k
单条数据量越小,叶子节点存的数据量就会越大,需要的叶子节点就越少,
这样的话,树的高度相对降低一些,查询的速度越快.>>>>>联合
联合索引:经常查询时候,几个字段要放在一起查,比如找名字:姓+名
name= 'xxx' and email = 'xxx'create index 索引名 on 表明(字段1,字段2 ... )
create index name_email on t1(name,email);
十二. sql语句优化
(1) 避免使用select *,
(2) 不确定表大小时候,先用count(*)查下数据.
(3) 创建表时尽量使用 char 代替 varchar
(4) 定长的字段放前面,变长的字段放后面.(尽可能小的改变树状结构高度)
(5) 组合索引代替多个单列索引
(由于mysql中每次只能使用一个索引,所以经常使用多个条件查询时更适 合使用组合索引)
(6) 尽量使用短索引(小数据值)
(7) 重复少的字段值不适合做索引,例:性别不适合
(8) 使用连接(JOIN)来代替子查询(Sub-Queries)
十三. 导入和导出数据库
>>>>>导入数据库[退出mysql时在操作]
mysqldump-uroot -p123456 db1 >db1.sql
mysqldump-uroot -p123456 db1 表1 表2 >ceshi01.sql>>>>>导出数据库[登录mysql时在操作]
source~/ceshi01.sql;