对于数据库的一些理解:
综上所述,可以总结为:表 对应 类,列 对应 类中定义的属性,行 对应 类实例化出来的对象
下载地址https://dev.mysql.com/downloads/mysql/
先以Windows系统下安装MySQL为例:下载完以后解压到某一个路径,注意路径名不能含中文
在该路径下创建一个文件,命名为my.ini
用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
或者把路径用双引号“ ”包起来也可以。
修改环境变量:
管理员运行cmd,跳转到安装mysql的盘符,比如我这是D盘
进入mysql路径下的bin目录
输入mysqld --install安装mysql
输入mysqld --initialize --console 初始化mysql
,初始化完成后,会在命令符窗口中会打印出一些关于mysql的版本以及启动时间等数据,以及最重要的mysql 的root权限的初始密码,它在这条里:[Server] A temporary password is generated for root@localhost: +f-i(u7O5gem ,其中的+f-i(u7O5gem 就是我的mysql的初始密码。
接下来就要启动mysql服务,启动后才能进行登陆操作,登陆管理员账号才能修改密码,输入命令:net start mysql ,启动mysql服务
接下来就是修改密码:
首先登陆mysql的root账号,命令符为: mysql -h 数据库服务器地址 -u root -p ,如果数据库在本机可以省略 -h 数据库服务地址 ,没必要写localhost或者127.0.0.1什么的。
输入你的初始密码,登陆成功大概是这个样子
输入命令: ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密码'; 来修改密码
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,就是清除没有执行的命令符)
退出mysql账号,退出的方式有三种:1. \q 2. exit 3. quit
net start mysql 是启动mysql服务,net stop mysql是关闭mysql服务。注意:必须要用管理员身份运行cmd才能够使用上面两条命令。
之后由于配置过环境变量,登陆mysql时直接在cmd 输入mysql -h 数据库服务器地址 -u root -p 即可。
->表示当前命令没有命令执行符或者说等待命令执行符来确认
(可以用分号 ;来确认命令符)
'>表示当前的SQL命令缺少单引号
">表示当前的SQL命令缺少双引号
连接客户端是通过参数进行指定:
mysql -u root -p --prompt 参数
常见的参数有:
参数 | 描述 |
---|---|
\D | 完整的日期 |
\d | 当前数据库 |
\h | 服务器名称 |
\u | 当前用户 |
例如,选择参数\h 将mysql> 改为服务器名称,这里服务器是本机,所以是localhost
连接上客户端后,通prompt命令修改
PROMPT提示符(这里的提示符可以自己命名)
例如:
也可以通过参数来更改
列如:PROMPT \u@\h \d> 当前用户@服务器名称 当前数据库>
这里没有选择数据库,所以当前数据库为none,当我们选择数据库后,这个none会自动改变为选择的数据库名称。例如:
先查看mysql中有多少个数据库,当我们没有建立任何数据库时,mysql会有以下几个系统自带的库
其中sys是在mysql5.7版本以后增加的额,以上这几个库不要随意的改动
使用mysql库,可发现none变成了mysql
SQL语句又叫结构化查询语句,所有的关系型数据库都支持SQL语句
主要分四大类:
在Oracle数据库中把2,3类合并为一类了。
编码规范:
常用中文字符集:
GB2312 双字节编码,早期标准
GBK 双字节编码,中期标准,支持的系统很多,但不是国标,在GB2312基础上增加了很多生僻字
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(支持语言多)
数据库字符集依赖关系
内容字符集->字段字符集->表字符集->库字符集
查看版本,用户,时间
显示当前服务器版本:
SELECT VERSION();
显示当前用户:
SELECT USER();
显示当前日期时间:
SELECT NOW();
建库语句(DDL):
CREATE{DATABASE|SCHEMA}[IF NOT EXISTS]db_NAME -- db_NAME是你想创建的库的库名,IF NOT EXISTS 则是可用于当有重名数据库时不让SQL语句报错,依然执行一遍,但同时不创建数据库 [DEFAULT]CHARACTER SET[=]charset_name -- 这段是设置字符集 /* 用{|}包住并用|分开的语句块表示两个任选一个都可以,在MySQL中 DATABASE 与 SCHEMA 的功能一样, 用 [ ] 包住的语句块是可以省略的部分。*/
显示数据库创建命令(DDL):
SHOW CREATE DATABASE 库名;
修改数据库(DDL):
ALTER{DATABASE|SCHEMA}[db_name] [DEFAULT]CHARACTER SET[=]charset_name; -- 加上这行是修改数据库的字符集 /* 用{|}包住并用|分开的语句块表示两个任选一个都可以,在MySQL中 DATABASE 与 SCHEMA 的功能一样, 用 [ ] 包住的语句块是可以省略的部分,就是不写也没关系。*/
注意:当库创建好以后,尽量不要更改库名,不推荐更改库名。
删库语句(DDL):
DROP{DATABASE|SCHEMA}[IF EXISTS]db_NAME;-- IF EXISTS 的效果是:当数据库中已经没有要删除的库时,仍然执行该删除语句,不出现报错。 /* 用{|}包住并用|分开的语句块表示两个任选一个都可以,在MySQL中 DATABASE 与 SCHEMA 的功能一样, 用 [ ] 包住的语句块是可以省略的部分,就是不写也没关系。*/
查看数据库命令(DDL):
SHOW DATABASES;
数据列类型 | 存储空间 | 说明 | 取值范围 |
---|---|---|---|
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个字节 | 集合:可赋予多个集合成员 |