Mysql
MySql基本操作
1、Msql安装包安装:
以管理员身份运行命令提示符,然后输入sc delete mysql
这里的mysql是你服务中的mysql名(有些可能是mysql5,或者之类)。
1.1创建my.ini
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #skip-grant-tables # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=D:\mysql-8.0.12-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:\mysql-8.0.12-winx64\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB my.ini配置
初始化-------服务端:E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --initialize-insecure 启动服务端-------E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld\mysqld 启动客户端-------E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld\mysql -u root -p 配置环境变量-------E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin --------E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64 制作MYSQL服务--------E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --install 启动MYSQL服务-------net start MySQL 移除MYSQL服务-------E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --remove 停止MYSQL服务-------net stop MySQL
修改MySQL密码-------ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
2、创建用户:
create user 'fangyi'@'192.168.1.1' identified by '123123';-------创建fangyi用户(只能在指定IP电脑登录) create user 'fangyi'@'192.168.1.%' identified by '123123'; ------创建fangyi用户(只能在指定IP域网登录) create user 'fangyi'@'192.168.%' identified by '123123'; ------创建fangyi用户(只能在指定IP前缀登录) create user 'fangyi'@'%' identified by '123123'; -------创建fangyi用户(在任意IP登录)
3、权限:
grant select,insert,update on db1.t1 to 'alex'@'%'; -------选择 select,insert,update 操作 与 db1.t1 库 让 'alex'@'%'; 使用 grant all privileges on db1.t1 to 'alex'@'%'; -------选择 所有 操作 与 db1.t1 库 让 'alex'@'%'; 使用 grant all privileges on db1.* to 'alex'@'%'; -------选择 所有 操作 与 db1所有 表 让 'alex'@'%'; 使用 grant all privileges on *.* to 'alex'@'%'; -------选择 所有 操作 与 所有 库 让 'alex'@'%'; 使用 revoke all privileges on db1.t1 from 'alex'@'%'; -------删除 所有 操作 与 db1.t1 库 'alex'@'%';
4、数据类型:
all privileges 除grant外的所有权限 select 仅查权限 select,insert 查和插入权限 ... usage 无访问权限 alter 使用alter table alter routine 使用alter procedure和drop procedure create 使用create table create routine 使用create procedure create temporary tables 使用create temporary tables create user 使用create user、drop user、rename user和revoke all privileges create view 使用create view delete 使用delete drop 使用drop table execute 使用call和存储过程 file 使用select into outfile 和 load data infile grant option 使用grant 和 revoke index 使用index insert 使用insert lock tables 使用lock table process 使用show full processlist select 使用select show databases 使用show databases show view 使用show view update 使用update reload 使用flush shutdown 使用mysqladmin shutdown(关闭MySQL) super 使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆 replication client 服务器位置的访问 replication slave 由复制从属使用 对于权限
5、库:
显示可用库: show databases; 创建库: create databases fangyi; create databases fangyi default charset utf8; 使用库: use fangyi; 删除库: drop database fangyi;
6、表:
显示表: show tables; 创建表: 1.创建tables,(字符编码) create table t1( Id int, name char(10) ) default charset = utf8; 2.创建tables,(引擎+字符编码) create table t2 ( id int, name char(10)) engine = innodb default charset = utf8;
3.创建tables,(引擎+自增ID+字符编码) create table t3( id int auto_increment, name char(10)) engine=innodb default charset=utf8;
4.创建tables,(引擎+自增ID+字符编码+主键) create table t1( 列名 类型 null, 列名 类型 not null, 列名 类型 not null auto_increment primary key, id int, name char(10)) engine=innodb default charset=utf8; # innodb 支持事务,原子性操作 # myisam myisam#auto_increment 表示:自增 #primary key: 表示 约束(不能重复且不能为空); 加速查找 #not null: 是否为空
create table t1( id int signed not null auto_increment primary key, num decimal(10,5), name char(10) )engine=innodb default charset=utf8; #signed&unsigned ---signed范围是-128 - 127 ---unsigned范围是0-255
7、删除表:
清空表: delete from t1;----------新增数据ID中自增ID顺序继续。 truncate table t1;-------删除表中数据,不删除表;新增数据ID中自增ID顺序不继续。 删除表: drop table t1;------------删除表格
8、插入数据:
插入数据: insert into tb1(name,age) values('alex',18); insert into tb1(name,age) values('alex',18),('egon',19),('yuan',20);
insert into tb12(name,age) select name,age from tb11;
9、删除数据:
删除数据:
delete from tb12;
delete from tb12 where id !=2
delete from tb12 where id =2
delete from tb12 where id > 2
delete from tb12 where id >=2
delete from tb12 where id >=2 or name='alex'
10、修改数据:
修改: update tb12 set name='alex' where id>12 and name='xx' update tb12 set name='alex',age=19 where id>12 and name='xx' update t1 set age=18; update t1 set age=18 where age=17;
Mysql一个表根据另一个表更新
update people s set city_name = (select name from city where code = s.city_code);
11、查询数据:
查看数据: select * from t1; select id,name from tb; select * from tb12; select id,name from tb12; select id,name from tb12 where id > 10 or name ='xxx'; select id,name as cname from tb12 where id > 10 or name ='xxx'; select name,age,11 from tb12;
12、其他:
其他: select * from tb12 where id != 1 select * from tb12 where id in (1,5,12); select * from tb12 where id not in (1,5,12); select * from tb12 where id in (select id from tb11) select * from tb12 where id between 5 and 12;
13、通配符:
通配符: select * from tb12 where name like "a%" select * from tb12 where name like "a_"
14、分页:
分页: select * from tb12 limit 10; select * from tb12 limit 0,10; select * from tb12 limit 10,10; select * from tb12 limit 20,10; select * from tb12 limit 10 offset 20; 从第20行开始读取,读取10行; 结合Python分页: # page = input('请输入要查看的页码') # page = int(page) # (page-1) * 10 # select * from tb12 limit 0,10; 1 # select * from tb12 limit 10,10;2
15、排序:
排序: select * from tb12 order by id desc; 大到小 select * from tb12 order by id asc; 小到大 select * from tb12 order by age desc,id desc; 取后10条数据 select * from tb12 order by id desc limit 10;
16、分组:
分组: select count(id),max(id),part_id from userinfo5 group by part_id; count max min sum avg **** 如果对于聚合函数结果进行二次筛选时?必须使用having **** select count(id),part_id from userinfo5 group by part_id having count(id) > 1; select count(id),part_id from userinfo5 where id > 0 group by part_id having count(id) > 1;
17、连表操作:
连表操作: select * from userinfo5,department5 select * from userinfo5,department5 where userinfo5.part_id = department5.id select * from userinfo5 left join department5 on userinfo5.part_id = department5.id select * from department5 left join userinfo5 on userinfo5.part_id = department5.id # userinfo5左边全部显示 # select * from userinfo5 right join department5 on userinfo5.part_id = department5.id # department5右边全部显示 select * from userinfo5 innder join department5 on userinfo5.part_id = department5.id 将出现null时一行隐藏
18、外键:
唯一外键:
create table userinfo( uid int auto_increment primary key, name varchar(32), department_id int, xx_id int, constraint fk_user_depar foreign key (department_id) references color(id) )engine=innodb default charset=utf8; #constraint是约束关键字,fk_user_depar自己取的名字(表级约束可以给约束起名字(方便以后通过这个名字来删除这个约束)
create table department( id bigint auto_increment primary key, title char(15) )engine=innodb default charset=utf8;
联合外键:(两列联合外键) create table tb1( id int not null auto_increment primary key, name char(10), department_id int, p_id int, constraint fk_1 foreign key (department_id,p_id) references tb2(tid,xid) )engine=innodb default charset=utf8;
主键:一个表只能有一个主键、主键可以由多列组成
19、步长:
基于会话级别: 设置步长: set session auto_increment_increment=2; set session auto_increment_offset=10; 查看全局变量: show session variables like 'auto_inc%';
基于全局级别: 设置步长: set global auto_increment_increment=2; # set global auto_increment_offset=10; 查看全局变量: show global variables like 'auto_inc%';
20、自增步长:
CREATE TABLE `t5` ( `nid` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL, `num` int(11) DEFAULT NULL, PRIMARY KEY (`nid`,`pid`) ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
CREATE TABLE `t6` ( `nid` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL, `num` int(11) DEFAULT NULL, PRIMARY KEY (`nid`,`pid`) ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8
21、唯一索引:
create table t1( id int ...., num int, xx int, unique 唯一索引名称 (列名,列名), constraint .... )
唯一: 约束不能重复(可以为空) PS: 主键不能重复(不能为空) 加速查找
22、外键的变种
23、PYMYSQL:
由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器。目前,有两个MySQL驱动:
-
mysql-connector-python:是MySQL官方的纯Python驱动;
-
MySQL-python:是封装了MySQL C驱动的Python驱动。
可以把两个都装上,使用的时候再决定用哪个:
$ easy_install mysql-connector-python $ easy_install MySQL-python
我们以mysql-connector-python为例,演示如何连接到MySQL服务器的test数据库:
# 导入MySQL驱动: >>> import mysql.connector # 注意把password设为你的root口令: >>> conn = mysql.connector.connect(user='root', password='password', database='test', use_unicode=True) >>> cursor = conn.cursor() # 创建user表: >>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))') # 插入一行记录,注意MySQL的占位符是%s: >>> cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael']) >>> cursor.rowcount 1 # 提交事务: >>> conn.commit() >>> cursor.close() # 运行查询: >>> cursor = conn.cursor() >>> cursor.execute('select * from user where id = %s', ('1',)) >>> values = cursor.fetchall() >>> values [(u'1', u'Michael')] # 关闭Cursor和Connection: >>> cursor.close() True >>> conn.close()
由于Python的DB-API定义都是通用的,所以,操作MySQL的数据库代码和SQLite类似。
小结
-
MySQL的SQL占位符是
%s
; -
通常我们在连接MySQL时传入
use_unicode=True
,让MySQL的DB-API始终返回Unicode。
MySQL 环境搭建之解压方式安装
以管理员身份运行命令提示符,然后输入sc delete mysql
这里的mysql是你服务中的mysql名(有些可能是mysql5,或者之类)。
一 .MySQL服务 安装
1.下载:
地址: http://dev.mysql.com/downloads/mysql/
2.安装:
将下载的mysql-5.7.16-winx64压缩包解压后的整个目录放在自己喜欢的位置,我的放在E:\softwareDevelop盘目录下
3.初始化操作
解压后进入当前文件夹的bin目录下,可以看到很多执行文件,在该目录下执行初始化操作:
cd E:\softwareDevelop\mysql-5.7.20-winx64\bin\mysqld --initialize-insecure ps:进行初始化操作,当前操作会在mysql-5.7.20-winx64目录下创建一个data文件夹
4. 连接服务器
E:\softwareDevelop\mysql-5.7.20-winx64\bin\mysqld
5. 启动MySQL客户端并连接MySQL服务
# 进入可执行文件目录 cd c:\mysql-5.7.16-winx64\bin # 连接MySQL服务器 mysql -u root -p # 提示请输入密码,直接回车
输入回车,见下图表示安装成功:
6.优化操作
到此为止,MySQL服务端已经安装成功并且客户端已经可以连接上,以后再操作MySQL时,只需要重复上述4、5步骤即可。但是,在4、5步骤中重复的进入可执行文件目录比较繁琐,如想日后操作简便,可以做如下操作。
a. 添加环境变量
将MySQL可执行文件添加到环境变量中,从而执行执行命令即可
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】 如: C:\Program Files (x86)\Parallels\Parallels Tools\Applications;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Python27;C:\Python35;C:\mysql-5.7.16-winx64\bin
如此一来,以后再启动服务并连接时,仅需:
1
2
3
4
5
|
# 启动MySQL服务,在终端输入 mysqld # 连接MySQL服务,在终端输入: mysql -u root -p |
b. 将MySQL服务制作成windows服务
上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:
1
2
3
4
5
|
# 制作MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --install # 移除MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --remove |
注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:
1
2
3
4
5
|
# 启动MySQL服务 net start mysql # 关闭MySQL服务 net stop mysql |
安装完MySQL之后,为了操作数据库方便,我们可以安装可视化工具(客户端)
二. Navicat for MySQL
一、简介
【1】Navicat是一款强大的可视化数据库管理工具,用于开发和管理MySQL,Oracle,SQL Server,SQLite等数据库
【2】Navicat Premium是一数据库管理工具,将此工具连接数据库,可以看到各种数据库的详细信息
【3】官方网站:https://www.navicat.com
二:安装Navicat for MySQL
运行 → 下一步 → 点击“我同意” → 选择安装路径 → 保留默认,下一步 → 选择是否创建桌面图标,建议保留默认值,点击“下一步” → 安装 → 完成。
MySql卸载
0.1、以管理员身份运行命令提示符,然后输入sc delete mysql
这里的mysql是你服务中的mysql名(有些可能是mysql5,或者之类)。
0.2、
有时候MySQL不能完全卸载,这时候必须通过一些途径删除掉注册表和一些残余的文件,然后才能重新安装才可以成功!
1.控制面板——》所有控制面板项——》程序和功能,卸载mysql server!
2.然后删除mysql安装目录下文件夹下的my.ini文件及所有文件
3.打开注册表
4.删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹
5.删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL的文件夹。如图低端的地址。如果没有可以不用删除了
6. 删除C盘下的“C:\ProgramData\MySQL ”所以文件,如果删除不了则用360粉碎掉即可,该programData文件是隐藏的默认,设置显示后即可见,或者直接复制上边的地址到地址栏回车即可进入!删除后重启电脑,重装MYsql数据库应该就成功了。