推荐学习文档菜鸟教程:https://www.runoob.com/mysql/mysql-tutorial.html
SQL是结构化查询语句(Structured Query Language)的缩写,用来访问和操作数据库系统。
数据库(DataBase,简称DB)
概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据仓库(即就是用于存储和管理数据的仓库)
作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余…
数据库的特点:
数据库总览 :
关系型数据库
(SQL)非关系型数据库
(NOSQL)数据库管理系统 ( DataBase Management System )
数据库管理软件 , 科学组织和存储数据 , 高效地获取和维护数据
数据库的模型
数据库可以按照数据结构来组织,存储和管理数据,数据库可以分为----三种模型
层次模型
就是上下级的层次关系来组织数据的一种形式,层次模型看起来像一棵树
网状模型
把每个节点和其他节点连接起来,网状模型看起像城市之间的路网
关系模型
可以看做一个二维表格,任何数据都可以通过行号+列号来唯一确定,看起来像是一个Excel表
主流数据库:
目前,主流的关系数据库主要分为以下几类
概念 : 是现在流行的开源的,免费的 关系型数据库
历史 : 由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
特点 :
SQLyog:
可手动操作,管理MySQL数据库的软件工具
特点 : 简洁 , 易用 , 图形化
使用SQLyog管理工具自己可以完成以下操作 :
Mysql常用控制台命令:
在管理员模式下:
在MySql管理页面下:
- 查看所有数据库名称:show databases;
- 创建名字为name的数据库:create database name;
- 删除名字为name的数据库:drop database name;
- 显示选中数据库中所有的表:show tables;
- 显示表选中数据库中名为user表的列信:describe user;
- 使用名字为name的数据库:use database name;
- 选择要操作的数据库:use name;
- 查看表中的数据:select *from name;
- 刷新数据库:flush privileges;
- 查询名为use的命令的使用方法:? use;
- 退出MySql服务器:exit;
SQL语句
什么是SQL:Structured Query Language:结构化查询语言。
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
SQL分类
1) DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
在命令行窗口执行SQL语句:
DDL:操作数据库、表
操作数据库:CRUD
create database 数据库名称;
create database if not exists 数据库名称;
create database 数据库名称 character set 字符集名;
create database if not exists db4 character set gbk;
创建数据库,判断不存在,再创建: create database if not exists 数据库名称;
创建数据库,并指定字符集:create database 数据库名称 default character set 字符集名;
利用show create database 数据库的名字;
2. R(Retrieve):查询
查询所有数据库的名称: show databases;
查询某个数据库的字符集:查询某个数据库的创建语句:show create database 数据库名称;
3. U(Update):修改
修改数据库的字符集: alter database 数据库名称 character set 字符集名称;
4. D(Delete):删除
删除数据库:drop database 数据库名称;
判断数据库存在,存在再删除: drop database if exists 数据库名称;
5. 使用数据库
查询当前正在使用的数据库名称:select database();
使用数据库: use 数据库名称;
操作表
1. C(Create):创建
1. 语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
* 注意:最后一列,不需要加逗号(,)
* 数据库类型:
1. int:整数类型
* age int,
2. double:小数类型
* score double(5,2)
3. date:日期,只包含年月日,yyyy-MM-dd
4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
* name varchar(20):姓名最大20个字符
* zhangsan 8个字符 张三 2个字符
* 创建表
create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);
* 复制表:
* create table 表名 like 被复制的表名;
2. R(Retrieve):查询
* 查询某个数据库中所有的表名称
* show tables;
* 查询表结构
* desc 表名;
3. U(Update):修改
1. 修改表名
alter table 表名 rename to 新的表名;
2. 修改表的字符集
alter table 表名 character set 字符集名称;
3. 添加一列
alter table 表名 add 列名 数据类型;
4. 修改列名称 类型
alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
5. 删除列
alter table 表名 drop 列名;
4. D(Delete):删除
* drop table 表名;
* drop table if exists 表名 ;
SQL语句中的3种注释:
1. 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)
2. 多行注释: /* 注释 */
注意:
在询问窗口输入下面的代码
创建grade表的sql语句如下:
CREATE TABLE grade (
gradeId int(11) NOT NULL COMMENT '年级Id',
gradeName varchar(50) DEFAULT NULL COMMENT '年级名字',
PRIMARY KEY (gradeId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
根据此段代码,创建表的sql语句格式如下:
#创建表格式
CREATE TABLE 表名(
字段名 数据类型(长度) 修饰符,
字段名 数据类型(长度) 修饰符,
字段名 数据类型(长度) 修饰符
)
创建数据库的sql语句:
#创建数据库
CREATE DATABASE 数据库名;
注意:
结构化查询语句SQL
结构化查询语句分类:
名称 | 解释 | 命令 |
---|---|---|
DDL(数据定义语言) | 定义和管理数据对象,如数据库,数据表等 CREATE、DROP、ALTER | |
DML(数据操作语言) | 用于操作数据库对象中所包含的数据 INSERT、UPDATE、DELETE | |
DQL(数据查询语言) | 用于查询数据库数据 SELECT | |
DCL(数据控制语言) | 用来管理数据库的语言,包括管理权限及数据更改 GRANT、COMMIT、ROLLBACK |
数值类型
类型 | 说明 | 取值范围 | 存储需求 |
---|---|---|---|
tinyint | 非常小的数据 | 有符号值 -27 ~ 27;无符号值 0~28 | 1字节 |
smallint | 较小的数据 | 有符号值 -215 ~215-1;无符号值 0~216-1 | 2字节 |
mediumint | 中等大小的数据 | 有符号值 -223 ~223-1;无符号值 0~224-1 | 3字节 |
int | 标准整数 | 有符号值 -221 ~221-1;无符号值 0~222-1 | 4字节 |
bigint | 较大的整数 | 有符号值 -243 ~243-1;无符号值 0~244-1 | 8字节 |
float | 单精度浮点数 | ±1.1754351e-38 | 4字节 |
double | 双精度浮点数 | ±2.22507e-306 | 8字节 |
decimal | 字符串形式的浮点数 | decimal(m,d) | m字节 |
字符串类型
类型 | 说明 | 最大长度 |
---|---|---|
char | 固定长字符串,检索快但浪费空间 0 <= M <= 255 | M字符 |
varchar | 可变字符串 0 <= M <= 65535 | 变长度 |
tinytext | 微型文本串 | 28-1 字节 |
text | 文本串 | 216-1 字节 |
日期和时间型数值类型
类型 | 说明 | 取值范围 |
---|---|---|
DATE | YYYY-MM-DD,日期格式 | 1000-01-01~9999-12-31 |
TIME | Hh:mm:ss,时间格式 | -838:59:59~838:59:59 |
DATETIME | YY-MM-DD hh:mm:ss | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 |
TIMESTAMP | YYYYMMDDhhmmss格式表示的时间戳 | 197010101000000~2037年的某个时刻 |
YEAR | YYYY格式的年份值 | 1901~2155 |
NULL值
数据字段属性
UnSigned :
ZEROFILL :
Auto_InCrement :
NULL 和 NOT NULL :
DEFAULT :
修改表名 :
ALTER TABLE 旧表名 RENAME AS 新表名
添加字段 :
ALTER TABLE 表名 ADD字段名 列属性[属性]
修改字段 :
ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
删除字段 :
ALTER TABLE 表名 DROP 字段名
增添数据:
#INSERT INTO命令
INSERT INTO Table_name(字段1,字段2,字段3,...) VALUES('值1','值2','值3')
# 添加一行数据时'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致.
#示例
#插入单个数据,主键不自增
INSERT INTO height(`studentNo`,`height`) VALUES (1000,178);
#可以省略字段名
INSERT INTO height VALUES (1000,178);
#插入多个数据,主键不自增
INSERT INTO height(`studentNo`,`height`) VALUES (1001,188),(1002,170),(1003,178),(1004,158);
#插入单个数据,主键自增
INSERT INTO height (`tall`) VALUES (178);
#插入多个数据,主键自增
INSERT INTO height (`tall`) VALUES (178),(180),(168),(190);
删除数据:
# DROP TABLE [IF EXISTS] 表名
# IF EXISTS判断是否存在该数据表,如果删除不存在的数据表会抛出错误
# DELETE FROM tabel_name WHERE condition;
# condition为筛选条件,如不指定则删除该表的所有列数据
# TRUNCATE [TABLE] table_name;
# 用于完全清空数据表,但表结构,索引,约束等不变
#举例
#使用delete删除height表中studentNo=1004的数据,其中studentNo属性为自增
DELETE FROM height WHERE studentNo=1004;
#删除后,使用INSERT添加数据
INSERT INTO height(`height`) VALUES (178);
#执行结果:添加的该条数据的studentNo不再是1004,而是1005
#结论:使用delete删除数据,自增当前值依然从原来基础上进行,会记录日志.
#使用truncate删除height数据表
TRUNCATE TABLE height;
#删除后,使用INSERT添加数据
INSERT INTO height(`height`) VALUES (178);
#执行结果:添加的该条数据的studentNo不再是1004,而是1
#结论:使用truncate删除数据,自增当前值会恢复到初始值重新开始;不会记录日志.
修改数据:
#修改表名 :ALTER TABLE 旧表名 RENAME AS 新表名
#添加字段 :ALTER TABLE 表名 ADD字段名 列属性[属性]
#修改字段 :ALTER TABLE 表名 MODIFY 字段名 列类型[属性] (适用于不改变列名只改变列属性的情况)
# ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
#删除字段 :ALTER TABLE 表名 DROP 字段名
#示例
#修改列字段studenNo的属性,不修改列字段名称
ALTER TABLE height MODIFY `studentNo` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号';
#修改列字段studenNo的属性,修改列字段名称
ALTER TABLE height CHANGE `height` `tall` INT(3) NOT NULL COMMENT '学号';
#修改数据表中某一行的某个列值
# UPDATE table_name SET column_name=value [,column_name2=value2,...] WHERE condition;
#总结:column_name 为要更改的数据列,value 为修改后的数据,可以为变量,具体指表达式或者嵌套的SELECT结果。condition 为筛选条件,如不指定则修改该表的所有列数据。
#示例
#修改studentNo=1002的学生的身高
UPDATE height SET `height`=190 WHERE studentNo=1002;