MYSQL回顾(基础)

数据库简介

什么是数据库(DataBase,简称DB)

数据库,又称为数据管理系统,简而言之可视为电子化文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作[1]。 --《维基百科》

数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。
过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用。
数据库是长期存放在计算机内、有组织、可共享的数据即可。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享。

本质上数据库就是存储在电脑上的一个文件夹,而数据库表就是文件夹下的文件

什么是数据库管理系统(DataBase Management System 简称DBMS)

用于管理数据库的软件系统。DBMS解决了如何科学地组织和存储数据,如何高效获取和维护数据的问题。

常见的DBMS

参考文章

MYSQL就是一个数据库管理软件。又叫数据管理系统,即DBMS(dababase management system)。大型数据库通常运行于一个独立的数据库服务器上,客户端或者其他服务器通过网络访问数据库。这就用到了数据库管理系统。MYSQL就是数据库管理软件,而非数据库。但通常我们所谈论的数据库,其实是在谈论DBMS。

关系型数据库(管理系统)

  • MySQL数据库
  • Microsoft SQL Server数据库
  • Oracle数据库
  • Postgresql数据库
  • Sybase数据库
  • DB2数据库
  • Access数据库

非关系型数据库

  • Mongodb数据库
  • Redis数据库
  • Hbase数据库
  • Memcaced数据库
  • BigTable数据库

mysql是目前各大企业使用的主流数据库。它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。

数据库管理工具

  • navicat
  • mysql workbench

理解数据库服务器、数据管理系统、数据库、表与记录的关系

记录(record):1 小明 男 二班 9岁 (多个字段的信息组成一条记录,即数据库表文件中的一行内容)
表(table):student,class,school(即文件)
数据库(database):oldboy_stu(即文件夹)
数据库管理系统(DBMS):如mysql(是一个软件)
数据库服务器:一台计算机(对内存性能要求比较高)

总结:

数据库服务器-:运行数据库管理软件
数据库管理软件:管理-数据库
数据库:即文件夹,用来组织文件/表
表:即文件,用来存放多行内容/多条记录

MySQL简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。


mysql就是一个基于socket编写的C/S架构的软件

客户端软件
  mysql自带:如mysql命令,mysqldump命令等
  python模块:如pymysql

MYSQL安装与管理

linux下安装


#二进制rpm包安装

yum -y install mysql-server mysql

macOS下安装


brew install mysql

查看mysql版本


mysql --version

启动mysql


mysql.server start

设置mysql密码


mysqladmin -u root password "123456"

修改mysql密码


 mysqladmin -u root -p12345678(新密码) password 123456(旧密码) 

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'

源码安装

You must reset your password using ALTER USER statement before executing this statement.


安装完mysql 之后,登陆以后,不管运行任何命令,总是提示这个

mac mysql error You must reset your password using ALTER USER statement before executing this statement.

解决方法:

step 1: SET PASSWORD = PASSWORD('your new password');

step 2: ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

step 3: flush privileges;

登录设置密码


初始状态下,管理员root,密码为空,默认只允许从本机登录localhost

设置密码

# mysqladmin -uroot password "123"        设置初始密码 由于原密码为空,因此-p可以不用

# mysqladmin -uroot -p"123" password "456"        修改mysql密码,因为已经有密码了,所以必须输入原密码才能设置新密码

命令格式:

# mysql -h172.31.0.2 -uroot -p456

# mysql -uroot -p

# mysql                    以root用户登录本机,密码为空

linux下破解密码

linux平台下,破解密码的两种方式

方法一:删除授权库mysql,重新初始化


# rm -rf /var/lib/mysql/mysql #所有授权信息全部丢失!!!

# systemctl restart mariadb

# mysql

方法二:启动时,跳过授权库


# vim /etc/my.cnf    #mysql主配置文件

[mysqld]

skip-grant-table

# systemctl restart mariadb

# mysql

MariaDB [(none)]> update mysql.user set password=password("123") where user="root" and host="localhost";

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> \q

# #打开/etc/my.cnf去掉skip-grant-table,然后重启

# systemctl restart mariadb

# mysql -u root -p123 #以新密码登录

SQL 语句

mysql服务端软件即mysqld帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要下载mysql的客户端,或者其他模块来连接到mysqld,然后使用mysql软件规定的语法格式去提交自己命令,实现对文件夹或文件的管理。该语法即sql(Structured Query Language 即结构化查询语言)


SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:

1、DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句    数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

初识SQL语句


#1\. 操作数据库

        增:create database db1 charset utf8;

        查:show databases;

        改:alter database db1 charset latin1;

        删除: drop database db1;

#2\. 操作库表

    先切换到文件夹下:use db1

        增:create table t1(id int,name char);

        查:show tables

        改:alter table t1 modify name char(3);

              alter table t1 change name name1 char(2);

        删:drop table t1;

#3\. 操作表中的记录

        增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');

        查:select * from t1;

        改:update t1 set name='sb' where id=2;

        删:delete from t1 where id=1;

数据库的操作

数据库命名规则

可以由字母、数字、下划线、@、#、$

区分大小写

唯一性

不能使用关键字如 create select

不能单独使用数字

最长128位

数据库CRUD


# charset可省略

CREATE DATABASE 数据库名 charset utf8;

# 查看数据库

show databases;

# 查看或创建(如果没有)数据库

show create database db1;

# 查看当前数据库

select database();

选择数据库

# 进入数据库

USE 数据库名

# 删除数据库

DROP DATABASE 数据库名;

# 修改数据库

alter database db1 charset utf8;

MySQL使用存储引擎

方法1:建表时指定


> create table innodb_t1(id int,name char)engine=innodb;

> create table innodb_t2(id int)engine=innodb;

> show create table innodb_t1;

> show create table innodb_t2;

方法2:在配置文件中指定默认的存储引擎


/etc/my.cnf

[mysqld]

default-storage-engine=INNODB

innodb_file_per_table=1


练习:创建四个表,分别使用innodb,myisam,memory,blackhole存储引擎

> create table t1(id int)engine=innodb;

> create table t2(id int)engine=myisam;

> create table t3(id int)engine=memory;

> create table t4(id int)engine=blackhole;

> quit

> ls /var/lib/mysql/db1/ #发现后两种存储引擎只有表结构,无数据

db.opt  t1.frm  t1.ibd  t2.MYD  t2.MYI  t2.frm  t3.frm  t4.frm

#memory,在重启mysql或者重启机器后,表内数据清空

#blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

表的操作

创建表


create table 表名(

字段名1 类型[(宽度) 约束条件],

字段名2 类型[(宽度) 约束条件],

字段名3 类型[(宽度) 约束条件]

);

#注意:

1\. 在同一张表中,字段名是不能相同

2\. 宽度和约束条件可选

3\. 字段名和类型是必须的

例:


create table article(

  id int(10) not null auto_increment,

  img text default null comment '缩略图',

  title varchar(80) default null comment '文章标题',

  summary varchar(300) default null comment '文章简介',

  content text default null comment '文章内容',

  createTime timestamp default null comment '发布时间',

  primary key(id)

)engine=InnoDB AUTO_INCREMENT=1 comment '文章表';


mysql> create table student(

    -> id int not null auto_increment,

    -> name text default null comment '名字',

    -> gender enum('male', 'female') default 'male' comment '性别',

    -> primary key(id)

    -> ) engine=InnoDB AUTO_INCREMENT=1 comment '学生表';


show tables; #查看数据库下所有表名

查看表结构


desc 表名;

查看表详细结构,可加\G


show create table t1\G; #查看表详细结构,可加\G

例:


desc student; # 等价于 describe student;


+-------+-----------------------+------+-----+---------+-------+

| Field | Type                  | Null | Key | Default | Extra |

+-------+-----------------------+------+-----+---------+-------+

| id    | int(11)               | YES  |     | NULL    |       |

| name  | varchar(50)           | YES  |     | NULL    |       |

| sex   | enum('male','female') | YES  |     | NULL    |       |

| age   | int(3)                | YES  |     | NULL    |       |

+-------+-----------------------+------+-----+---------+-------+

查数据


select id,name,sex,age from student;

select * from student;

插入数据


# 只插入id

insert into article(id) values(7);

# 插入一条空记录

insert into article() value();

# 插入记录时可以省略into

Insert article(id, title) value(10, '操作系统');

# 插入多条记录

insert into student(name, gender) values('mark', 'male'), ('jenny', 'female');


# 插入两条记录

insert into student values

    -> (1,'jack',18,'male'),

    -> (2,'mark',81,'female')

    -> ;

# 插入两条只有id的记录

insert into t1(id) values

    -> (3),

    -> (4);

查看表结构


> describe student; #查看表结构,可简写为desc 表名

> show create table student\G; #查看表详细结构,可加\G

+-------+-----------------------+------+-----+---------+-------+

| Field | Type                  | Null | Key | Default | Extra |

+-------+-----------------------+------+-----+---------+-------+

| id    | int(11)               | YES  |     | NULL    |       |

| name  | varchar(50)           | YES  |     | NULL    |       |

| sex   | enum('male','female') | YES  |     | NULL    |       |

| age   | int(3)                | YES  |     | NULL    |       |

+-------+-----------------------+------+-----+---------+-------+

修改表结构


# 修改表名 student表修改成person表

mysql> alter table student rename person;

# 添加字段 给peron表添加address字段

mysql> alter table person add address varchar(100);

# 删除字段 删除person表的address字段

mysql> alter table person drop address;

# 修改字段类型 用 modify

mysql> alter table person modify name char(10);

# 修改字段名 用change

mysql> alter table person change gender sex enum('male', 'female');

# 建表之后设置 primary key

mysql> alter table employee modify id int primary key;

语法


1\. 修改表名

      ALTER TABLE 表名

                          RENAME 新表名;

2\. 增加字段

      ALTER TABLE 表名

                          ADD 字段名  数据类型 [完整性约束条件…],

                          ADD 字段名  数据类型 [完整性约束条件…];

      ALTER TABLE 表名

                          ADD 字段名  数据类型 [完整性约束条件…]  FIRST;

      ALTER TABLE 表名

                          ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;

3\. 删除字段

      ALTER TABLE 表名

                          DROP 字段名;

4\. 修改字段

      ALTER TABLE 表名

                          MODIFY  字段名 数据类型 [完整性约束条件…];

      ALTER TABLE 表名

                          CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];

      ALTER TABLE 表名

                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

示例:


1\. 修改存储引擎

mysql> alter table service

    -> engine=innodb;

2\. 添加字段

mysql> alter table student10

    -> add name varchar(20) not null,

    -> add age int(3) not null default 22;

mysql> alter table student10

    -> add stu_num varchar(10) not null after name;                //添加name字段之后

mysql> alter table student10                       

    -> add sex enum('male','female') default 'male' first;          //添加到最前面

3\. 删除字段

mysql> alter table student10

    -> drop sex;

mysql> alter table service

    -> drop mac;

4\. 修改字段类型modify

mysql> alter table student10

    -> modify age int(3);

mysql> alter table student10

    -> modify id int(11) not null primary key auto_increment;    //修改为主键

5\. 增加约束(针对已有的主键增加auto_increment)

mysql> alter table student10 modify id int(11) not null primary key auto_increment;

ERROR 1068 (42000): Multiple primary key defined

mysql> alter table student10 modify id int(11) not null auto_increment;

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0

6\. 对已经存在的表增加复合主键

mysql> alter table service2

    -> add primary key(host_ip,port);       

7\. 增加主键

mysql> alter table student1

    -> modify name varchar(10) not null primary key;

8\. 增加主键和自动增长

mysql> alter table student1

    -> modify id int not null primary key auto_increment;

9\. 删除主键

a. 删除自增约束

mysql> alter table student10 modify id int(11) not null;

b. 删除主键

mysql> alter table student10                                

    -> drop primary key;

复制表


复制表结构+记录 (key不会复制: 主键、外键和索引)

mysql> create table new_service select * from service;

只复制表结构

mysql> select * from service where 1=2;        //条件为假,查不到任何记录

Empty set (0.00 sec)

mysql> create table new1_service select * from service where 1=2; 

Query OK, 0 rows affected (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> create table t4 like employees;

删除表


DROP TABLE 表名;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 1.1 数据与数据库 1.数据:客观存在记录信息并且可以鉴别的符号。 2.数据存储方式:纸张,磁盘,光盘等 3.数...
    多彩海洋阅读 159评论 1 1
  • 第三章 数据库系统 3.1 数据库管理系统的类型 通常有多个分类标准。如按数据模型分类、按用户数分类、按数据库分布...
    步积阅读 2,671评论 0 7
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,025评论 0 5
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,240评论 2 22
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,028评论 0 19