windows ubuntu 安装mysql
一、介绍
二、过程
三、问题
一、介绍
MySQL是一款开源的关系型数据库管理系统,是目前最流行的数据库之一。
关键,免费,好用。
二、过程
1 windows安装
1.1 下载
下载地址:https://downloads.mysql.com/archives/installer/
选择下面那个,下载完了后,可以直接安装。因为我的服务器不大,所以选择的是老版本,如果你的服务器牛比,可以使用最新8.0的版本。我这个仅供参考。
1.2 打开安装
先打勾,再next。
因为我只要数据库就好了,选择第二项,然后next。
点击Execute,执行就会开始安装程序、
完成了,继续下一步
这里提示需要配置mysql,next
第一个选项框里有三个选择,第一个是开发版, 第二个是服务器版,第三个是专用版,也就是服务器上只有mysql服务。
自行选择
设置端口号,默认3306, next
设置数据库密码,非常重要。设置好了,next
第一项是配置mysql为windows 服务,服务名叫MySQL56
第二项是配置随系统开启后也运行mysql服务,如果想手动请关掉。
第三项是配置只有系统账号才可以访问,如果选Custom User, 那么游客也可以访问数据库。
默认就 直接next。
点击执行 Execute。
这样就是执行完成了。
提示配置完成。next
这样就是安装完成了,点击Finish, 就代表安装结束。
1.3 测试
1.3.1 打开命令行测试
win+r
输入
mysql -u root -p
输入密码,连接成功。
如果遇到没有mysql命令,请往下翻参考 问题 中的第一个。
1.3.2 快捷打开命令行
可以在快捷栏选择连接。
输入密码就可以进入
2 ubuntu 安装
2.1 命令安装
由于不同ubuntu 系统对应需求的mysql需要的组件不一样,所以最好默认命令安装
sudo apt install mysql-server -y
检查安装状态
sudo service mysql status
如果未开启,可以使用这个命令
sudo service mysql start
第一次进去,需要系统认证进入
sudo mysql
修改root 密码
alter user 'root'@'localhost' identified with mysql_native_password by 'mycode';
'mycode' 替换你想要的密码,我这里就算是把密码设置成了 mycode
改完密码后就不能再使用原来的办法进入了。
使用我刚刚修改的密码登录, 成功进入。
mysql -uroot -pmycode
如果想改回默认的进入方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
就可以了
2.2 配置相关
暂时不需要改端口,配外网,以后再说。
3 mysql 相关命令
3.1 本地连接命令
mysql -uroot -p
退出mysql
exit
3.2 内部命令
请注意,最后都需要分号结尾。
隔壁也可以进行参考:去看看
3.2.1 数据库操作
查看所有数据库
show databases;
创建数据库
create database 数据库名字
推荐使用这样的,if not exists 预先判断一次是不是存在这个库
create database if not exists +数据库的名字
也可以创建时,设定字符集,和比较规则
create database 数据库名 character set 字符集 collate 比较规则
character 查看mysql 所有字符集,创建库,默认的字符集是 utf8
show character set;
collate : 是指mysql的比较规则。其实一般不用动,每个字符集都有默认的比较规则。
简而言之,COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响**DISTINCT**、**GROUP BY**、**HAVING**语句的查询结果。
mysql建索引的时候,如果索引列是字符类型,也会影响索引创建,凡是涉及到字符类型比较或排序的地方,都会和COLLATE有关系
COLLATE通常是和数据编码(CHARSET)相关的,一般来说每种CHARSET都有多种它所支持的COLLATE,并且每种CHARSET都指定一种COLLATE为默认值。例如Latin1编码的默认COLLATE为latin1_swedish_ci,GBK编码的默认COLLATE为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci
可参考: 去看看
查看数据库详细信息
show create database 数据库名字;
删除库(小心,删库是危险操作,请最后确认备份后再执行)
drop database 数据库的名字;
也可以
drop database if exists 数据库的名字;
修改数据库
alter database test2 character set = 字符集;
这个其实也只是修改了默认的字符集的格式,就是创建表时,默认的字符集,在创建表的,还可以再指定字段的字符集。
如果需要修改数据库名称,不好意思,这个命令取消了,如果需要换名字,可以间接操作,就是新建一个库,然后把旧库导过来。
1、最简便方法,备份库然后导入到新库。
因为我使用的是windows 所以地址要带盘符,如果linux 要对应更改。
mysqldump -uroot -p123456 --set-gtid-purged=OFF old_db > c:\Users\Administrator\test.sql
然后导入新库
mysql -uroot -p123456 new_db < c:\Users\Administrator\test.sql
2. 还有就是只有几个表的情况下,可以直接一张一张表移动过去,其实是改名字
rename table old_db.test to new_db.test;
选择操作的数据库
use 库名;
3.2.2 数据结构
数字结构
int 标准的整数 4个字节常用的 bigint 较大的数据 8 个字节 float 浮点数 4个字节 double 浮点数 8个字节 decimal 字符串的浮点数 金融计算的时候一般使用decimal
字符串结构
char 字符串的长度固定为0-255 varchar 可变字符串0-65535的字符串长度 tinytext 微型文本 2^8-1 text 文本串 2^16-1 保存大文本
日期
date YYYY-MM-DD,日期的格式 time HH:mm:ss 时间的格式 datatime YYYY-MM-DD HH:mm:ss 最常用的时间格式 timestamp 时间戳 197.1.1到现在的毫秒 也较为常用 year 年份表示
数据库的日期类型的数据会跟上面有点不一样,详细可以查看这里:去看看
操作日期的相关返回,可以去这看看: 去看看
null 空值。
3.2.3 表操作
新建数据表
CREATE TABLE `test` (
`id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `age` INT(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PRIMARY KEY 是表主键,具备唯一属性。
其中 ENGINE 是数据库引擎,了解可以看这里: 去看看
大致两个, 一个是InnoDB,体积大,速度相对较慢,但是具备事务性。如果需要大量update, insert ,建议这个。
还有一个是 myisam, 体积小,速度快,但是不具备事务性,不需要大量编辑,只查询,建议这个。
建表基本必带参数:
id 主键 不用说,唯一标识符
_version_ 乐观锁
is_delete 伪删除
create_time 创建时间
update_time 修改时间
建表字段属性
Unsignes 无符号(正整数) zerofill 零填充,不足位数零填充 auto_increment 自增长,一般用于主键id not null 不能为空,如果不填入数据就会报错 defaunt 默认值。 comment 注释
”如果需要查看注释,可以使用“
show full columns from 表名;
查看所有表信息。
show tables;
查看表结构
DESC 表名称;
查看所有字段信息:”show full columns from 表名;“
删除表
drop table 表名;
修改表
--修改表的名字:alter table 旧表名 rename as 新表名 alter table teacher rename as teacher1; --增加表的字段 alter table 表名 add 字段名 列的属性 alter table teacher add name varchar(30) -- 修改表的字段(修改约束就是修改属性) --alter table 表名 modify 字段名 列属性 alter table student modify age varchar(11)--修改约束 --修改表的字段(重命名) --alter table 表名 change 字段的旧名字 字段的新名字 列的属性(字段的属性) alter table student change name name1 varchar(60) --删除表字段的 alter table 表名 drop 字段名 alter table student drop name --删除了name的字段
3.2.4 数据操作
插入数据。
insert into `表名`(`字段1`,`字段2`,`字段3`) values('值1'),('值2')....;--插入多个值 insert into `表名` values ('值1','值2','值3')--可以省略字段名 但是值必须要一一对应(包括id主键)
查询数据
select [all | distinct] {* | table.* | [table.field[as alias1] [,table.field2[as alias2]] [,....]} from table_name [as table_alias] [left | fight | inner join table_name2]-- 连表查询 [where ...]-- 指定结果需要满足的条件 [group BY ...] -- 指定结果按照那几个字段来分组 [having] -- 过滤分组后的记录需要满足的次要条件 [order by ...]-- 指定查询记录按照一个或多个的条件排序 [limit {offset,} row_count |row_countOFFSET offset}]; -- 指定查询记录从哪条查到哪条
比如,查询所有数据
select * from test;
修改数据
update `表名` set `字段` ='值1' where 条件
删除数据
--删除数据 避免这样写 会全部删除 delete from 表名; --删除指定的数据 delete from 表名 where 条件;
不过在实际工作中,一般数据都是伪删除。就是增加一个is_delete字段,然后修改数据;
常用函数
-- 数学运算 SELECT ABS(-1) -- 绝对值 SELECT CEILING (3.2) -- 向上取整 SELECT FLOOR (3.2) -- 向下取整 SELECT RAND() -- 返回一个0-1的随机数 SELECT SIGN(10) -- 判断一个数的符号 正数返回1 负数返回一个-1 0返回0 -- 字符串的函数 SELECT CHAR_LENGTH('我爱你中国') -- 返回字符串的长度 SELECT CONCAT ('我','爱','你','中','国')-- 拼接字符串 SELECT INSERT('我爱你中国',1,2,'非常爱')-- 从某个位置开始 替换到某个长度 SELECT LOWER('woAiNi') -- 将字符串转化为小写的字母 SELECT UPPER('woaoin') -- 将字符串转换为大写的字母 SELECT INSTR('我爱你中国','爱你') -- 返回第一次子串出现的索引 SELECT REPLACE('我爱你中国','爱你','非常的爱你') -- 替换指定过的字符串为指定的内容 SELECT SUBSTR('我爱你中国',2,4) -- 返回从指定位置开始 长度为指定长度的字符串 (源字符串,截取的位置,j截取的长度) SELECT REVERSE('清晨我上马') -- 反转字符串 返回 -- 时间和日期的函数(记住) SELECT CURRENT_DATE() -- 获取当前的时间 SELECT CURDATE(); -- 返回当前的日期 SELECT NOW(); -- 获取当前的时间 SELECT LOCALTIME() -- 本地时间 SELECT SYSDATE() -- 获取系统时间 -- 获取年 月 日 时 分 秒 SELECT YEAR(NOW()) -- 获取到指定时间的年份 SELECT MONTH(NOW()) -- 获取到指定时间的月份 SELECT DAY(NOW()) -- 获取到指定时间的日子 SELECT HOUR(NOW()) -- 获取到指定时间的时 SELECT MINUTE(NOW()) -- 获取到指定时间的分 SELECT SECOND(NOW()) -- 获取到指定时间的秒 -- 系统 SELECT USER(); -- 返回系统的用户 SELECT VERSION(); -- 返回系统的版本
三、问题
1. 没有mysql命令
配置环境变量。先找到mysql 安装路径。这里是我的安装路径,根据实际情况来。
配置环境变量。
就可以了
2. 如果是遇到修改表字段的属性,需要先带主要属性
ALTER TABLE 表名 MODIFY 字段名 数据类型 [not null] [default 默认值];
例如,刚开始没有设置 自增长,后面要设置自增长,需要先把int先设定
alter table test modify column id int(11) AUTO_INCREMENT;
不能步带int, 不然会报错