一、下载mysql8.0
1.查看系统glibc版本
这里可以看到glibc版本为2.17,所以下载mysql8.0的版本时候尽量和glibc版本对应
[root@node2 ~]# rpm -qa |grep -w glibc
glibc-2.17-222.el7.x86_64
glibc-devel-2.17-222.el7.x86_64
glibc-common-2.17-222.el7.x86_64
glibc-headers-2.17-222.el7.x86_64
2.下载包
官网地址
shell
https://downloads.mysql.com/archives/community/
如下图:
具体下载地址如下:
shell
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.36-linux-glibc2.17-x86_64.tar.xz
3.安装
shell
[root@node2 ~]# tar xf mysql-8.0.36-linux-glibc2.17-x86_64.tar.xz
[root@node2 ~]# mv mysql-8.0.36-linux-glibc2.17-x86_64 /usr/local/mysql8
创建数据目录
[root@node2 ~]# mkdir -p /data/mysql/data
[root@node2 ~]# mkdir -p /data/mysql/tmp
创建用户、修改文件权限
[root@node2 ~]# useradd mysql
[root@node2 ~]# chown -R mysql:mysql /usr/local/mysql8
[root@node2 ~]# chown -R mysql:mysql /data/mysql
4.配置my.cnf
这里是最简单的配置,能够启动即可
shell
vim /etc/my.cnf
[client]
port = 3306
socket = /data/mysql/tmp/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql8
datadir = /data/mysql/data
socket = /data/mysql/tmp/mysql.sock
mysqlx_socket = /data/mysql/tmp/mysqlx.sock
pid-file = /data/mysql/tmp/mysql.pid
character-set-server = utf8mb4
skip_name_resolve = 1
5.初始化数据库
shell
cd /usr/local/mysql8/bin/
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql8/ --datadir=/data/mysql/data/
6.启动数据库
shell
cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start
重启命令如下
service mysqld restart
7.开机启动
mysql
# 这样操作能成功,是因为启动脚本中有chkconfig的配置
chkconfig --add mysqld
二、database基本操作
1.mysql中的注释
在mysql中注释使用 #
2.查看所有数据库
mysql
mysql> show databases;
3.切换数据库
mysql
mysql> use sys;
Database changed
4.查看所有表
mysql
mysql> show tables;
5.创建数据库
mysql
mysql> create database mydb;
Query OK, 1 row affected (0.01 sec)
6.删除数据库
mysql
mysql> drop database mydb;
Query OK, 0 rows affected (0.01 sec)
三、表的基本操作
1.数据类型
只写一些常见的数据类型
数据类型 | 大小 | 用途 |
---|---|---|
int | 4 bytes(4个字节) | 普通大小整数 |
bigint | 8 bytes(8个字节) | 大整数 |
char | 0-255 bytes | 定长字符串 |
varchar | 0-65535 bytes | 变长字符串 |
date | YY-MM-DD | 日期 |
datetime | YY-MM-DD HH:MM:SS | 日期和时间 |
timestamp | 时间戳 |
2.创建表
语法格式:
其中[] 中的内容可以写,也可以不写。
但是要注意:varchar类型的宽度必须指定
mysql
create table 表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明'],
)[表的一些设置参数]
例子:
mysql
mysql> create table student(id int,name varchar(20),age int,gender varchar(20),birthday date);
3.表结构相关操作
3.1 查看表的创建语句
mysql
mysql> show create table student;
3.2 查看表结构
mysql
mysql> desc student;
3.3 删除表
mysql
mysql> drop table student;
Query OK, 0 rows affected (0.01 sec)
3.4 添加字段
语法:
mysql
alter table 表名 add 列名 类型(长度) [约束];
例子:为student表添加about字段
mysql
mysql> alter table student add about varchar(20);
3.5 修改字段名
语法
mysql
alter table 表名 change 旧列名 新列名 类型(长度) [约束];
实例: 将about字段名改为news
mysql
alter table student change about news varchar(20);
3.6 删除列
语法:
mysql
alter table 表名 drop 列名;
例子:删除news字段
mysql
mysql>
mysql> alter table student drop news;
3.7 修改表名
语法:
mysql
rename table 原表名 to 新表名;
例子: 将student表改为stu;
sql
mysql> rename table student to stu;
4.insert语句
4.1 语法
语法1:根据字段名插入数据
mysql
insert into 表(字段名1,字段名2,字段名3......) values(值1,值2,值3......);
语法2:向所有列插入数据
mysql
insert into 表 values(值1,值2,值3......);
4.2 插入实例
全部插入为空值
mysql
insert into student values();
插入具体值
mysql
mysql> insert into student values(1,'zhangsan',20,'boy','2020-01-01');
5.update语句
语法:
mysql
修改所有的列
update 表名 set 字段名=值,字段名=值,......;
修改满足条件的列
update 表名 set 字段名=值,字段名=值 where 条件;
实例:
mysql
update student set age=21 where name='zhangsan';
6.delete语句
语法:
sql
删除表内所有内容
delete from 表;
删除表内指定的内容
delete from 表 whete 条件;
6.1 实例:
mysql
delete from student;
delete from student where name='zhangsan';
6.2 删除值为NULL的行
mysql
delete from student where id is NULL;
四、mysql约束
1.概念
约束的概念是出现在创建表的时候,会给字段创建对应的约束条件。约束的作用就是 "限制表中数据" 的条件
2.分类
条件 | 语法 |
---|---|
主键约束 | primary key(比较重要) |
自增长约束 | auto_increment(比较重要) |
非空约束 | not null |
唯一性约束 | unique |
默认约束 | default |
零填充约束 | zerofill |
外键约束 | foreign key |
3.主键约束
3.1 概念
主键约束相当于 唯一约束 + 非空约束的组合。主键约束不允许重复,不允许出现空值
每个表最多只允许一个主键
当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
主键主要是为了标识一行的数据的唯一性
3.2 添加单列主键
在创建表的时候添加主键
mysql
create table teacher(
# 这里给id字段设置了主键
id int primary key,
name char
);
3.3 添加多列主键
多列主键 也叫做(联合主键)
语法:
sql
create table 表 (
字段1 类型 约束条件,
......
primary key(字段1,字段2)
)
3.4 alter 添加主键
如果表创建完毕了忘记了添加了主键,然后需要用alter添加
语法:
sql
alter table 表名 add primary key(字段名);
例子:
sql
alter table teacher add primary key(id);
3.5 删除主键
sql
alter table 表名 drop primary key;
4.自增长约束
当主键定义为自增长后,这个主键的值就不需要用户输入数据了,而由数据库系统根据定义自动赋值
一张表只能有一列使用自增长约束
自增长字段的类型必须是整数类型
自增长的最大值受该字段数据类型的最大值限制,如果达到上线,会自动失效.
语法:在字段后边加上auto_increment
sql
create table 表 (
字段1 类型 auto_increment,
字段2 类型 约束条件,
)
例子:
一般主键约束和自增长一起出现。
sql
create table teacher(
id int primary key auto_increment,
name varchar(20)
);
插入数据
sql
insert into teacher values(NULL,'zhangsan');
insert into teacher values(NULL,'lisi');
insert into teacher values(NULL,'wangwu');
结果如下:
sql
mysql> select * from teacher;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
| 3 | wangwu |
+----+----------+
5.非空约束
sql
create table teacher(
id int,
name char not null
);
sql
#插入数据报错
mysql> insert into teacher values(1,NULL);
ERROR 1048 (23000): Column 'name' cannot be null
5.1 现有字段添加not null
sql
alter table 表 modify 字段 类型 not null;
6.唯一约束
语法:创建表时添加
create table teacher(
id int,
name char unique
);
创建完后的表
alter table teacher add unique(id);
7.默认约束
默认约束是用来指定某列的默认值
语法:
sql
create table teacher(
name varchar(20),
age int default 20
);
sql
insert into teacher (name) values('zhangsan');
mysql> select * from teacher;
+----------+------+
| name | age |
+----------+------+
| zhangsan | 20 |
+----------+------+
注意:这里不能插入NULL,不然默认值不生效。