MySQL安装配置与基本使用

环境准备

OS: Windows 10
MySQL: MySQL Community Server 5.7.19, 64-bit, ZIP Archive

安装配置

  1. 配置默认文件(可选)。解决乱码等问题。在MySQL安装根目录新建my.ini替换掉my-default.ini。
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=D:\mysql-5.7.19-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql-5.7.19-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

替换'D:\mysql-5.7.19-winx64'内容,不能手动建立data文件夹。

  1. 安装服务。以管理员身份运行cmd.exe(C:\Windows\System32\cmd.exe),进入cd %MYSQL_HOME%\bin,执行命令mysqld install,屏幕显示Service successfully installed。删除服务: mysqld remove
  2. 初始化。开启服务时报'mysql服务无法启动 服务没有报告任何错误',说明还没有初始化。在bin目录下执行mysqld --initialize-insecure(不设置root密码,建议使用)。第一次执行这个命令等待的时间会稍微长了一些,并且控制台没有任何返回结果。mysql根目录下会多出一个里面有内容的data文件夹。
  3. 启动。net start mysql。关闭服务使用net stop mysql
  4. 登录。mysql -u root -p。默认是没有密码的,直接回车进入。如果出现'ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)',原因是新版的mysql为了安全性,默认是有密码的。密码文件直接写在 log-error 日志文件中,放在 root/.mysql_secret 文件里。登录时需要用随机密码登录。
  5. 设置密码。登录后执行SET PASSWORD = PASSWORD('new password');,重置密码成功。也可以在未登录状态下执行mysqladmin -u root -p password 'new password'
  6. 设置环境变量(可选)。如果不想每次执行命令都切换到'%MYSQL_HOME%\bin'目录,把bin目录加入到path env下。

基本使用

对数据库进行增删改查结束后,执行exit退出数据库,直接关闭cmd窗口是没有退出的,要输入exit才会退出。同样的,mysql service还是在运行中,如果你确认今天不使用mysql了,执行net stop mysql停止服务,不然一直等到关机后才会关闭服务。
'[]'表示可选,'<>'表示参数。

连接Mysql

mysql [-h<主机地址>] -u<用户名> -p[<用户密码>]。

修改密码

mysqladmin -u<用户名> [-p<旧密码>] password <新密码>。例如,给root新增密码mysqladmin -u root -password ab12,修改密码mysqladmin -u root -p ab12 password cd34

PS: 和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符。命令大小写都可以。

增加新用户

GRANT 权限 ON 数据库.* TO 用户名@登录主机 IDENTIFIED BY '密码';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON test_db.* TO gdd@localhost IDENTIFIED BY 'gdddb';

显示数据库

show databases;(注意:最后有个s)

为了避免显示乱码,修改数据库默认编码(如果之前未在配置文件中配置)。以下以UTF-8编码页面为例进行说明:

  1. 修改MYSQL的配置文件:my.ini里面修改default-character-set=utf8
  2. 代码运行时修改:
    ①Java代码:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
    ②PHP代码:header("Content-Type:text/html;charset=utf8");
    ③C语言代码:int mysql_set_character_set( MYSQL * mysql, char * csname);
    该函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与SET NAMES语句类似,但它还能设置mysql -> charset的值,从而影响了由mysql_real_escape_string() 设置的字符集。

创建数据库

create database <数据库名>;

删除数据库

drop database <数据库名>;

  • 删除一个已经确定存在的数据库。mysql> drop database test_db;
  • 删除一个不确定存在的数据库。mysql> drop database if exists test_db;

连接数据库

use <数据库名>;
use 语句告诉MySQL把db_name数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到发布一个不同的USE语句。使用USE语句为一个特定的当前的数据库做标记,不会阻碍访问其它数据库中的表。

查看相关信息

MySQL中SELECT命令类似于其他编程语言里的print或者write,你可以用它来显示一个字符串、数字、数学表达式的结果等等。

  1. 显示当前选择的数据库select database();
  2. 显示MySQL的版本select version();
  3. 显示当前时间select now();
  4. 显示年月日select current_date;、显示日SELECT DAYOFMONTH(CURRENT_DATE);、显示月SELECT MONTH(CURRENT_DATE);、显示年SELECT YEAR(CURRENT_DATE);
  5. 显示字符串select "welecome to my blog!";
  6. 计算select ((4 * 4) / 10 ) + 25;
  7. 串接字符串,使用CONCAT()函数select CONCAT(f_name, " ", l_name) AS Name from employee_data where title = 'Marketing Executive';

查看该数据库下所有表

show tables;

显示数据表的结构

describe 表名;

创建数据表

create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);

CREATE TABLE TEST_TABLE
(
   ID        INT(2)         NOT NULL,
   NAME      VARCHAR(32)    NOT NULL,
   SCORE     DOUBLE(8,2)    NOT NULL,
   CONSTRAINT PK_TEST_DB PRIMARY KEY (ID)
);

增加注释

  • 给表增加注释。COMMENT ON TABLE <表名> IS 'Comment';
  • 给表中一列增加注释。COMMENT ON COLUMN <表名>.<字段> IS 'Comment';

增加唯一索引

CREATE UNIQUE INDEX 索引名 on 表名(字段1,字段2);

增加主键

alter table 表名 add primary key (字段);

删除数据表

drop table <表名>

向表中插入数据

insert into <表名> [( <字段1>[,..<字段n > ])] values ( 值1 )[, ( 值n )]

insert into test_table values(1,'Guo',96.45),(2,'Gordon',82.99), (3,'Zhang', 91.59);

查询表中的数据

select <字段1,字段2,...> from <表名> where <表达式>

  • 查询所有行select * from test_table;
  • 查询前几行数据select * from test_table order by id limit 0,2;

删除数据

delete from <表名> where <表达式>;

修改表中数据

update <表名> set <字段>=<新值>,… where <条件>;update test_table set name='Mary' where id=3;

增加或修改字段

alter table <表名> add/modify <字段 类型 其他>;alter table test_table add passtest int(4)

修改表名

rename table 原表名 to 新表名;
当执行 RENAME 时,不能有任何锁定的表或活动的事务。同样也必须有对原初表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限。如果在多表更名中,MySQL 遭遇到任何错误,它将对所有被更名的表进行倒退更名,即回滚。

导出和导入数据库

  1. 导出。mysqldump -u用户名 -p密码 --databases 数据库名 > 导出文件名。导出文件在当前目录生成。
    mysqldump -uroot -p123456 --databases dbname > mysql.dump
  2. 导入。mysqlimport -uroot -p123456 < mysql.dump

删除与清空表区别

测试: 建一个带有自增字段的表,加入100万数据,然后分别用TRUNCATE和DELETE删除全部数据,再向表里插入一条数据。
结果: TRUNCATE TABLE是非常快的,TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值。

  1. truncate和delete只删除数据记录不删除结构定义;drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index)。
  2. delete是DML,这个操作会放到rollback segement中,事务提交之后才生效,如果有相应的trigger,执行的时候将被触发;truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚, 操作不触发trigger。
  3. delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不动;drop语句将表所占用的空间全部释放;truncate语句缺省情况下会把空间释放到minextents,除非使用reuse storage,truncate会将高水线复位(回到最开始)。
  4. 速度:drop>truncate>delete
  5. 安全性: drop和truncate没有备份(慎重使用);如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

参考链接:

  • W3school
  • 菜鸟教程
  • http://www.cnblogs.com/zhangzhu/archive/2013/07/04/3172486.html

你可能感兴趣的:(MySQL安装配置与基本使用)