MySql
MySql
-
安装
-
配置my.ini 至Mysql安装目录(utf-8编码)
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # mysql服务器默认端口 # 设置mysql的安装目录 basedir=E:\mysql\ # 设置mysql数据库的数据的存放目录 datadir=E:\mysql\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
-
添加环境变量
e:\mysql\bin
-
管理员身份cmd,切换到mysq\bin目录,运行:
mysqld install # 注册mysql服务
-
管理员身份cmd,运行:显示服务启动成功
net start mysql # 启动mysql服务, 开机自启动 net stop mysql # 停止服务
-
MySql在windows服务中自动启动: 服务名称:MySql
-
MySql是C\S架构的软件:
-
server端: 开机自动启动
-
client端: mysql -uroot -p 连接服务端
- -u: 用户 root:管理员
- -p: 密码登陆(刚创建没有密码)
-
-
-
启动客户端连接server
无密码登陆:mysql -uroot -p 密码登陆: mysql -uroot -p123 连接其他电脑的server端: mysql -uroot -p123 -h192.168.14.12(其他电脑ip)
-
MySql账号操作
#进入mysql客户端 $mysql mysql> select user(); #查看当前用户 mysql> exit # 也可以用\q quit退出 # 默认用户登陆之后并没有实际操作的权限 # 需要使用管理员root用户登陆 $ mysql -uroot -p # mysql5.6默认是没有密码的 #遇到password直接按回车键 mysql> set password = password('root'); # 给当前数据库设置密码 # 创建账号 mysql> create user 'eva'@'192.168.10.%' IDENTIFIED BY '123';# % 表示网段 密码123 mysql> create user 'eva'@'192.168.10.5' # 指示某机器可以连接 mysql> create user 'eva'@'%' #指示所有机器都可以连接 mysql> show grants for 'eva'@'192.168.10.5';查看某个用户的权限 # 远程登陆 $ mysql -uroot -p123 -h192.168.10.3(server端ip) # 给账号授权 mysql> grant all # 所有权限:增删改查 mysql> grant select # 查询权限 mysql> grant insert # 写入权限 mysql> grant select,insert # 查询,写入权限 mysql> grant 权限类型 on ftp.* to 'guest'@'192.168.3.%' # ftp库下的所有表 给 guest用户所在的网段(或指定单个电脑ip) mysql> grant all on *.* to 'eva'@'%'; mysql> flush privileges; # 刷新使授权立即生效 # 创建账号并授权 mysql> grant all on *.* to 'eva'@'%' identified by '123'
-
数据库操作(use 数据库名:切换到数据库)
数据库:文件夹 | 表: 文件
* use 数据库名 # 切换到数据库 1. 操作文件夹(库) 增:create database db1 charset utf8; 查:show databases; 改:alter database db1 charset latin1; 删除: drop database db1; 2. 操作文件(表) 先切换到文件夹下:use db1 增:create table t1(id int,name char); # t1:表名(字段 类型, name char) 查:show tables; 改:alter table t1 modify name char(3); alter table t1 change name name1 char(2); 删:drop table t1; 查看表结构: desc 表名 3. 操作文件中的内容(记录) 增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3'); 查:select * from t1; 改:update t1 set name='sb' where id=2; 删:delete from t1 where id=1; 清空表: delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。 truncate table t1;数据量大,删除速度比上一条快,且直接从零开始, *auto_increment 表示:自增 *primary key 表示:约束(不能重复且不能为空);加速查找
-
ubuntu mysql 启动与重启
# 修改每次启动都要sudo 1. 修改root用户 use mysql select User, Host,plugin from user; # 查看用户的权限,是否是mysql_native_password,如果不是,则将auth_sock改为mysql_native_password。 update user set plugin = 'mysql_native_password' where user = 'root'; flush privileges;
1、使用 service 启动:service mysql start 2、使用 mysqld 脚本启动:/etc/init.d/mysql start 3、使用 safe_mysqld 启动:safe_mysql& mysql关闭: 1、使用 service 启动:service mysql stop 2、使用 mysqld 脚本启动:/etc/init.d/mysql stop 3、mysqladmin shutdown mysql重启: 1、使用 service 启动:service mysql restart 2、使用 mysqld 脚本启动:/etc/init.d/mysql restart
-
mysql 时间差异, UTC时间, 中国处在东8区,本地要+8小时
临时方案:
mysql> SET time_zone = ‘+8:00‘;
永久解决方案:
配置windows:my.ini linux: /etc/my.cnf
[mysqld] default-time_zone = ‘+8:00‘ # 重启服务,linux service mysql restart # windows net stop mysql net start mysql
pycharm设置 settings.py
TIME_ZONE = 'Asia/Shanghai'
Count参数区别于执行效率
-
count(1)、count()和count(字段名)执行效果上的区别:
- count()包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NUL
- count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
- count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
-
count(1)、count(*)和count(字段名)执行效率上的区别:
如上可以看出其实四种方式的效率是一样的,但是网上有如下说法:- 列名为主键,count(列名)会比count(1)快
- 列名不为主键,count(1)会比count(列名)快
- 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count()
- 如果有主键,则 select count(主键)的执行效率是最优的
- 如果表只有一个字段,则 select count()最优。