mysql命令收集:
安装
在终端输入
sudo apt-get install mysql-server mysql-client
mysql -u ccx -p
用户ccx进入mysql控制台,注意(;)号结尾。
mysql -p 表名
进入数据库并展示数据库的表'表名',默认root用户
show databases;
展示数据库
use 库名;
使用数据库'库名'
use 库名;
使用数据库'库名'
show 表名;
展示数据库的表'表名'
show tables;
展示数据库的所有表
show variables like 'port';
展示mysql的端口号
给root设置密码
GRANT ALL PRIVILEGES ON . TO root@localhost IDENTIFIED BY "123456";
1 创建数据库weixx
CREATE DATABASE weixx;
2 创建用户wxx(密码654321) 并赋予其weixx数据库的所有权限
GRANT ALL PRIVILEGES ON weixx.* TO wxx@localhost IDENTIFIED BY "654321";
修改 MySQL 的管理员密码:
sudo mysqladmin -u root password newpassword
设置远程访问
(正常情况下,mysql占用的3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问(通过netstat可以查看到)。
取消本地监听需要修改 my.cnf 文件:
sudo vi /etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1 //找到此内容并且注释
允许wxx用户可以从任意机器上登入mysql
GRANT ALL PRIVILEGES ON weixx.* TO wxx@"%" IDENTIFIED BY "654321";
$sudo gedit /etc/mysql/my.cnf
在最后添加如下配置,允许其他机器访问MySQL
>skip-networking => # skip-networking
测试安装是否成功:
在终端输入 sudo netstat -tap | grep mysql
删除表(表结构以及表内容) drop table 表名
删除表内容(自增不会影响) delete from 表名
删除表内容(自增也清零) truncate table 表名
修改表结构
增加一列 alter table 表名 add 列名 类型
删除一列 alter table 表名 drop column 列名
修改列类型 alter table 表名 modify column 列名 新类型;
修改列名称和列类型(类型保持不变也可) alter table 表名 change 原列名 新列名 类型;
指定具体列为主键 alter table 表名 add primary key(列名);
删除指定列的主键 alter table 表名 modify 列名 int, drop primary key;
删除当前表中所有列的主键 alter table 表名 drop primary key;
为当前表中列指定外键 alter table 从表(当前表) add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键 alter table 表名 drop foreign key 外键名称
修改默认值 alter table 表名 alter 列名 set default 新默认值;
删除默认值 alter table 表名 alter 列名 drop default;
** 表中数据的操作 **
增加内容 insert into 表 (列名01,列名02...) values (值,值,值...) [,(值,值,值...)] 可以一次增加多条数据
删除具体数据 delete from 表 where 条件'
修改表中具体数据 update 表 set 列名= 值 where 条件
查询具体内容 select 列名01 as 别名 , 列名02 from 表 where 条件
常见条件: 且关系and; 区间关系between 开始位置 and 结束位置; 在其中的关系in (v1, v2, v3); 不在其中的关系not in (v1, v2, v3); 在某种条件下in (select语句)
mysql中的两种通配符: %匹配任意零个字符或者任意多个字符; _匹配任意一个
mysql中的限制条件: limit number 表前number行以内; limit start, number 表示从start行起始的number行以内; limit number offset start 表示从第start'开始的number行以内
mysql中排序显示: order by 列1 desc,列2 asc 表示先以列1递减排序, 若列1相同时候则以列2递增排序
分组: select count(列名),sum(列名),max(列名),min(列名) from 表 where 条件 group by 列名01,列名02 order by 列名 这里的group by需要放在where与order之间, where和order可以不存在
连表查询结果
select A.xx B.oo from A, B where A.x=B.o 没有A.x=B.o对应的数据则不显示任何结果
select A.xx B.oo from A inner join B where A.x=B.o A和B具有对等位置, 没有A.x=B.o对应的数据则不显示任何结果
select A.xx B.oo from A left join B where A.x=B.o A表显示所有, 对于B表若无符合A.x=B.o的数据则其值为null来显示
select A.xx B.oo from B right join A where A.x=B.o A表显示所有, 对于B表若无符合A.x=B.o的数据则其值为null来显示
组合不去重复显示所有查询结果 select 列名 from 表 union all select 列名 from 表
组合去重显示 select 列名 from 表 union select 列名 from 表
** 存储过程相当于一些sql语句的堆积, 但是sql语句执行后的结果集以及变量都可以返回给用户; 而函数不能返回结果集, 仅仅是变量的操作 **
创建存储过程
delimiter $$
DROP PROCEDURE IF EXISTS p1 $$
CREATE PROCEDURE p1(
-- 声明仅用传入参数用的整型形参
in in_1 INT,
-- 声明既可以传入又可以当返回值的整型形参
INOUT inout_1 int,
-- 声明仅用做返回值的整型形参
OUT out_1 INT
)
BEGIN
-- 声明语句块中的临时变量
DECLARE tmp_in_1 INT;
DECLARE tmp_inout_1 INT;
-- 赋值语句
SET tmp_in_1 = in_1;
set tmp_inout_1 = inout_1;
SET out_1 = tmp_in_1 + tmp_inout_1;
-- 正常的sql查询语句
SELECT * from userinfo LIMIT in_1, inout_1;
end $$
delimiter ;
使用存储过程
设置用户变量传值,in类型可不用变量传值, out类型不能传入值;
set @in_1_tmp=1;
set @inout_1_tmp=3;
调用存储过程, 传入参数
CALL p1 (1,@inout_1_tmp,@out_1_tmp);
取得存储过程的执行结果, 包括sql语句结果集以及变量值
(in, inout以及out类型变量都能取得他们的值)
SELECT @in_1,@inout_1_tmp,@out_1_tmp;
删除存储过程
drop procedure 存储过程名
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
# 创建连接通道, 设置连接ip, port, 用户, 密码以及所要连接的数据库
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='pymysql_db')
# 创建游标, 操作数据库, 指定游标返回内容为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 调用存储过程, 传入参数
cursor.callproc('p1', (1, 5, 0))
# 得到结果集1, 即sql语句执行结果
select_result = cursor.fetchone()
print(select_result)
# 执行存储过程, 获取返回值, @_存储过程名_第一个参数
cursor.execute("select @_p1_0,@_p1_1,@_p_2")
select_result = cursor.fetchone()
print(select_result)
cursor.close()
conn.close()
**用户操作以及用户权限部分(不做演示, 不常用, 备查即可): **
创建用户 create user 用户名 @ ip地址 identified by 密码;
删除用户 drop user 用户名 @ ip地址;
用户名修改 rename user 用户名 @ ip地址 to 新用户名@ip地址;
修改指定用户密码 set password for 用户名 @ ip地址 = Password(新密码)
查看权限 show grants for 用户 @ ip地址
给指定用户增加权限 grant 权限 on 数据库.表 to 用户 @ ip地址
取消指定用户的权限 revoke 权限 on 数据库.表 from 用户 @ ip地址
常见权限: 除grant外的所有权限 all privileges; 无访问权限 usage; 查询权限 select; 创建表权限 create; 删除表内容权限 delete
用户 @ ip地址表示用户在指定ip地址下才能访问, 当ip地址为%时候表示任意地址均可访问(默认即是)
重启Apache2:
/etc/init.d/apache2 restart
==============================================
linux下MySQL停止和重启
一、启动方式
1、使用linux命令service 启动:
service mysqld start
2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld start
3、使用 safe_mysqld 启动:
safe_mysqld&
二、停止
1、使用 service 启动:
service mysqld stop
2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld stop
3、 mysqladmin shutdown
三、重启
1、使用 service 启动:
service mysqld restart
2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld restart
备注:查看mysql端口是否已经使用,使用netstat -anp 命令查看服务器端口使用情况。
========================================================
在mysql中查看字符相关的变量:
show variables like'character%';
通过MySQL命令行修改:
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_results=utf8;
set character_set_server=utf8;
set character_set_system=utf8;
set collation_connection=utf8;
set collation_database=utf8;
set collation_server=utf8;
=========================================================
a)查看数据库的编码:show create database databaseName;
b)修改数据库编码: alter database databaseName default character set utf8 collate utf8_general_ci;
a)查看建表的编码:show create table tableName;
修改后查看编码都已经是utf8了应该不会有错了。果然测试可以了。
下面附上mysql的一些相关命令:
========================================================
修改数据库字符集:
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
如:
ALTER TABLE test CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
修改表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;