MySql教程

MySQL基础1

本文主要是介绍MySQL基础1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

MySQL学习1

对于数据库的一些理解

  1. 将数据放到表中,表再放到库中;
  2. 一个数据库中可以有多个表,每一个表都有一个名字,用于标识自己。表明具有唯一性。
  3. 表具有一些特性,这些特性定义了数据在表中如何储存,相当于Java的“类”的设计。
  4. 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列就相当于Java中“类”的“属性”
  5. 表中的数据是按行存储的,每一行相当于对该表进行了实例化,就类似与Java中的对象的概念。

综上所述,可以总结为:表 对应 类,列 对应 类中定义的属性,行 对应 类实例化出来的对象

MySQL8.0的安装

  1. 下载地址https://dev.mysql.com/downloads/mysql/

  2. 先以Windows系统下安装MySQL为例:下载完以后解压到某一个路径,注意路径名不能含中文

  3. 在该路径下创建一个文件,命名为my.ini

  4. 用txt打开my.ini,复制以下代码:

    [mysqld]
    # 设置3306端口
    port=3306
    # 设置mysql的安装目录   ----------是你的文件路径-------------
    basedir=D:\rj\mysql-8.0.26-winx64
    # 设置mysql数据库的数据的存放目录  ---------是你的文件路径data文件夹自行创建
    datadir=D:\rj\mysql-8.0.26-winx64\data
    # 允许最大连接数
    max_connections=200
    # 允许连接失败的次数。
    max_connect_errors=10
    # 服务端使用的字符集默认为utf8mb4
    character-set-server=utf8mb4
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 默认使用“mysql_native_password”插件认证
    #mysql_native_password
    default_authentication_plugin=mysql_native_password
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8mb4
    [client]
    # 设置mysql客户端连接服务端时默认使用的端口
    port=3306
    default-character-set=utf8mb4
    
    
    

    安装目录和数据存放目录根据自己安装的路径设置。注意:有的时候会出现不能初始化数据库的情况,在cmd窗口会打印类似这种的

    D:\rj\mysql-8.0.26-winx64\bin>mysqld --initialize --console
    j\mysql-8.0.26-winx64\data\is_writable' (OS errno 2 - No such file or directory)
    2021-08-18T19:23:17.078781Z 0 [System] [MY-013169] [Server] D:\rj\mysql-8.0.26-winx64\bin\mysqld.exe (mysqld 8.0.26) initializing of server in progress as process 8992
    2021-08-18T19:23:17.078919Z 0 [ERROR] [MY-010338] [Server] Can't find error-message file 'D:\rj\mysql-8.0.26-winx64\bin\j\mysql-8.0.26-winx64\share\errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.
    2021-08-18T19:23:17.081749Z 0 [ERROR] [MY-010460] [Server] --initialize specified but the data directory exists and is not writable. Aborting.
    j\mysql-8.0.26-winx64\data\ is unusable. You can remove all files that the server added to it.
    2021-08-18T19:23:17.124013Z 0 [ERROR] [MY-010119] [Server] Aborting
    2021-08-18T19:23:17.128517Z 0 [System] [MY-010910] [Server] D:\rj\mysql-8.0.26-winx64\bin\mysqld.exe: Shutdown complete (mysqld 8.0.26)  MySQL Community Server - GPL.
    
    

    大概就是找不到文件路径的意思,解决方法是把my.ini中mysql的安装目录和数据存放目录的路径的第一个 ,也就是盘符后面的 \ 改成 \\ ,比如basedir=D:\rj\mysql-8.0.26-winx64 改为 basedir=D:\\rj\mysql-8.0.26-winx64

    datadir=D:\rj\mysql-8.0.26-winx64\data 改为 datadir=D:\\rj\mysql-8.0.26-winx64\data

    或者把路径用双引号“ ”包起来也可以。

  5. 修改环境变量:

    1. 在系统变量那里新建一个名为 MYSQL_HOME 的变量,把mysql的安装路径复制到变量值里;
    2. 再编辑Path变量,添加 %MYSQL_HOME% 变量,再添加 %MYSQL_HOME%\bin 即可。
    3. 这样在初始化mysql之后,便不用在输入mysql的路径再启动mysql了。没有试过在初始化的时候不输入路径能否成功,可以试试。
  6. 管理员运行cmd,跳转到安装mysql的盘符,比如我这是D盘

  7. 进入mysql路径下的bin目录

  8. 输入mysqld --install安装mysql

  9. 输入mysqld --initialize --console 初始化mysql

    ,初始化完成后,会在命令符窗口中会打印出一些关于mysql的版本以及启动时间等数据,以及最重要的mysql 的root权限的初始密码,它在这条里:[Server] A temporary password is generated for root@localhost: +f-i(u7O5gem ,其中的+f-i(u7O5gem 就是我的mysql的初始密码。

  10. 接下来就要启动mysql服务,启动后才能进行登陆操作,登陆管理员账号才能修改密码,输入命令:net start mysql ,启动mysql服务

  11. 接下来就是修改密码:

    1. 首先登陆mysql的root账号,命令符为: mysql -h 数据库服务器地址 -u root -p ,如果数据库在本机可以省略 -h 数据库服务地址 ,没必要写localhost或者127.0.0.1什么的。

    2. 输入你的初始密码,登陆成功大概是这个样子

    3. 输入命令: ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密码'; 来修改密码

    4. Welcome to the MySQL monitor.(欢迎来到mysql终端)
      Commands end with ; or \g.(命令执行符是;或者\g)
      Your MySQL connection id is 8(mysql被连接的次数)
      Server version: 8.0.26 MySQL Community Server - GPL(mysql版本号)
      
      Copyright (c) 2000, 2021, Oracle and/or its affiliates.
      
      Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.
      
      Type 'help;' or '\h' for help. (mysql帮助命令\h或者help)
      Type '\c' to clear the current input statement.(清除等待命令\c,就是清除没有执行的命令符)
      
  12. 退出mysql账号,退出的方式有三种:1. \q 2. exit 3. quit

  13. net start mysql 是启动mysql服务,net stop mysql是关闭mysql服务。注意:必须要用管理员身份运行cmd才能够使用上面两条命令。

  14. 之后由于配置过环境变量,登陆mysql时直接在cmd 输入mysql -h 数据库服务器地址 -u root -p 即可。

使用MySQL之常见到的符号

  1. ->表示当前命令没有命令执行符或者说等待命令执行符来确认

    (可以用分号 ;来确认命令符)

  2. '>表示当前的SQL命令缺少单引号

  3. ">表示当前的SQL命令缺少双引号

修改mysql提示符,即修改cmd显示的mysql>,改成一些自己需要的,方便区别

  1. 连接客户端是通过参数进行指定:

    mysql -u root -p --prompt 参数

    常见的参数有:

    参数 描述
    \D 完整的日期
    \d 当前数据库
    \h 服务器名称
    \u 当前用户

    例如,选择参数\h 将mysql> 改为服务器名称,这里服务器是本机,所以是localhost

  2. 连接上客户端后,通prompt命令修改

    PROMPT提示符(这里的提示符可以自己命名)

    例如:

    也可以通过参数来更改

    列如:PROMPT \u@\h \d> 当前用户@服务器名称 当前数据库>

    这里没有选择数据库,所以当前数据库为none,当我们选择数据库后,这个none会自动改变为选择的数据库名称。例如:

    先查看mysql中有多少个数据库,当我们没有建立任何数据库时,mysql会有以下几个系统自带的库

    其中sys是在mysql5.7版本以后增加的额,以上这几个库不要随意的改动

    使用mysql库,可发现none变成了mysql

使用MySQL:SQL语句介绍及编码规范

SQL语句又叫结构化查询语句,所有的关系型数据库都支持SQL语句

  • 主要分四大类:

    1. DDL 数据库定义语言,用于定义和管理 SQL 数据库中的所有对象的语言(CREATE 创建、DROP 删除、ALTER 修改*、COMMENT 注释 等)
    2. DML 数据库操纵语言,对表中的数据进行增删改(INSERT 添加、DELETE 删除、UPDATE 更新 等)
    3. DQL 数据库查询语言,查询表中的数据(SELECT 查询、WHERE 规定选择的标准 等)
    4. DCL 数据库控制语言,权限和安全方面的操作(GRANT 授权、REVOKE 收回已经授予的权限 等)

    在Oracle数据库中把2,3类合并为一类了。

  • 编码规范:

    1. 关键字与函数名称全部大写
    2. 数据库名称、表名称、字段名称(列名称)全部小写
    3. SQL语句必须以分号结尾

字符集

  • 常用中文字符集:

    1. GB2312 双字节编码,早期标准

    2. GBK 双字节编码,中期标准,支持的系统很多,但不是国标,在GB2312基础上增加了很多生僻字

    3. UTF-8 1~4字节的编码,互联网广泛使用,亚洲通用字符集,国际标准化,支持任何语言,在MySQL中写成utf8

      注意:在以前版本的MySQL中的utf8其实存储长度占位只有13个字节,在MySQL8.0版本中如果直接设置utf8,则会报错,并提示你使用utf8mb4,utf8mb4才是真的utf-8,它支持4个字节的存储长度,如果要使用以前的存储长度只有13个字节的utf8,则需要写成utf8mb3

  • utf-8与GBK的区别:存储长度不一样,GB系统一个汉字占位两个字节,utf-8一个汉字占位3个字节,推荐使用utf-8(支持语言多)

  • 数据库字符集依赖关系

    内容字符集->字段字符集->表字符集->库字符集

MySQL之常用命令及建库语句

  1. 查看版本,用户,时间

    1. 显示当前服务器版本:

      SELECT VERSION();
      
    2. 显示当前用户:

      SELECT USER();
      
    3. 显示当前日期时间:

      SELECT NOW();
      
  2. 建库语句(DDL):

    CREATE{DATABASE|SCHEMA}[IF NOT EXISTS]db_NAME -- db_NAME是你想创建的库的库名,IF NOT EXISTS 则是可用于当有重名数据库时不让SQL语句报错,依然执行一遍,但同时不创建数据库
    [DEFAULT]CHARACTER SET[=]charset_name -- 这段是设置字符集
    /* 用{|}包住并用|分开的语句块表示两个任选一个都可以,在MySQL中 DATABASE 与 SCHEMA 的功能一样,
    
    用 [ ] 包住的语句块是可以省略的部分。*/
    
  3. 显示数据库创建命令(DDL):

    SHOW CREATE DATABASE 库名;
    
  4. 修改数据库(DDL):

    ALTER{DATABASE|SCHEMA}[db_name]
    [DEFAULT]CHARACTER SET[=]charset_name; -- 加上这行是修改数据库的字符集
    /* 用{|}包住并用|分开的语句块表示两个任选一个都可以,在MySQL中 DATABASE 与 SCHEMA 的功能一样,
    
    用 [ ] 包住的语句块是可以省略的部分,就是不写也没关系。*/
    

    注意:当库创建好以后,尽量不要更改库名,不推荐更改库名。

  5. 删库语句(DDL):

    DROP{DATABASE|SCHEMA}[IF EXISTS]db_NAME;-- IF EXISTS 的效果是:当数据库中已经没有要删除的库时,仍然执行该删除语句,不出现报错。
    /* 用{|}包住并用|分开的语句块表示两个任选一个都可以,在MySQL中 DATABASE 与 SCHEMA 的功能一样,
    
    用 [ ] 包住的语句块是可以省略的部分,就是不写也没关系。*/
    
  6. 查看数据库命令(DDL):

    SHOW DATABASES;
    

MySQL基础数据类型

数值型

数据列类型 存储空间 说明 取值范围
TINYINT 1Byte 非常小的整数 带符号值:-128~127 无符号值:0~255 (原因:1Byte=8bit,也就是一个字节是8个位,那么-128的二进制表示就是1000 0000 ,首位为符号位,+127的二进制是0111 1111,都是8个位;同理没有符号的情况下1111 1111就是是8位最大存储的数,换算为十进制就是255,下面的所有数据类型都是同样道理)
SMALLINT 2Byte 短整型(较小的整数) 带符号值:-32768~32767 无符号值:0~65535
MEDIUMINT 3Byte 中等大小的整数 带符号值:-8388608~8388607 无符号值:0~4294967295
INT 4Byte 整型(标准大小的整数) 带符号值:-2147483648~2147483647 无符号值:0~4294967295
BIGINT 8Byte 大整数 带符号值:-9223372036854775808~9223372036854775807 无符号值:0~18446744073709551615
FLOAT 4Byte 单精度浮点数 最小非零值:±1.175494351E-38 最大非零值:±3.402823466E+38 ( 科学计数法:比如1.1E+8=1.1×108,1.55E-16=1.55×10(-16) )
DOUBLE 8Byte 双精度浮点数 最小非零值:± 2.2250738585072014E- 308 最大非零值:±士1.7976931348623157E+308
DECIMAL 自定义 以字符串形式表示的浮点数 取决于存储单元字节数

日期和时间类型

类型 存储空间 说明 长度取值范围
DATE 3字节 "YYYY-MM-DD"格式表示的日期值 1000-01-01~9999-12-31
TIME 3字节 "hh:mm:ss"格式表示的时间值 -859:59:59~838:59:59
DATETIME 8字节 "YYYY-MM-DD hh:mm:ss"格式表示的日期和时间值 1000-01-01 00:00:00~9999-12-31 23:59:59
TIMESTAMP 4字节 "YYYYMMDDhhmmss"格式表示的时间戳 19700101000000~2037年的某个时刻(时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。但是在MySQL中TIMESTAMP存储的时间一旦大于2038-01-19 03:14:07' UTC就会超过存储的长度上限,就会报错)注意:时间戳由于存储的是秒数,所以在时间差的计算上用起来最方便。
YEAR ( MySQL5.7版本以后弃用 ) 1字节 "YYYY"格式的年份值 在5.7版本以后被弃用 1901~2155 (这里可发现一个问题,为什么YEAR的取值范围是四位数却能用一个字节的长度表示,其实可以发现是1900+一个字节的长度的值,因为不能取0000,所以从1开始,也就是1901~2155了)

字符串类型

类型 存储空间 说明 长度取值范围
CHAR[(M)] M个字符 定长字符串(当确定长度的时候,如:密码被md5加密会返回长度为32的字符串,就推荐使CHAR,且CHAR的查询效率是比VARCHA要高的) 0-255 bytes
VARCHAR[(M)] L+1个字符 变长字符串 0-65535 bytes
TINYBLOB L+1个字符 不超过 255 个字符的二进制字符串 0-255 bytes
TINYTEXT L+1个字符 短文本字符串 0-255 bytes
BLOB L+2个字符 二进制形式的长文本数据 0-65 535 bytes
TEXT L+2个字符 长文本数据 0-65 535 bytes
MEDIUMBLOB L+3个字符 二进制形式的中等长度文本数据 0-16 777 215 bytes
MEDIUMTEXT L+3个字符 中等长度文本数据 0-16 777 215 bytes
LONGBLOB L+4个字符 二进制形式的极大文本数据 0-4 294 967 295 bytes
LONGTEXT L+4个字符 极大文本数据 0-4 294 967 295 bytes
ENUM('value1','value2',…) 1或2字节 枚举:可赋予某个枚举成员(就是从多个值中选取一个值,比如性别,ENUM('男','女'),你只能选一个性别,不可能雌雄同体) 65 535个成员
SET('value1','value2',...) 1、2、3、4或8个字节 集合:可赋予多个集合成员
  • M表示规定的字符数量(5.7版本以后是这样,5.7版本以前是字节长度,比如在UTF-8的字符集下一个汉字占了3个字节,则CHAR(10)就只能存储三个汉字,5.7版本以后则改为字符数),比如CHAR(10)就代表CHAR设置为存储了10个字符的长度,不足10个字符自动补为空格,但是比如VARCHAR(20)则表示VARCHAR设置为最多存储20个字符,但是如果只填了一个字符,则不会把没有用到的空间补成空格,但是字符所占的字节数不一定一样,在不同的字符集下同一个字符所占的字节也不一定相同,所以CHAR在不同的字符集下不一定是定长的。
  • L表示实际存储的字符数量,VARCHAR这里的L+1就表示VARCHAR所占的空间比填写的字符数多一个字符的空间。
这篇关于MySQL基础1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!