# Mysql
Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational
Database Management System:关系数据库管理系统)应用软件之一。
## 安装
压缩版安装
1. mysql-5.7.4-m14-winx64.zip下载
2. 解压到D:/mysql.(路径自己指定)
3. 在D:/mysql/mysql-5.7.4-m14-winx64下新建my.ini配置文件
内容如下:
> ####################配置文件开始###################
> # For advice on how to change settings please see
> # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
> # *** default location during install, and will be replaced if you
> # *** upgrade to a newer version of MySQL.
> [client]
> default-character-set=utf8
> [mysqld]
> port=3306
> basedir ="D:/Program Files/MySQL/MySQL Server 5.7"
> datadir ="D:/Program Files/MySQL/MySQL Server 5.7/data/"
> tmpdir ="D:/Program Files/MySQL/MySQL Server 5.7/data/"
> socket ="D:/Program Files/MySQL/MySQL Server 5.7/data/mysql.sock"
> log-error="D:/Program Files/MySQL/MySQL Server 5.7/data/mysql_error.log"
> character_set_server=utf8
> init_connect='SET NAMES utf8'
> #server_id = 2
> #skip-locking
> max_connections=100
> table_open_cache=256
> query_cache_size=1M
> tmp_table_size=32M
> thread_cache_size=8
> innodb_data_home_dir="D:/Program Files/MySQL/MySQL Server 5.7/data/"
> innodb_flush_log_at_trx_commit =1
> innodb_log_buffer_size=128M
> innodb_buffer_pool_size=128M
> innodb_log_file_size=10M
> innodb_thread_concurrency=16
> innodb-autoextend-increment=1000
> join_buffer_size = 128M
> sort_buffer_size = 32M
> read_rnd_buffer_size = 32M
> max_allowed_packet = 32M
> explicit_defaults_for_timestamp=true
> sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
> #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
> ####################配置文件结束###################
4. 重点是以下配置,其中datadir的目录名称必须是:D:/Program Files/MySQL/MySQL Server 5.7。
在windows系统环境变量path,加入如下内容
D:/mysql/mysql-5.7.4-m14-winx64/bin;(注意加分号)
5. 将mysql注册为windows系统服务
具体操作是在命令行中执行以下命令(需要以管理员身份运行命令行):
增加服务命令:mysqld install MySQL --defaults-file="D:/Program Files/MySQL/MySQL Server 5.7/default.ini"
移除服务命令为:mysqld remove
6. 第5步成功后,打开系统服务管理
可以看到mysql系统服务(此处需要注意):
需要在mysql服务的登陆属性里配置管理员用户登陆(不配置从服务管理里启动报1035错误,在命令行启动报启动失败)
~~~
在命令行启动mysql命令为: net start mysql
关闭mysql命令为:net stop mysql
~~~
修改root的密码为123456
~~~
命令行执行:mysql –uroot
mysql>show databases;
mysql>use mysql;
mysql> UPDATE user SET password=PASSWORD('root') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> QUIT
~~~
新版本
`update MySQL.user set authentication_string=password('root') where user='root' ;`
**注意**
远程登陆
允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如下:
1)在本机先使用root用户登录mysql:
`命令行执行:mysql -u root -p`
输入密码(第7步中设置的密码):123456
2)进行授权操作:
`mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;`
重载授权表:
~~~
mysql>FLUSH PRIVILEGES;
退出mysql:quit..
~~~
data文件夹
5.7版本在解压后是没有data这个文件夹的,不要手动建立一个空的data文件夹,而是进入cmd,输入mysqld --initialize-insecure自动生成无密码的root用户,同时自动生成一个data文件夹,这时候再进行MySQL的安装,net start mysql,启动服务。
如果你已经安装好了MySQL,那么先删除你手动建立的data文件夹,然后再输入mysqld --initialize-insecure【如果不输入-insecure会生成随机密码,第一次登陆会出现问题】,启动服务即可
服务没有安装。
解决办法: 在 mysql bin目录下 以管理员的权限 执行 `mysqld -install`命令
然后仍然以管理员的权限` net start mysql `开启Mysql服务了。
安装版安装
注意
这里只有关键步骤截图
配置
添加环境变量
命令行操作
常见命令
mysql服务
~~~
net stop mysql
net start mysql
~~~
登陆mysql
mysql -h 主机ip -u 用户名 -p 用户密码
一般操作
Show Databases;
Use database-name
Show tables;
Select
Insert
update
delete
可视化工具
(Navicat Premium)
## Select
SELECT语句的执行的逻辑查询处理步骤:
> (8)SELECT (9)DISTINCT
> (11)<TOP_specification> <select_list>
> (1)FROM <left_table>
> (3) <join_type> JOIN <right_table>
> (2) ON <join_condition>
> (4)WHERE <where_condition>
> (5)GROUP BY <group_by_list>
> (6)WITH {CUBE | ROLLUP}
> (7)HAVING <having_condition>
> (10)ORDER BY <order_by_list>
> 每个步骤产生一个虚拟表,该虚拟表被用作下一个步骤的输入。只有最后一步生成的表返回给调用者。如
> 果没有某一子句,则跳过相应的步骤。
> 1. FROM:对FROM子句中的前两个表执行笛卡尔积,生成虚拟表VT1。
> 2. ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
> 3. OUTER(JOIN):如果指定了OUTER JOIN,保留表中未找到匹配的行将作为外部行添加到VT2,生成VT3。
> 如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到
> 处理完所有的表为止。
> 4. 对VT3应用WHERE筛选器。只有使<where_condition>为TRUE的行才被插入VT4。
> 5. GROUP BY:按GROUP BY 子句中的列列表对VT4中的行分组,生成VT5。
> 6. CUBE|ROLLUP:把超组插入VT5,生成VT6。
> 7. HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为TRUE的组才会被插入VT7。
> 8. SELECT:处理SELECT列表,产生VT8。
> 9. DISTINCT:将重复的行从VT8中移除,产生VT9。
> 10. ORDER BY:将VT9中的行按ORDER BY子句中的列列表排序,生成一个有表(VC10)。
> 11. TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回给调用者。
## where
> 操作符 描述
> = 等于
> <> 不等于
> > 大于
> > 小于
> >= 大于等于
> <= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
**注释**:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
AND 和 OR 运算符
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
# Insert
`INSERT INTO 表名称 VALUES (值1, 值2,....)`
我们也可以指定所要插入数据的列:
`INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)`
## Update
`UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值`
## Delete
`DELETE FROM 表名称 WHERE 列名称 = 值`
# 实例
## 查询
~~~
SELECT
SELECT * FROM dm_info
SELECT 查询的列 FROM 表名
SELECT name FROM dm_info
* 表示所有的列
SELECT * FROM dm_info WHERE valid =1
SELECT * FROM dm_info ORDER BY id DESC #降序
SELECT num nm,batch,name ,major FROM dm_info ORDER BY batch DESC,major DESC
SELECT * FROM dm_info WHERE `name` LIKE '祥' # _代表一个任意字符 %代表任意多个字符
模糊查询的 %key%
SELECT * FROM dm_info WHERE id <>10 #I= or <>
SELECT * FROM dm_info WHERE 4 < id<10 # 4<id and id<10
SELECT * FROM dm_info WHERE id BETWEEN 4 and 10 # 4<=id<=10
SELECT * FROM dm_info WHERE `name` LIKE "?%"
SELECT * FROM dm_info WHERE `name` LIKE "1" or 1=1 or "%" #曾" or 1=1 or `name` = "
SELECT DISTINCT major FROM dm_info #DISTINCT 去除重复的数据 --- union full union
SELECT batch FROM dm_info
SELECT COUNT(batch) FROM dm_info
SELECT AVG( batch) FROM dm_info #GROUP BY 分组
~~~
分页
~~~
SELECT * FROM dm_info ORDER BY id DESC LIMIT 0,10
SELECT * FROM dm_info LIMIT 10
#SELECT * FROM (SELECT * FROM dm_info ORDER BY id ASC LIMIT 20 ) as ttt ORDER BY id DESC LIMIT 10
SELECT * FROM dm_info WHERE id in(5,6,7,8,9)
SELECT * FROM dm_info WHERE id NOT in(5,6,7,8,9)
SELECT * FROM dm_info WHERE batch is not null
SELECT * FROM dm_info where id >14 and id<25
SELECT * FROM dm_info LIMIT 6,2
~~~
## 非查询
更新 UPDATE
~~~
UPDATE dm_info
SET `name`='1',sex='未知',batch='100'
WHERE id=10
~~~
删除 DELETE
` delete FROM dm_info WHERE id<10`
添加 insert
~~~
INSERT INTO dm_info(name,sex,) VALUES('zxy','未知')
INSERT INTO `dm_info` VALUES (DEFAULT,'zxysilent', '曾祥银', '男', 'XXYJSKX', '信息与计算科学', '汉族', '南充市', 'abddddd', true);
~~~