Mysql学习

2019.5.5 星期日 21:00

语法

基本

数据类型

CURD

#### 更新字段值
UPDATE book_comment SET title=left(content,10) WHERE product_id=24243060;

#### 查找有无数据
Mysql判断记录是否存在
select count(*) from tablename where col = ‘col’;
select 1 from tablename where col = ‘col’ limit 1;
执行这条sql语句,所影响的行数不是0就是1。
特别解释下limit 1,mysql在找到一条记录后就不会往下继续找了。性能提升很多。

#### 查看
select * from book_comment limit 10\G

查字段(名称,类型)

1
2
3
4
show columns from site_book_comment;

select column_name,column_comment,data_type from information_schema.columns where table_name='查询表名称' and table_schema='数据库名称'
select COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT from information_schema.COLUMNS where table_name = '表名' and table_schema = '数据库名称';

2) mysql 查看表中字段的数据类型

// 2_1 查询结果显示
desc 表名;
show columns from 表名;
describe 表名;
// 2_2 sql语句显示
show create table 表名;
// 2_3:还可以通过专门的管理表来查看
use information_schema
select * from columns where table_name=’表名’;

密码设置

设置密码:./bin/mysqladmin -u root password 123456

mysqladmin -u root -p password 回车后直接输入新密码

1
2
3
4
5
6
7
8
9
10
11
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

##
use mysql;
UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
FLUSH PRIVILEGES;

## 在丢失root密码的时候,可以这样
# ` mysqld_safe --skip-grant-tables & mysql -u root mysql`
UPDATE user SET password=PASSWORD("new password") WHERE user='root';
FLUSH PRIVILEGES;

设置权限

允许远程访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use mysql;
select host,user from user;
update user set host = '%' where user = 'root';
grant all privileges on *.* to 'root'@'%';
flush privileges;

show grants for 'root'@'%';

-- 2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“
-- 这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'sql-0122' WITH GRANT OPTION;

-- grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。
### 撤销 只需要把关键字 to 换成 from 即可:
revoke all on *.* from dba@localhost;

因为新版的的mysql版本已经将创建账户和赋予权限的方式分开了
创建账户:create user ‘用户名‘@’访问主机’ identified by ‘密码’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名‘@’访问主机’ ;(修改权限时在后面加with grant option)
grant select, insert, update, delete on testdb.* to common_user@'%'

时间自动更新

1
2
`creat_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

MySQL5.6.5以上的版本、CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP都适用于datetime、timestamp类型。

上述在navicat中的操作:找到相应的表—右击—>点击 设计表—> 选中 ‘根据当前时间戳更新’。

索引

[MySQL(五) MySQL中的索引详讲]
三、索引的分类  
注意:索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引
            MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换
            MEMORY/HEAP存储引擎:支持HASH和BTREE索引

1、索引我们分为四类来讲 单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引、

1.1、单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引。 这里不要搞混淆了。
1.1.1、普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
1.1.2、唯一索引:索引列中的值必须是唯一的,但是允许为空值,
1.1.3、主键索引:是一种特殊的唯一索引,不允许有空值。

1.2、组合索引
在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。这个如果还不明白,等后面举例讲解时在细说 

1.3、全文索引
全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有”你是个大煞笔,二货 …” 通过大煞笔,可能就可以找到该条记录。这里说的是可能,因为全文索引的使用涉及了很多细节,我们只需要知道这个大概意思,如果感兴趣进一步深入使用它,那么看下面测试该索引时,会给出一个博文,供大家参考。

1.4、空间索引
空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,GEOMETRY、POINT、LINESTRING、POLYGON。
在创建空间索引时,使用SPATIAL关键字。

要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL。具体细节看下面   

引擎

安装

MySQL Community Downloads
MySQL Product Archives

windows

安装mysql服务,命令行必须以管理员身份打开(同mongo)
记得关闭开机自动启动(同mongo服务)。
net start mysql 必须管理员。否则提示发生系统错误 5;拒绝访问!
环境变量配置 可选。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# mysqld --defaults-file="D:\server\mysql-8.0.21\mysql.ini" --initialize-insecure --user=root --console
mysqld --defaults-file="D:\server\mysql-8.0.21\mysql.ini" --initialize --user=root --console

mysqld --install MySQL --defaults-file="D:\server\mysql-8.0.21\mysql.ini" ## 安装服务
mysqld --remove ## 删除服务
net start mysql ## 启动。 或者 mysqld --defaults-flie="D:\server\mysql-8.0.21\mysql.ini" --console
net stop MySQL ## 关闭。或者 mysqladmin -uroot shutdown

# 连接mysql

## 如果使用--initialize-insecure 需要设置密码
mysql -u root -p # (第一次登录没有密码,直接按回车过)
## 修改密码。(注意不是sql语句,是命令行)
mysqladmin -u root -p password # 修改密码;输入密码时回车,然后才输入新的密码123456;确认
mysql -u root -p ## 设置密码后。用密码登录

## 如果使用--initialize ;会打印一个密码;然后去修改
mysql -u root -p pwd
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

exit # 退出

  1. –defaults-file 必须放置第一个位置。否则会报错
  2. –console 是输出过程。否则中间报错,并不清楚
  3. -insecure 初次设置和用户密码有关。设置或修改
    mysqld –initialize-insecure自动生成无密码的root用户,
    mysqld –initialize自动生成带随机密码的root用户。
  4. 如果出错/初始化的时候,要清空data文件夹
  5. 先启动mysqld –defaults-file 和 mysqld install 先后位置应该可以换

mysql.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[mysql]

# 设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]
#设置3306端口
port = 3306

# 设置mysql的安装目录
basedir="D:/Server/mysql-8.0.21"

# 设置mysql数据库的数据的存放目录
datadir="D:/data/mysql"
log-error="D:/var/log/mysql_err.log"
# 允许最大连接数
max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

linux

异常

“Security”

Fatal error: Please read “Security” section of the manual to find out how to run mysqld as root
需要指定user mysqld --defaults-file=/etc/mysql.conf --user=root

mysql.sock

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
登录需要指定host mysql -u root -h 127.0.0.1
或者指定 mysql sock的地址,并创建软链接在 /etc/mysql.conf
ln -s /usr/local/mysql-8.0/mysql.socket /tmp/mysql.sock

远程连接

设置运行连接权限。 host-> %, 权限:all等
防火墙

工具

实际用了MySQL-Front,sqlYog,还有基于php的mysql-admin

  1. EMS MySQL Manager
      强大的mysql管理工具,允许用户通过图形界面创建或编辑数据库对象,并提供通过sql语句管理用户和权限,通过图形界面建立sql语句,自动生成html格式的数据库文档,导入/导出数据,查看/编辑blob字段等功能。
  2. MySQL-Front
      mysql数据库的图形工具,主要特性包括多文档界面,语法突出,拖拽方式的数据库和表格,可编辑/可增加/删除的域,可编辑/可插入/删除的记录,可显示的成员,可执行的SQL 脚本,提供与外程序接口,保存数据到CSV文件等。

  3. Navicat for MySQL
      一套适用于MySQL数据库系统地图形化数据库管理、报告以及监控的工具。新版本具有高性能的、具有商业智能的、强大的备份功能,此外还有许多的改进。含简体中文文件。

  4. MySqlYog
      MySqlYog软件是纯JAVA编写的软件,可以运行于WINDOWS,LINUX,UNIX系统,基本版本可以实现对数据库的基本管理,可视化创建表,视图,触发器,数据库的热备份,恢复,可远程管理系统等功能。

  5. MySQL Browser

  6. Workbench
  7. Sequel Pro

windows

当然有的朋友在官网下载比较慢,我也为大家准备好了,Navicat premium 15安装包和破解工具

在 1) Patch 中选择Backup、Host、Navicat v15这三个,默认也是选择了这三个;勾选这三个后点击Patch

点击Patch按钮并找到Navicat Premium 15的安装目录的navicat.exe文件

2.License. Product and Language

License里选中Enterprise、在Produce里选择Premium、在Languages里选择Simplified Chinese(简体中文)

3.Resale License

保持默认选择即可

4.Keygen / Offline Activation

点击Generate按钮就会生成一个许可证秘钥,将许可证秘钥复制后就打开Navicat Premium 15

mac

  1. 下载 navicat150_premium_cs.dmg 后打开并将 Navicat Premium 拖放到 /Application (即 应用程序) 中
  2. 通过如下命令,使用 navicat-patcher 替换掉公钥
    ./navicat-patcher /Applications/Navicat\ Premium.app/
  3. 生成一份自签名的代码证书,并总是信任该证书。这一步非常重要
    按步骤生成了Navicat证书,也选择了“始终信任”,可是提示
    <!–
    error: The specified item could not be found in the keychain.

意思是钥匙串里没有证书,,搜索才知道,,要把证书拖动到“系统”下

参考:刚刚也碰到了这个问题,创建证书到系统最后会报未知错误。网上找了一下解决方法:指定用于该证书的位置时先选择登录,创建成功后,这个证书显示在登录选项里面。选中这个证书直接拉到系统选项上,然后系统选项里也有了这个证书,最后删除登录里面的这个证书,就OK了。

然后运行就可以了,会提示
–>

  1. 用 codesign 对 libcc-premium.dylib (如果有的话) 和 Navicat Premium.app 重签名。

如果你的Navicat Premium版本号高于15.0.0,
你必须先签名 libcc-premium.dylib,再签名 Navicat Premium.app。

1
2
codesign -f -s Navicat /Applications/Navicat\ Premium.app/Contents/Frameworks/libcc-premium.dylib
codesign -f -s Navicat /Applications/Navicat\ Premium.app/

5 接下来使用 navicat-keygen 来生成 序列号 和 激活码。

  1. 断开网络 并打开 Navicat
    找到注册窗口,填入注册机给你的序列号。然后点击激活按钮。
  2. 一般来说在线激活肯定会失败,这时候Navicat会询问你是否手动激活,直接选吧。
  3. 在手动激活窗口你会得到一个请求码,复制它并把它粘贴到keygen里。最后别忘了连按至少两下回车结束输入。
  4. 如果不出意外,你会得到一个看似用Base64编码的激活码。
    直接复制它,并把它粘贴到Navicat的手动激活窗口,最后点激活按钮。
    如果没什么意外的话应该能成功激活。
knowledge is no pay,reward is kindness
0%