美文网首页
MySQL安装配置与基本使用

MySQL安装配置与基本使用

作者: Taeyeon37 | 来源:发表于2017-09-18 13:25 被阅读0次

    环境准备

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

    参考链接:

    相关文章

      网友评论

          本文标题:MySQL安装配置与基本使用

          本文链接:https://www.haomeiwen.com/subject/kcfbsxtx.html