1 MySQL简介
1.1数据库概念
- 数据库,是数据存储的仓库。有“数据库”、“表”、“表数据”、“字段(域)”、“记录” 组成。
- 数据库就是存储数据的仓库。在数据库中存放表,一个数据库中可以同时存放多张表。在表中存放数据。
1.2数据库类型
- 关系型:MySQL、Oracle、SQlserver、高思、PostpreDB、DB2、infomix …
- 非关系型(不仅仅是关系型):nosql 、redis、MongoDB
1.3关系型和不仅仅关系型数据库区别-
参考链接 https://www.cnblogs.com/Jack666/p/9859040.html
2 MySQL 安装和启动
2.1安装:
- Linux 系统联网
- sudo apt-get update
- sudo apt-get install mysql-server
2.2启动:
有两种方法可以启动、关闭、重启MySQL数据库服务器。
- /etc/init.d/mysql start/stop/restart
- service mysql start/stop/restart 启动服务
2.3查看:
- mysql -V 查看版本
- service mysql status 查看当前mysql服务器运行状态。绿灯亮起,表示启动成功。
- netstat -apn | grep mysql 查看当前mysql服务器进程(守护进程)信息。 端口:3306
3 MySQL登录和退出
3.1登录:
- 语法:mysql -h IP地址 -P 端口号 -u 用户名 -p密码
- mysql -h 127.0.0.1 -P 3306 -u root -p123456
- mysql -u root -p123456 登录本地数据库。 明文密码输入。(常用)
- mysql -u root -p 回车。 隐藏密码输入。
3.2退出:
- exit、quit、 \q
- 优雅的退出:
4 关系型数据库 分类:
- 基于用户的数据管理系统。 —— Oracle
- 表存放在 用户名下。
- 基于数据库的数据管理系统。 —— MySQL
- 表存放在 数据库名下。
小结:MySQL和Oracle数据库都是关系型数据库,两者前者免费,后者花钱,但后者能够定制,更适合大型公司使用,而后者在中小型公司中应用更加广泛。
- 表存放在 数据库名下。
5 MySQL的 CURD
- c:创建 Create 、 u:更新 update 、 R: 查询 Retrieve、 D: 删除 Delete
5.1数据库的 CURD:
-
r 查询数据库:
show databases;
-
列举MySQL包含的数据库。
show create database 数据库名;
-
得到创建数据的 SQL语法。 包含 数据库使用的字符集。
-
-
c 创建数据库:
完整语法: create database [if not exists] `数据库名` [指定字符集](做项目时一定要指定字符集创建,不然作为新手的我们会哭的)
-
create database if not exists `mydb1` charset=utf8
-
create database `mydb2` -- 字符集默认为 拉丁语 latin1
if not exists 添加上,在“脚本”中,不会出现错误,导致终止。
-
-
d 删除数据库:
语法:drop database [if exists] `数据库名`
mysql> drop database if exists `my db3`; Query OK, 0 rows affected (0.01 sec) mysql> drop database mydb2; Query OK, 0 rows affected (0.00 sec)
-
u 修改数据库:只能修改字符集
语法:alter database `数据库名` 设置字符集
mysql> show create database mydb1; +----------+----------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------+ | mydb1 | CREATE DATABASE `mydb1` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+----------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> alter database mydb1 charset=GBK -> ; Query OK, 1 row affected (0.00 sec) mysql> show create database mydb1; +----------+---------------------------------------------------------------+ | Database | Create Database | +----------+---------------------------------------------------------------+ | mydb1 | CREATE DATABASE `mydb1` /*!40100 DEFAULT CHARACTER SET gbk */ | +----------+---------------------------------------------------------------+ 1 row in set (0.00 sec)
表的 CURD
查询表
- 查看数据库中的 表: show tables;
mysql> show tables;
1046 (3D000): No database selected
-- 没有选定数据库
mysql> use mydb2;
Database changed -- 修改使用数据成功。
- 查看创建表的语法:show create table 表名;
mysql> show create table teacher;
| Table | Create Table
| teacher | CREATE TABLE `teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(20) NOT NULL COMMENT '姓名',
`phone` varchar(20) DEFAULT NULL COMMENT '电话',
`add` varchar(100) DEFAULT '地址不详' COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
mysql> show create table teacher\G -- 按字段显示。
*************************** 1. row ***************************
Table: teacher
Create Table: CREATE TABLE `teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(20) NOT NULL COMMENT '姓名',
`phone` varchar(20) DEFAULT NULL COMMENT '电话',
`add` varchar(100) DEFAULT '地址不详' COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
- 查询表结构: desc 表名;
mysql> desc teacher
-> ;
+-------+--------------+------+-----+--------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+--------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| add | varchar(100) | YES | | 地址不详 | |
+-------+--------------+------+-----+--------------+----------------+
4 rows in set (0.00 sec)
创建表
-
简单表创建
- 语法: create table `表名` (字段名 字段类型,字段名 字段类型,…)
mysql> create table student(id int, name varchar(20), score int); Query OK, 0 rows affected (0.03 sec)
-
复杂表创建
- 语法:create table [if not exists] `表名` ( 字段名 类型 列属性 ,字段名 类型 列属性 …)
- 列属性:
- not null | null 非空、空
- auto_increment 自动增长
- primary key 主键(非空、唯一)
- comment 备注、说明
- default ‘默认值’
- SQL语句中的 字符串 : 使用 单引号 ‘ ’
mysql> create table if not exists `doctor2` ( -> id int(9) not null auto_increment primary key comment '主键id', -> name varchar(12) not null comment '姓名', -> phone varchar(11) comment '电话号', -> `add` varchar(40) default '地址不详' comment '地址信息' -> )engine=innodb charset=utf8; Query OK, 0 rows affected (0.02 sec)
7. 使用 数据库名.表名 ,直接将表创建到指定的数据库下。
create table mydb1.t1 (id int);
删除表
- 语法:drop table [if exists] `表名`, `表名`, `表名` …;
mysql> drop table if exists `t2`, `t3`, `t4`;
Query OK, 0 rows affected (0.05 sec)
修改表
总体语法: alter table 表名 修改关键字。
- 添加表字段:
alter table 表名 add [column] 字段名 类型名 [位置]
mysql> alter table doctor2 add column age int(5) after name;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc doctor2;
+-------+-------------+------+-----+--------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+--------------+----------------+
| id | int(9) | NO | PRI | NULL | auto_increment |
| name | varchar(12) | NO | | NULL | |
| age | int(5) | YES | | NULL | |
| phone | varchar(11) | YES | | NULL | |
| add | varchar(40) | YES | | 地址不详 | |
+-------+-------------+------+-----+--------------+----------------+
位置:
first: 在起始添加新字段。
after:在指定字段后添加。
默认:添加至结尾。
- 删除字段:
alter table 表名 drop[column] 字段名
mysql> alter table doctor2 drop column phone;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc doctor2;
+-------+-------------+------+-----+--------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+--------------+----------------+
| id | int(9) | NO | PRI | NULL | auto_increment |
| name | varchar(12) | NO | | NULL | |
| age | int(5) | YES | | NULL | |
| add | varchar(40) | YES | | 地址不详 | |
+-------+-------------+------+-----+--------------+----------------+
-
修改字段:
-
既修改字段名,同时又修改字段类型 。—— change
语法:alter table 表名 change [column] 旧字段名 新字段名 新数据类型
mysql> alter table doctor2 change name fullname char(8); Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc doctor2; +----------+-------------+------+-----+--------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+--------------+----------------+ | id | int(9) | NO | PRI | NULL | auto_increment | | fullname | char(8) | YES | | NULL | | | age | int(5) | YES | | NULL | | | add | varchar(40) | YES | | 地址不详 | | +----------+-------------+------+-----+--------------+----------------+ 4 rows in set (0.00 sec)
-
只修改字段类型。—— modify
语法:alter table 表名 modify [column] 字段名 新数据类型
mysql> alter table doctor2 modify fullname char(3); Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc doctor2; +----------+-------------+------+-----+--------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+--------------+----------------+ | id | int(9) | NO | PRI | NULL | auto_increment | | fullname | char(3) | YES | | NULL | | | age | int(5) | YES | | NULL | | | add | varchar(40) | YES | | 地址不详 | | +----------+-------------+------+-----+--------------+----------------+ 4 rows in set (0.00 sec)
-
-
修改表名:
- rename table 表名 to 新表名
mysql> show tables; +-----------------+ | Tables_in_mydb2 | +-----------------+ | d2 | | doctor | | student | | teacher | +-----------------+ 4 rows in set (0.00 sec)
- alter table 表名 rename to 新表名。
mysql> alter table d2 rename to d3; Query OK, 0 rows affected (0.02 sec) mysql> show tables; +-----------------+ | Tables_in_mydb2 | +-----------------+ | d3 | | doctor | | student | | teacher | +-----------------+ 4 rows in set (0.00 sec)
-
修改引擎:
语法: alter table 表名 engine=新引擎名
mysql> alter table d3 engine=myisam; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
复制表
-
复制表数据,不复制表属性
create table 新表名 select * from 旧表名;
-
复制表属性,不复制表数据
create table 新表名 like 旧表名;
-
copy表:
- copy表属性
create table 新表名 like 旧表名;
- 插入原表所有数据
insert into 新表名 select * from 旧表名
表数据的 CURD
插入
语法: insert into 表名(字段名 …)values (对应值 …)
-
插入全部字段:
insert into stu(id, name, addr, score) values(1,'李白', '江南', 99);
-
插入部分字段:
insert into stu(id, name) values(1,'李白');
-
显示插入空值
insert into stu(id, name, addr) values(1,'李白', null);
-
隐式插入空值
insert into stu(name) values('李白');
-
显示插入默认值
insert into stu(name, addr) values('李白', default);
-
一次性插入多条
insert into stu values(null, '辛弃疾', '河北', 99), (null, '李贺', '湖北', 20), (null, '杜牧', '西安',80);
更新
语法:update 表名 set 字段名 = 字段值 [where 条件];
-
更新全部信息
update stu set addr='成都';
-
更新指定一个字段
update stu set addr='成都' where id = 10;
-
更新一个字段为默认值
update stu set addr=deafult where id = 10;
-
更新指定一条记录的多个字段。
update stu set name='李煜', addr='成都', score=99 where id = 10;
-
更新多条信息。
update stu set name='李煜', addr='成都', score=99 where id > 10; update stu set addr='beijing' where id=1 or id=3 or id=5 or id=7;
删除
语法:delete from 表名 [where条件]
-
删除所有记录
delete from stu;
-
删除指定一条记录
delete from stu where id = 10;
-
删除指定多条记录。
delete from stu where addr = '地址不详'; delete from stu where id >= 5; delete from stu where id = 5 or id = 7 or id = 9;
- 清空表:
- delete from 表名:
- 逐条删除表中的记录。删除后表空间不会释放。自增增长值不清零。
- truncate 表名:
- 直接将表摧毁,按表结构重建。删除后表空间会释放。自增增长值清零。
- delete from 表名:
[外链图片转存失败(img-0TXO4MSO-1566465963102)(课堂笔记.assets/1561368948366.png)]
简单查询
- select * from 表名 where 条件。
- select 字段名,字段名,。。。 表名 where 条件。
SQL分类
- DML:数据库操作语言: insert、update、delete、select。
- DDL:数据库定义语言:create、alter、drop、truncate
- DCL:数据库控制语言:commit、rollback
引擎和数据表文件
- MySQL数据库常用的引擎:innodb、myisam
- innodb:
- 表名.frm: 记录表结构
- 表名.ibd: 记录表数据的 索引信息。(表数据保存在 /var/lib/mysql/ibdata1 中。 该文件可以自动扩容)
- myisam:
- 表名.frm:记录表结构
- 表名.MYD: 存储表数据
- 表名.MYI: 存储表索引
- MySQL数据库使用的默认引擎为:Innodb