MySql学习笔记

一、安装

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

在windows环境变量中添加变量“MYSQL_HOME”,其值为“d:/mysql”,然后在Path中添加“%MYSQL_HOME%\bin”。在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。

 

posted @ 2020-09-25 19:42  少司命  阅读(152)  评论(0编辑  收藏  举报