//安装mysql5.7解压版
1. 解压
2. 设置环境变量
PATH中加入mysql的bin路径
3. 修改my-default.ini
[mysqld] basedir = D:\MySQL\Server\mysql-5.6.20-win32 datadir = D:\MySQL\Server\data port = 3306
4. 安装mysql服务 在bin下执行:
D:\MySQL\Server\mysql-5.6.20-win32\bin>mysqld -install Service successfully installed.
4. 卸载mysql服务
D:\MySQL\Server\mysql-5.6.20-win32\bin>mysqld -remove
//MySQL管理
//启动及关闭MySQL
启动mysql服务
若在myql目录中没有data文件夹,则会启动失败,需要在bin中执行:
mysqld --initialize-insecure --user=mysql
会自动创建data文件夹,现在可以启动mysql服务:
net start mysql
登录mysql:
mysql -u root -p
默认密码为空
添加密码:
mysqladmin -u root password "new_password"
或通过mysql语句更改本用户密码
set password = password("new_password");
关闭mysql服务
mysqladmin -u root -p shutdown
或
net stop mysql
//用户设置
创建用户
CREATE USER ‘username‘@‘host‘ IDENTIFIED BY ‘password‘;
说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.
注意:%为任意远程主机,localhost和127.0.0.1权限不一样
例子: CREATE USER ‘dog‘@‘localhost‘ IDENTIFIED BY ‘123456‘;
CREATE USER ‘pig‘@‘192.168.1.101_‘ IDENDIFIED BY ‘123456‘;
CREATE USER ‘pig‘@‘%‘ IDENTIFIED BY ‘123456‘;
CREATE USER ‘pig‘@‘%‘ IDENTIFIED BY ‘‘;
CREATE USER ‘pig‘@‘%‘;
授权
GRANT privileges ON databasename.tablename TO ‘username‘@‘host‘
说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO ‘username‘@‘host‘ WITH GRANT OPTION;
设置与更改用户密码
SET PASSWORD FOR ‘username‘@‘host‘ = PASSWORD(‘newpassword‘);如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword");
例子: SET PASSWORD FOR ‘pig‘@‘%‘ = PASSWORD("123456");
撤销用户权限
REVOKE privilege ON databasename.tablename FROM ‘username‘@‘host‘;
注意: 假如你在给用户‘pig‘@‘%‘授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO ‘pig‘@‘%‘, 则在使用REVOKE SELECT ON *.* FROM ‘pig‘@‘%‘;命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON *.* TO ‘pig‘@‘%‘;则REVOKE SELECT ON test.user FROM ‘pig‘@‘%‘;命令也不能撤销该用户对test数据库中user表的Select 权限.
删除用户:
DROP USER ‘username‘@‘host‘;
重新载入授权表:
FLUSH PRIVILEGES;
在 mysql 数据库中的 user 表添加新用户:
INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES (‘localhost‘, ‘guest‘,
PASSWORD(‘guest123‘), ‘Y‘, ‘Y‘, ‘Y‘);
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string
通过GRANT命令添加用户并添加权限:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO ‘zara‘@‘localhost‘
-> IDENTIFIED BY ‘zara123‘;
示例:
mysql > create database example default character set utf8;
mysql > create user ‘server‘@‘%‘ identified by ‘example‘;
mysql > grant all on example.* to ‘server‘@‘%‘ identified by ‘example‘;
mysql > use example;
mysql > CREATE TABLE `User` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`userName` varchar(50) NOT NULL DEFAULT ‘‘,
`userPassword` varchar(50) NOT NULL DEFAULT ‘‘,
`userDesc` varchar(100) NOT NULL DEFAULT ‘‘,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql > INSERT INTO `User` (`userName`, `userPassword`, `userDesc`) VALUES
(‘test_user‘, ‘test_password‘, ‘Test user for server example‘);
//管理MySQL的常用命令
mysqladmin -u root -p create <database>; //创建数据库
mysqladmin -u root -p drop <database>; //删除数据库
CREATE database example default character set utf8; //创建数据库
USE <数据库名>; //选择要操作的数据库,以后的MySQL命令都只针对该数据库
SHOW DATABASES; //列出MySQL数据库管理系统所管理的数据库列表
SHOW TABLES; //列出指定数据库中的所有表,需要先使用use 数据库
SHOW INDEX FROM <数据表>; //显示数据表的详细索引信息,包括PRIMARY KEY(主键)
SHOW COLUMNS FROM <数据表>; //显示数据表的详细列头信息
SHOW TABLE STATUS FROM <数据库> LIKE ‘需要匹配的字符串‘\G; //该命令将输出Mysql数据库管理系统的性能及统计信息
CREATE TABLE table_name (column_name column_type); //创建数据表
SHOW PROCESSLIST; //显示数据库连接线程列表
SHOW CREATE TABLE table_name; //显示表信息
SHOW VARIABLES LIKE ‘%character%‘; //显示字符集编码信息
实例:
mysql> CREATE TABLE runoob_tbl(-> runoob_id INT NOT NULL AUTO_INCREMENT,-> runoob_title VARCHAR(100) NOT NULL,-> runoob_author VARCHAR(40) NOT NULL,-> submission_date DATE,-> PRIMARY KEY ( runoob_id )-> ) ENGINE=InnoDB DEFAULT CHARSET = utf8;Query OK, 0 rows affected (0.16 sec)
DROP TABLE table_name; //删除数据表
INSERT INTO table_name (field1, field2, ... fieldN) VALUES (value1, value2, ...valueN); //插入数据
SELECT column_name, column_name FROM table_name [WHERE Clause] [OFFSET M] [LIMIT N]; //查询数据
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]; //更新数据
DELETE FROM table_name [WHERE Clause]; //删除数据
SELECT field1, field2, ... fieldN table_name1, table_name2,... table_nameN WHERE field1 LIKE condition1; //where从句中like和%的使用
SELECT field1, field2, ...fieldN table_name1, table_name2, ...table_nameN ORDER BY field1, [field2...] ASC [DESC]
//排序
set names utf8; //设置为utf8编码
SET sql_mode=‘NO_AUTO_VALUE_ON_ZERO‘; //设置AUTO_INCREMENT的值从0开始
//GROUP BY语法,在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
实例:
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
mysql> SELECT coalesce(name, ‘总数‘), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
//MySQL连接的使用
//使用INNER JOIN
例:SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
等价于:SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
//使用LEFT JOIN
例:SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
//使用RIGHT JOIN
例:SELECT b.runoob_id, b.runoob_author, a.runoob_count FROM tcount_tbl a RIGHT JOIN runoob_tbl b ON a.runoob_author = b.runoob_author;
//使用NULL
必须使用IS NULL,或IS NOT NULL,或<=>用于比较两个NULL
//MySQL正则表达式
MySQL中使用 REGEXP 操作符来进行正则表达式匹配。
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n‘ 或 ‘\r‘ 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n‘ 或 ‘\r‘ 之前的位置。 |
. | 匹配除 "\n" 之外的任何单个字符。要匹配包括 ‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。 |
[...] | 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]‘ 可以匹配 "plain" 中的 ‘a‘。 |
[^...] | 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]‘ 可以匹配 "plain" 中的‘p‘。 |
p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,‘z|food‘ 能匹配 "z" 或 "food"。‘(z|f)ood‘ 则匹配 "zood" 或 "food"。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,‘zo+‘ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}‘ 不能匹配 "Bob" 中的 ‘o‘,但是能匹配 "food" 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
//MySQL事务
1,开始一个事务
start transaction
2, 做保存点
savepoint 保存点名称
3, 操作
4,可以回滚,可以提交,没有问题,就提交,有问题就回滚。
例:
SET AUTOCOMMIT = 0; //设置为不自动提交,因为MYSQL默认立即执行
BEGIN; //开始事务定义
...; //操作
ROLLBACK; //有问题回滚
COMMIT; //成功则执行事务
//MySQL的ALTER命令
//添加删除表字段
ALTER TABLE testalter_tbl DROP i; //删除i字段,不能删除最后一个字段
ALTER TABLE testalter_tbl ADD i INT; //增加i字段并定义类型
ALTER TABLE testalter_tbl ADD i INT FIRST; //使用MySQL提供的关键字 FIRST (设定位第一列)
ALTER TABLE testalter_tbl ADD i INT AFTER c; //AFTER 字段名(设定位于某个字段之后)
//修改字段类型和名称
ALTER TABLE testalter_tbl MODIFY c CHAR(10); //把字段 c 的类型从 CHAR(1) 改为 CHAR(10)
ALTER TABLE testalter_tbl CHANGE i j BIGINT; //把字段i名称改为j,并将类型改为BIGINT
ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100; //指定字段 j 为 NOT NULL 且默认值为100,若不指定默认值为NULL
//修改字段默认值
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; //使用 ALTER 来修改字段的默认值
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT; //使用 ALTER 命令及 DROP子句来删除字段的默认值
//修改表名
ALTER TABLE testalter_tbl RENAME TO alter_tbl; //将数据表 testalter_tbl 重命名为 alter_tbl
//MySQL创建索引
//普通索引
CREATE INDEX indexName ON tableName(columnName(length)); //创建索引,方法1
ALTER TABLE tableName ADD INDEX indexName(columnName(length)); //修改表结构,方法2
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length))); //创建表时直接指定,方法3
DROP INDEX indexName ON tableName; //删除索引
//唯一索引
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list); //添加一个主键,要确保主键不为NULL
CREATE UNIQUE INDEX indexName ON mytable(username(length)); //创建索引,方法1
ALTER table mytable ADD UNIQUE [indexName] (username(length)); //修改表结构,方法2
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length))); //创建表时指定,方法3
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list); //添加全文索引
ALTER TABLE tbl_name DROP INDEX (column_list); //删除索引
ALTER TABLE tbl_name DROP PRIMARY KEY; //删除主键
SHOW INDEX FROM tableName\G; //显示索引信息
//MySQL临时表
CREATE TEMPORARY TABLE tableName (...); //创建临时表
删除临时表与删除其他表一样,但show tables不能显示临时表
//MySQL复制表
SHOW CREATE TABLE runoob_tbl \G; //获取创建数据表(CREATE TABLE) 语句
复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。
INSERT INTO ... SELECT... 语句来实现复制表的内容
mysql> INSERT INTO clone_tbl (runoob_id,-> runoob_title,-> runoob_author,-> submission_date)-> SELECT runoob_id,runoob_title,-> runoob_author,submission_date -> FROM runoob_tbl;
//获取服务器元数据
SELECT VERSION(); //服务器版本信息
SELECT DATABASE(); //当前数据库名
SELECT USER(); //当前用户名
SHOW STATUS; //服务器状态
SHOW VARIABLES; //服务器配置变量
//MySQL序列使用
使用AUTO_INCREMENT定义列
LAST_INSERT_ID() //获取最后的插入表中的自增的值的函数
重置序列:
mysql> ALTER TABLE insect DROP id; mysql> ALTER TABLE insect -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,-> ADD PRIMARY KEY (id);
设置序列的开始值:
mysql> ALTER TABLE t AUTO_INCREMENT = 100;
或者在创建时直接AUTO_INCREMENT = 100
//MySQL处理重复数据
防止表中出现重复数据
防止重复插入:
INSERT IGNORE INTO
REPLACE INTO
设置唯一索引:
CREATE TABLE person_tbl ( first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10) UNIQUE (last_name, first_name));
统计重复数据:
mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;
过滤重复数据:
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl -> ORDER BY last_name;
或使用GROUP BY来读取
删除重复数据:
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex -> FROM person_tbl;-> GROUP BY (last_name, first_name); mysql> DROP TABLE person_tbl; mysql> ALTER TABLE tmp RENAME TO person_tbl;
或者通过添加主键/索引的方法:
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);
//MySQL导出数据
使用SELECT ... INTO OUTFILE ...语句导出数据
mysql> SELECT * FROM runoob_tbl -> INTO OUTFILE ‘/tmp/tutorials.txt‘;
指定格式,如CSV格式:
mysql> SELECT * FROM passwd INTO OUTFILE ‘/tmp/tutorials.txt‘-> FIELDS TERMINATED BY ‘,‘ ENCLOSED BY ‘"‘-> LINES TERMINATED BY ‘\r\n‘;
或
SELECT a,b,a+b INTO OUTFILE ‘/tmp/result.text‘ FIELDS TERMINATED BY ‘,‘ OPTIONALLY ENCLOSED BY ‘"‘ LINES TERMINATED BY ‘\n‘ FROM test_table;
使用LOAD DATA INFILE可以将文件读回数据库
导出表作为原始数据:
mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。
$ mysqldump -u root -p --no-create-info --tab=/tmp RUNOOB runoob_tbl password ******
导出SQL格式的数据:
$ mysqldump -u root -p RUNOOB runoob_tbl > dump.txt password ******
导出整个数据库:
$ mysqldump -u root -p RUNOOB > database_dump.txt password ******
导出所有数据库:
$ mysqldump -u root -p --all-databases > database_dump.txt password ******
将数据库拷贝到其他主机:
$ mysqldump -u root -p database_name table_name > dump.txt password *****
$ mysql -u root -p database_name < dump.txt password *****
你也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:</p> $ mysqldump -u root -p database_name | mysql -h other-host.com database_name
//MySQL导入数据
使用LOAD DATA导入数据
mysql> LOAD DATA LOCAL INFILE ‘dump.txt‘ INTO TABLE mytbl;
如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件。
指定FIELDS和LINES
mysql> LOAD DATA LOCAL INFILE ‘dump.txt‘ INTO TABLE mytbl -> FIELDS TERMINATED BY ‘:‘-> LINES TERMINATED BY ‘\r\n‘;
指定顺序
mysql> LOAD DATA LOCAL INFILE ‘dump.txt‘-> INTO TABLE mytbl (b, c, a);
使用mysqlimport导入数据
$ mysqlimport -u root -p --local --fields-terminated-by=":" --lines-terminated-by="\r\n" database_name dump.txt password *****
使用 --columns 选项来设置列的顺序
$ mysqlimport -u root -p --local --columns=b,c,a database_name dump.txt password *****
mysqlimport的常用选项介绍
选项 | 功能 |
---|---|
-d or --delete | 新数据导入数据表中之前删除数据数据表中的所有信息 |
-f or --force | 不管是否遇到错误,mysqlimport将强制继续插入数据 |
-i or --ignore | mysqlimport跳过或者忽略那些有相同唯一 关键字的行, 导入文件中的数据将被忽略。 |
-l or -lock-tables | 数据被插入之前锁住表,这样就防止了, 你在更新数据库时,用户的查询和更新受到影响。 |
-r or -replace | 这个选项与-i选项的作用相反;此选项将替代 表中有相同唯一关键字的记录。 |
--fields-enclosed- by= char | 指定文本文件中数据的记录时以什么括起的, 很多情况下 数据以双引号括起。 默认的情况下数据是没有被字符括起的。 |
--fields-terminated- by=char | 指定各个数据的值之间的分隔符,在句号分隔的文件中, 分隔符是句号。您可以用此选项指定数据之间的分隔符。 默认的分隔符是跳格符(Tab) |
--lines-terminated- by=str | 此选项指定文本文件中行与行之间数据的分隔字符串 或者字符。 默认的情况下mysqlimport以newline为行分隔符。 您可以选择用一个字符串来替代一个单个的字符: 一个新行或者一个回车。 |
SQL数据类型
INTEGER或INT | 通常为32位整数 |
SMALLINT | 通常为16位整数 |
NUMERIC(m, n), DECIMAL(m, n) 或 DEC(m, n) | m位长的定点十进制数,其中小数点后为n位 |
FLOAT(n) | 运算精度为n位二进制数的浮点数 |
REAL | 通常为32位浮点数 |
DOUBLE | 通常为64位浮点数 |
CHARACTER(n)或CHAR(n) | 固定长度为n的字符串 |
VARCHAR(n) | 最大长度为n的字符串 |
BOOLEAN | 布尔值 |
DATE | 日历日期 |
TIME | 当前时间 |
TIMESTAMP | 当前日期和时间 |
BLOB | 二进制大对象 |
CLOB | 字符大对象 |
//增加外键约束
CREATE TABLE property (
id int(11) NOT NULL AUTO_INCREMENT,
cid int(11) DEFAULT NULL,
name varchar(255) DEFAULT NULL,
PRIMARY KEY (id),
CONSTRAINT fk_property_category FOREIGN KEY (cid) REFERENCES category (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
或者
CREATE TABLE property (
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
cid int(11) DEFAULT NULL FOREIGN KEY REFERENCES category (id),
name varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表创建好后再加约束
ALTER TABLE 表名 ADD CONSTRAINT fk_字段名 FOREIGN KEY (字段名) REFERENCES 关联的表名(关联的字段名)