雄关漫道真如铁,而今迈步从头越。

day22 mysql

1. 简介

关系型数据库

  • 永久保存数据
  • 提供数据的安全
  • 提供数据的并发访问
  • 提供了多种数据类型
  • 提供事务支持
  • 提供了SQL语言操作数据

著名的数据库

  • Oracle 甲骨文
  • MySQL 甲骨文
  • Sql Server 微软 (主要用在windows环境)
  • DB2 IBM公司
  • SQLlite 用在移动端开发

2.安装

解压后
bin/mysql.exe 客户端程序
bin/mysqld.exe 服务器端程序
bin/mysqldump.exe 数据备份程序

  1. 初始化(只需要执行一次)
    bin/mysqld --initialize --console
    初始化结束会生成data的文件夹,其中保存系统和用户的数据

注意记录临时密码

  1. 启动数据库服务(跳过就可以)
    bin/mysqld --console
    端口用的是3306
    可以使用Ctrl+C 停止服务程序,或者直接关闭窗口

  2. 使用客户端连接
    bin/mysql -u 用户名 -p

初始化时mysql有一个 root (数据库管理员用户)

bin\mysql -uroot -p

正确登录后会出现 mysql> 提示符,要退出用quit命令

  1. 修改密码(只需要执行一次)
alter user 'root'@'localhost' identified by 'root';
  1. 配置mysql的bin目录至环境变量(只需要执行一次)

  2. 将mysql安装为系统服务(只需要执行一次)
    bin\mysqld install 服务名

如果服务名没有提供,默认为MySQL

如果要卸载服务:sc delete 服务名

如果安装服务或删除时出现权限不足,用管理员身份运行cmd(黑窗口)

  1. 建库
    设置默认的字符编码

一种是在建库语句上带上字符编码
另一种是在启动服务时添加配置文件

建库SQL语句(在mysql提示符下运行)

create database 数据库名 character set utf8mb4;

mysql中的utf8字符不够完整,utf8mb4是完整版本的

删除数据库

drop database 数据库名;

查看建库信息

show create database 数据库名;

要修改全局的设置,在mysql解压目录添加 my.ini 配置文件,在其中输入(推荐)

[mysqld]
character-set-server=utf8mb4

停止旧服务,删除旧服务,安装新服务,启动新服务

net stop mysql
sc delete mysql
mysqld install
net start mysql

3. 基本操作

建表(table)
一个库中有多张表,每张表里有多条数据
表分成行(row 横向)与列(column 纵向)

学号 姓名 性别
1 张三 男
2 李四 女

  1. 选库
    use 库名;
  2. 建表
create table 表名(1名 类型,2名 类型,
    ...
);
create table student(
    id int,
    name varchar(10),
    sex char(1)
);

整数类型: tinyint(1个字节), smallint(2个字节), int(4个字节), bigint(8个字节)
无符号数字 tinyint unsigned (0~255)

浮点类型: float, double
定点小数: decimal(总位数, 小数位数)
decimal(10, 2) 小数部分两位,整数部分最大8位

字符类型
char(长度) char(10) 表示最多存10个字符, 定长,效率高
varchar(长度) varchar(10) 表示最多存储10个字符,变长

“abc” "abc " 存储时,长度不足,用空格补齐
“abc” “abc” 存储时,根据实际长度存储,可以节省空间
日期类型
datetime
timestamp

  1. 插入数据
insert into 表名(1,2, ... 列n) values (1,2, ... 值n);

注意:值个数要与列个数一致

insert into student(id,name,sex) values(1, '张三', '男');
  1. 查询数据
    语法:
select1,2, ... from 表名;
select id, name, sex from student;
  1. 查看所有库
show databases;
  1. 查看所有表
show tables;
  1. 唯一主键
    每张表只能有一个主键
    主键的值必须是唯一,且非空的
create table 表名(1名 类型 primary key,2名 类型,
    ...
);

删表语法:drop table 表名;

create table student(
    id int primary key,
    name varchar(10),
    sex char(1)
);

insert into student(id,name,sex) values(null, ‘李四’, ‘男’);

自增列,用来解决主键冲突问题
在主键列后加入:auto_increment
1 2 3 4 …
因为id列由数据库维护,所以有了自增列后就不需要给id列赋值了

create table student(
    id int primary key auto_increment,
    name varchar(10),
    sex char(1)
);

一次插入多条记录(mysql独有)
insert into student(name,sex) values(‘李四’, ‘男’),(‘王五’, ‘男’),(‘赵柳’, ‘男’);

  1. 查询所有列
    select * from student;
    mysql会把*翻译成:id,name,sex

  2. 删除记录(只删除数据,不删表)

delete fromwhere 条件;

删除表(连表和数据一块删除)

drop table;

只删除id=6的记录
delete from student where id=6;

create table a ( birthday datetime );
insert into a (birthday) values (‘1988-5-4’);
insert into a (birthday) values (‘1988-5-4 16:39:00’);

// 1.
create table b (
id int primary key auto_increment,
name varchar(20)
) auto_increment=1001;
insert into b (name) values(‘aaa’),(‘bbb’),(‘ccc’);
// 2.
create table b (
id int primary key auto_increment,
name varchar(20)
);
alter table b auto_increment=1001;