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,再重新导入/插入数据。

参考链接:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • MySQL 数据库常用命令 1、MySQL常用命令 create database name; 创建数据库 use...
    55lover阅读 4,770评论 1 57
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,028评论 0 19
  • 干一杯名叫寂寞的酒 周幼萍 若不是老同学事先报了一通今晚赴宴的人的名字,我压根不会,将他和那个名字对上号来。 那年...
    悠悠我心_bbe3阅读 217评论 0 2
  • 与其说回家,不如说归国。曾多次问过自己,家在哪里?父母在家在,父母不在也就没家了。不敢把自己的心情写出来,
    酝酿成熟阅读 163评论 0 0
  • 简介 云存储是在云计算(cloud computing)概念上延伸和发展出来的一个新的概念,是一种新兴的网络存储技...
    风中的大苹果Martecher阅读 448评论 0 2