zoukankan      html  css  js  c++  java
  • MySql学习笔记

    一、安装

    采用免安装包,版本号:5.6.15GA,http://dev.mysql.com/downloads/mysql/5.6.html。下载到本地后,解压之,为方便后续操作,将压缩包的内容解压到“d:/mysql”目录下,此目录即为本机上该mysql实例的主目录。

    在windows环境变量中添加变量“MYSQL_HOME”,其值为“d:/mysql”,然后在Path中添加“%MYSQL_HOME%in”。在MySql主目录(即d:/mysql)下创建my.ini文件,其内容如下:

    [client]
    port = 3306
    default-character-set = utf8
     
     
    [mysqld]
    port = 3306
    character_set_server = utf8
    basedir = d:/mysql
    datadir = d:/mysql/data
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

    准备工作至此完成,下面开始正式的安装。

     1. 以超级管理员身份运行cmd;

        2. 将cmd的当前工作目录切换到d:/mysql/bin;

        3. 运行以下命令:mysqld --install;

    安装完成。

    在命令行下,使用“net start mysql”、“net stop mysql”来打开或关闭mysql服务。在“d:/mysql/bin”目录下使用超级管理员身份运行cmd,使用“mysqld --remove”来卸载mysql。

    注意事项,在安装过程中的第3步,不要再像网上其他人所说的使用“mysqld intall MySql --default-file="d:/mysql/my-default.ini"”或者“mysqld intall MySql --default-file="d:/mysql/my.ini"”来安装MySql了,如果这样做,会在后学的启动MySql服务时报1067错误的!

    [2016.01.14更新] MySQL 5.7以上版本的配置和以前有所不同,需要对数据库进行初始化,步骤如下:

    ①. 执行完第2步之后

    ②. mysqld --initialize --user=mysql --console (注意必须以管理员身份打开cmd,否则报错),在控制台消息尾部会出现随机生成的初始密码,记下来;因为有特殊字符,很容易记错,最好把整个消息保存在记事本里;

    ③. 正常执行上面的第3步;

    ④. 启动MySQL并修改密码

    在CMD控制台里执行命令  mysql -u root -p

    回车执行后,输入刚才记录的随机密码

    执行成功后,控制台显示 mysql>,则表示进入mysql

    输入命令set password for root@localhost = password('123'); (注意分号),此时root用户的密码修改为123。

    二、MySQL中的数据类型

    2.1 概览

    MySQL中有三大数据类型,分别是:数字、日期/时间、字符串,这三大类型中又更细致的划分了许多子类型:
    (1)数字类型

    • 整形:tinyint、smallint、mediumint、int、bigint
    • 浮点型:float、double、real、decimal

    (2)日期/时间:date、time、datetime、timestamp、year
    (3)字符串

    • 字符串:char、varchar
    • 文本:tinytext、text、mediumtext、longtext
    • 二进制(可用来存储图片、音乐等):tinyblob、blob、mediumblob、longblob

    2.2 MySQL中数据类型详述

    1、整型

    • tinyint(m) 1个字节  范围(-128~127)
    • smallint(m) 2个字节  范围(-32768~32767)
    • mediumint(m) 3个字节  范围(-8388608~8388607)
    • int(m) 4个字节  范围(-2147483648~2147483647)
    • bigint(m) 8个字节  范围(+-9.22*10的18次方)

    取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。 int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个m有什么用。

    2、浮点型(float和double)

    • float(m,d) 单精度浮点型    8位精度(4字节)     m总个数,d小数位
    • double(m,d) 双精度浮点型    16位精度(8字节)    m总个数,d小数位

    设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。

    3、定点数

    浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。

    4、字符串(char,varchar,_text)

    • char(n) 固定长度,最多255个字符
    • varchar(n) 固定长度,最多65535个字符
    • tinytext 可变长度,最多255个字符
    • text 可变长度,最多65535个字符
    • mediumtext 可变长度,最多2的24次方-1个字符
    • longtext 可变长度,最多2的32次方-1个字符

    char和varchar:

    ① char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。 

    ② char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。 

    ③ char类型的字符串检索速度要比varchar类型的快。

    varchar和text: 

    ① varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。 

    ② text类型不能有默认值。 

    ③ varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

    5、二进制数据(_Blob)

    ① _BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。 

    ② _BLOB存储的数据只能整体读出。 

    ③ _TEXT可以指定字符集,_BLO不用指定字符集。

    6、日期时间类型

    • date 日期 '2008-12-2'
    • time 时间 '12:25:36'
    • datetime 日期时间 '2008-12-2 22:06:44'
    • timestamp 自动存储记录修改时间

    若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

    数据类型的属性

    • NULL 数据列可包含NULL值
    • NOT NULL 数据列不允许包含NULL值
    • DEFAULT 默认值
    • PRIMARY KEY 主键
    • AUTO_INCREMENT 自动递增,适用于整数类型
    • UNSIGNED 无符号
    • CHARACTER SET name 指定一个字符集

    三、使用MySQL数据库

    3.1 登录到MySQL

    当 MySQL 服务已经运行时,我们可以通过MySQL自带的客户端工具登录到MySQL数据库中。首先打开命令提示符,输入以下格式的命令:mysql -h 主机名 -u 用户名 -p。其中: 
    -h:该命令用于指定客户端所要登录的MySQL主机名,登录当前机器该参数可以省略;
    -u:所要登录的用户名;
    -p:告诉服务器将会使用一个密码来登录,如果所要登录的用户名密码为空,可以忽略此选项。
    登录刚刚安装在本机的MySQL数据库为例,在命令行下输入“mysql -u root -p”按回车确认,如果安装正确且MySQL正在运行,会得到以下响应:Enter password: 
    若密码存在,输入密码登录,不存在则直接按回车登录,按照本文中的安装方法,默认root账号是无密码的,登录成功后你将会看到“Welecome to the MySQL monitor... ”的提示语。
    然后命令提示符会一直以mysql>加一个闪烁的光标等待命令的输入, 输入exit或quit退出登录。

    3.2 创建一个数据库

    使用“create database”语句可完成对数据库的创建,创建命令的格式如下:create database 数据库名 [其他选项]; 

    例如我们需要创建一个名为samp_db的数据库,在命令行下执行以下命令:create database samp_db character set gbk; 

    为了便于在命令提示符下显示中文,在创建时通过“character set gbk”将数据库字符编码指定为gbk。创建成功时会得到“Query OK, 1 row affected(0.02 sec)”的响应。 

    注意:MySQL语句以分号(;)作为语句的结束,若在语句结尾不添加分号时,命令提示符会以“->”提示你继续输入(有个别特例,但加分号是一定不会错的)。

    可以使用“show databases;”命令查看已经创建了哪些数据库。

    删除数据库:drop database 数据库名;


    3.3 选择所要操作的数据库

    要对一个数据库进行操作,必须先选择该数据库,否则会提示错误:ERROR 1046(3D000): No database selected

    有两种方式对数据库进行使用的选择: 

    (1)在登录数据库时指定,命令“mysql -D 所选择的数据库名 -h 主机名 -u 用户名 -p”,例如登录时选择刚刚创建的数据库:mysql -D samp_db -u root -p。

    (2)在登录后使用 use 语句指定, 命令: use 数据库名;use 语句可以不加分号, 执行 use samp_db 来选择刚刚创建的数据库, 选择成功后会提示: Database changed

    3.4 查询、创建、删除、授权用户

    查询用户

    在mysql里进mysql库: mysql>use mysql;

    然后select user表:mysql>select * from user; 或者  select   *   from   mysql.user; 

    创建用户

    在mysql的user表中增加连接用户帐号,这里不要直接使用INSERT语句添加user记录,使用INSERT可能出现:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 错误。那么就不用insert了,换种方法:GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

    • “username”替换为将要授权的用户名,比如clientusr; 
    • “password”替换为clientusr设置的密码; 
    • locaohost可以改为%,方便你从别的IP登录。

    删除用户

    在mysql里进mysql库:mysql>use mysql;

    然后对user表进行删除记录的操作即可,例如删除用户“Jack”:delete from user where user="Jack";

    对用户授权

    将某个数据库的所有权限授予给某用户:grant all on db_name.* to username@localhost identified by 'password';


    3.5 表操作

    创建表时指定自动增长列

    create table users(
      id int primary key not null auto_increment,
      name varchar(100) not null
    );

    即指定“auto_increment”关键字,id列自增长从1开始且步长也为1。可以使用“set @@auto_increment_increment=n"来设置步长,需要注意的是:

    ① 从设置开始,新建立的自增长列都以此步长为准,除非再显式的设置,而原先的自增列以原先的步长继续增长;
    ② 重启MySql后,设置值失效。

    假如users表的id字段创建时没有指定自增长,则可以像如下代码那样修改之:alter table users modify id int auto_increment;


    创建外键关联的表

    外键、多主键

    create table orders(
        id int auto_increment,
        userId int ,
        totalPrice float(7,2) default 0 not null,
        orderDate datetime not null,
        primary key(id, userId),
        foreign key (userId) references users(id)
    );

    四、MySQL高级应用

    4.1 分页

    SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 

    LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数,参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)

    为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

    mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 

    //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: 
    mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. 

    //如果只给定一个参数,它表示返回最大的记录行数目: 
    mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行 

    //换句话说,LIMIT n 等价于 LIMIT 0,n。
  • 相关阅读:
    Win7升Windows10有获取通知,但是就不推送的解决方法
    使用git@osc管理现有项目
    暗黑符文之语1.10
    springcloud干活之服务消费者(feign)
    springcloud干货之服务消费者(ribbon)
    springcloud干货之服务注册与发现(Eureka)
    java对redis的基本操作
    微信公众号开发模式中文乱码
    Java 验证代理ip
    maven将项目及第三方jar打成一个jar包
  • 原文地址:https://www.cnblogs.com/itfky/p/13732067.html
Copyright © 2011-2022 走看看