MySQL基本操作笔记
一、数值类型
1、常量
(1)字符串常量
ASCII字符串常量占一个字节
例如:'Hello Word'
Unicode字符串常量占两个字节
例如:N'Hello Word'
mysql> select 'Hello Word';
+------------+
| Hello Word |
+------------+
| Hello Word |
+------------+
1 row in set (0.00 sec) mysql> select N'Hello Word';
+------------+
| Hello Word |
+------------+
| Hello Word |
+------------+
1 row in set (0.01 sec)
(2)数值常量
整数常量:不带小数的十进制数
浮点数常量:使用小数点数的数值常量
例如:5.23、10.5E5(科学计数法)
mysql> select 3.14159;
+---------+
| 3.14159 |
+---------+
| 3.14159 |
+---------+
1 row in set (0.00 sec) mysql> select 100e-3;
+--------+
| 100e-3 |
+--------+
| 0.1 |
+--------+
(3)十六进制常量
MySQL支持十六进制;一个十六进制值通常指定为一个字符串常量,每对十六进制数字被转换为一个字符;其最前面有一个大写字母“X”或者小写字母“x”;0-9,A(a)-F(f);
例如:X'41'表示大写字母A;x'4D7953514C'表示字符串MySQL;
mysql> select X'41';
+-------+
| X'41' |
+-------+
| A |
+-------+
1 row in set (0.00 sec)
(4)日期时间常量
用单引号将表示日期时间的字符串括起来构成;
日期型常量包括年、月、日,数据类型为DATE;例如:'2021-09-30';
时间型常量包括小时、分钟、秒、微秒,数据类型为TIME;例如:'13:47:00:00';
mysql> select '2021-09-30 13:56:00';
+---------------------+
| 2021-09-30 13:56:00 |
+---------------------+
| 2021-09-30 13:56:00 |
+---------------------+
1 row in set (0.01 sec)
(5)位字段值
可以使用b'value'符号写位字段值;例如b'0' ,b'1';不同的数据库,展示的内容不一样;
mysql> select b'1';
+------+
| b'1' |
+------+
| |
+------+
1 row in set (0.00 sec)
(6)布尔值
TRUE 1
FALSE 0
mysql> select TRUE;
+------+
| TRUE |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
(7)NULL值
通常用来表示空值,无数据;但是并不等同于字符串类型的空字符串
mysql> select NULL;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.04 sec)
2、变量
用户可以在表达式中使用自己定义的变量,称为用户变量;
使用用户变量前必须先定义或者初始化;如果使用没有初始化的变量,它的值位NULL;
用户变量前加@用来区分列名;
系统变量前加两个@@;
mysql> set @a=1;
Query OK, 0 rows affected (0.01 sec) mysql> select @a;
+------+
| @a |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
3、运算符
(1)算数运算符
+(加)、-(减)、*(乘)、/(除)、%(取模)
mysql> select 7%3;
+------+
| 7%3 |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
(2)位运算符
&(位与)、|(位或)、^(位异或)、~(位取反)、>>(位右移)、<<(位左移);
例如:二进制101转十进制:1*2**2+0*2**1+1*2**0=4+0+1=5
二进制101向左移1位:1010 转换为十进制为:10;原来的数乘以2;
二进制101向右移动1位:10;转换位十进制为:2;原来的数除以2取整;
mysql> select 5&1;
+-----+
| 5&1 |
+-----+
| 1 |
+-----+
解释:
5的二进制为101
1的二进制为001 1与0 结果为假0
0与0 结果为假0
1与1 结果为真1
所以结果为1;
mysql> select 5|1;
+-----+
| 5|1 |
+-----+
| 5 |
+-----+
解释:
5的二进制为101;
1的二进制位001; 1或0 结果为真1
0或0 结果假0
1或1 结果为真1
所以结果为5;
mysql> select 5 >> 1;
+--------+
| 5 >> 1 |
+--------+
| 2 |
+--------+
1 row in set (0.00 sec) mysql> select 5 << 1;
+--------+
| 5 << 1 |
+--------+
| 10 |
+--------+
1 row in set (0.00 sec)
(3)比较运算符
其结果为逻辑值真、假、NULL
=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、<>/!=(不等于)、<=>(相等或等于空)
mysql> select 5 > 4;
+-------+
| 5 > 4 |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)
(4)逻辑运算符
NOT或! 逻辑非
AND或&& 逻辑与
OR或|| 逻辑或
XOR 逻辑异或
mysql> select 5 >4 OR 5>8;
+-------------+
| 5 >4 OR 5>8 |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec) mysql> select 5 >4 AND 5>8;
+--------------+
| 5 >4 AND 5>8 |
+--------------+
| 0 |
+--------------+
1 row in set (0.00 sec)
4、表达式
表达式就是常量、变量、列名、复杂计算、运算符和函数的组合;
5、内置函数
ABS() 绝对值
SORT() 开根号
COUNT() 聚合
ASCII()
CHAR()
NOW() 获取当前时间
YEAR()
ENCODE()/ENCRYPT() 加密函数
IF())/IFNULL() 流程控制函数
FORMAT() 格式化函数
CAST() 类型转换函数
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2021-09-30 16:18:49 |
+---------------------+
1 row in set (0.00 sec)
mysql> select abs(-10);
+----------+
| abs(-10) |
+----------+
| 10 |
+----------+
1 row in set (0.00 sec)
mysql> select ASCII('A');
+------------+
| ASCII('A') |
+------------+
| 65 |
+------------+
1 row in set (0.00 sec)
mysql> select char(65);
+----------+
| char(65) |
+----------+
| A |
+----------+
1 row in set (0.00 sec)
mysql> select year(now()); #month(now()),day(now())
+-------------+
| year(now()) |
+-------------+
| 2021 |
+-------------+
1 row in set (0.00 sec)
mysql> select cast(X'41' as unsigned); #此时不再是字符a;而是字符65;
+-------------------------+
| cast(X'41' as unsigned) |
+-------------------------+
| 65 |
+-------------------------+
1 row in set (0.00 sec)
二、数据库定义
1、创建数据库
语法格式:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[DEFAULT] CHARACTER SET charset_name
|[DEFAULT] COLLATE collation_name
说明:语句中"[]"内为可选项;
db_name:数据库名
IF NOT EXISTS:在建数据可前进行判断,只有该数据库目前不存在是才执行CREATE DATABASES操作;
DEFAULT:指定默认值;
CHARACTER SET:指定数据库字符集(Charset)
charset_name为字符集名称
COLLATE:指定字符集的校对规则
2、选择数据库
USE db_name;
3、修改数据库
语法格式:
ALTER {DATABASE | SCHEMA} [db_name]
alter_specification [,alter_specification]
[DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
4、删除数据库
语法格式:
DROP DATABASE [IF EXISTS] db_name
db_name是要删除的数据库名;可以使用IF EXISTS子句以避免删除不存在的数据库时出现的MySQL错误信息;
5、查看数据库
SHOW [DATABASES | SCHEMAS]
三、表定义
数值类型:
整型 INT
浮点型 FLOAT、DOUBLE、DECIMAL
日期和时间类型:
日期类型 DATE(YYYY-MM-DD)、YEAR
日期时间类型 DATETIME、TIME
时间戳类型 TIMESTAMP
字符串类型:
固定长度类型 CHAR 最大长度255
可变长度类型 VARCHAR 最大长度65535
文本类型 TEXT
1、创建表
语法格式:
CREATE TABLE [IF NOT EXISTS] tbl_name(字段名1 数据类型 [列级完整性约束条件] [默认值] [,字段名2 数据类型 [列级完整性约束条件] [默认值]] [表级完整性约束])[ENGINE=引擎类型];
mysql> create table student (id int not null auto_increment, name varchar(10),age int);
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
#自增列只能有1列,而且必须是key;
mysql> create table student (id int not null auto_increment primary key, name varchar(10),age int);
Query OK, 0 rows affected (0.01 sec)
#id数据类型为int型,不允许为空,且为自增长,主键;
2、添加字段
ALTER TABLE tbl_name ADD [COLUMN] 新字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名]
3、修改字段
ALTER TABLE tbl_name CHANGE [COLUMN] 原字段 新字段名 数据类型
[约束条件]
ALTER TABLE tbl_name ALTER [COLUMN] 字段名 {SET | DROP} DEFAULT;
ALTER TABLE tbl_name MODIFY [COLUMN] 字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名]
4、删除字段
ALTER TABLE tbl_name DROP [COLUMN] 字段名;
5、重命名表
ALTER TABLE 原表名 RENAME [TO] 新表名
RENAME TABLE 原表名1 TO 新表名1 [,原表名2 TO 新表名2]......;
6、删除表
DROP TABLE [IF EXISTS] 表1[,表2]......
7、查看表
SHOW TABLES [{FROM | IN} db_name];
8、查看表结构
SHOW COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name];
DESC tbl_name;
四、索引定义
可以理解成目录,在查找时有目录查找速度会加快;
用途划分:
普通索引(INDEX) 类似于排序
唯一性索引(UNIQUE) 在某一个特定的列中不允许有重复值;
主键(PRIMARY KEY)
全文索引(FULLTEXT) 引擎MyIAM支持
聚簇索引 引擎InnoDB支持
列表索引
单列索引
组合索引
1、索引的创建
(1)方法
CREATE TABLE tbl_name[col_name data_type] [CONSTRAINT index_name]
[UNIQUE][INDEX|KEY][index_name](index_col_name[lengh])[ASC(升序)|DESC(降序)]
(2)方法(常用)
CREATE [UNIQUE] INDEX index_name ON tbl_name(col_name[(length)][ASC|DESC],...)
(3)方法
ALTER TABLE tbl_name ADD[UNIQUE|DULLTEXT][INDEX|KEY][index_name](col_name[length][ASC|DESC],...)
2、索引的查看
语法格式:
SHOW {INDEX|INDEXS|KEYS}{FROM|IN} tbl_name [{FROM|IN} db_name]
3、索引的删除
语法格式:
(1)DROP INDEX index_name ON tbl_name;
(2)ALTER TABLE tbl_name DROP INDEX index_name;
五、数据更新
1、插入数据
INSERT语法格式:
INSERT INTO tbl_name(column_list) VALUES (value_list1)[,(value_list2)],...
从数据查询中插入数据
INSERT INTO tbl_name1 (column_list1) SELECT (column_list2) FROM tbl_name2 WHERE (condition)
注意:column_list1与column_list2必须个数相同且数据类型一一对应;
使用INSERT...SET语句插入部分列值数据
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...
使用INSERT...SELECT语句插入子查询数据
INSERT [INTO] tbl_name [(col_name,..)] SELECT ...
2、删除数据
语法格式:
DELETE FROM tbl_name [WHERE <condition>];
删除所有记录可以使用:
TRUNCATE [TABLE] tbl_name;
注意:TRUNCATE是删除整个表,重新建一个表,在删除全部数据时候效率高于DELETE,DELETE逐条删除;TRUNCATE无法恢复,AUTO_INCREMENT计数器重置;
3、修改数据
语法格式:
UPDATE tbl_name SET col_name1=expr1 [,col_name2=expr2 ...] [WHERE where_definition]
六、视图定义
视图是从一个或多个表(或视图)导出的表;例如,对于一个学校,其学生的情况存于数据库的一个或多个表中,而作为学校的不同职能部门,所关心的学生数据的内容是不同的;
视图是一张虚表;
视图一经定义以后,就可以像表一样被查询、修改、删除和更新;
1、创建视图
语法格式:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
mysql> select * from student1;
+----+-------+------+-------+
| id | name | age | class |
+----+-------+------+-------+
| 1 | jerry | 30 | NULL |
| 2 | tom | 22 | NULL |
| 3 | marry | 20 | NULL |
| 4 | jack | 18 | NULL |
| 5 | lilei | 30 | 1-1 |
+----+-------+------+-------+
mysql> create view v_avg(avg) as select avg(age) from student1;
mysql> create view v_age as select age from student1 where age>=20;
2、删除视图
语法格式:
DROP VIEW [IF EXISTS]
view_name [,view_name] ...
3、修改视图定义
语法格式:
ALTER VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
4、查看视图定义
语法格式:
SHOW CREATE VIEW view_name
七、数据查询
1、select语句
SELECT [ALL|DISTINCT(唯一,去除重复)|DISTINCTROW] select_expr,... [FROM table_reference [,table_reference]...] [WHERE where_definition] /*WHERE子句/
[GROUP BY {col_name|expr|position} [ASC|DESC],...[WITH ROLLUP]] /*GROUP BY子句*/
[HAVING where_definition] /*HAVING子句*/
[ORDER BY {col_name|expr|position} [ASC|DESC],...] /*ORDER BY子句*/
[LIMIT {[offset,] row_count|row_count OFFSET offset}] /*LIMIT子句*/
子句 说明 是否必须使用
SELECT 要返回的列或表达式 是
FROM 从中检索数据的表 仅在从表选择数据是使用
WHERE 行级过滤 否
GROUP BY 分组说明 仅在按组计算聚合时使用
HAVING 组级过滤 否
ORDER BY 输出排序顺序 否
LIMIT 要检索的顺序 否
2、列的选择与指定
(1)选择指定的列
SELECT list1,list2,... FROM table_name;
(2)选择所有列
SELECT * FROM table_name;
3、定义并使用列的别名
SELECT list1 AS alias_name1, list2 AS alias_name2,..., FROM table_name;
4、计算列值
函数名 说明
COUNT 求组中项数,返回int类型整数
MAX 求最大值
MIN 求最小值
SUM 求和
AVG 求平均
STD或STDDEV 返回给定表达式中所有值的标准值
VARIANCE 返回给定表达式中所有值的方差
GROUP_CONCAT 返回由属于一组的列值链接组合而成的结果
BIT_AND 逻辑或
BIR_OR 逻辑与
BIT_XOR 逻辑异或
mysql> select * from student;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | zhang | 18 |
| 2 | wang | 20 |
| 6 | li | 15 |
| 7 | zhao | 13 |
+----+-------+------+
4 rows in set (0.00 sec)
mysql> select count(age) from student where age >= 15;
+------------+
| count(age) |
+------------+
| 3 |
+------------+
1 row in set (0.00 sec)
mysql> select sum(age) from student where age >= 15;
+----------+
| sum(age) |
+----------+
| 53 |
+----------+
1 row in set (0.01 sec)
mysql> select avg(age) from student;
+----------+
| avg(age) |
+----------+
| 16.5000 |
+----------+
1 row in set (0.00 sec)
mysql> select * from student order by age asc;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 7 | zhao | 13 |
| 6 | li | 15 |
| 1 | zhang | 18 |
| 2 | wang | 20 |
+----+-------+------+
4 rows in set (0.00 sec)
mysql> select * from student order by age desc;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 2 | wang | 20 |
| 1 | zhang | 18 |
| 6 | li | 15 |
| 7 | zhao | 13 |
+----+-------+------+
4 rows in set (0.00 sec)
mysql> select * from student order by age desc limit 2;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 2 | wang | 20 |
| 1 | zhang | 18 |
+----+-------+------+
2 rows in set (0.00 sec)
mysql> select * from student;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | zhang | 18 |
| 2 | wang | 20 |
| 6 | li | 15 |
| 7 | zhao | 13 |
+----+-------+------+
4 rows in set (0.00 sec)
mysql> select sum(id*age) as 'id乘以年龄的总和' from student; #(1*18+2*20+6*15+7*13)
+-------------------------+
| id乘以年龄的总和 |
+-------------------------+
| 239 |
+-------------------------+
1 row in set (0.00 sec)
5、FROM子句多表连接查询
(1)内连接
FROM table1 [INNER] JOIN table2 ON 连接条件
等值连接
FROM table1, [table2] ... WHERE table1.字段 <比较运算符> table2.字段
(2)外连接
左连接
FROM table1 [LEFT] JOIN table2 ON 连接条件
右连接
FROM table1 [RIGHT] JOIN table2 ON 连接条件
mysql> select * from student;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | zhang | 18 |
| 2 | wang | 20 |
| 6 | li | 15 |
| 7 | zhao | 13 |
+----+-------+------+
4 rows in set (0.00 sec)
mysql> select * from student1;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | jerry | 30 |
| 2 | tom | 22 |
| 3 | marry | 20 |
| 4 | jack | 18 |
+----+-------+------+
4 rows in set (0.00 sec)
mysql> select * from student join student1 on student.age=student1.age;
+----+-------+------+----+-------+------+
| id | name | age | id | name | age |
+----+-------+------+----+-------+------+
| 2 | wang | 20 | 3 | marry | 20 |
| 1 | zhang | 18 | 4 | jack | 18 |
+----+-------+------+----+-------+------+
2 rows in set (0.00 sec)
6、WHERE子句与查询条件
查询条件 操作符
比较 =, <>, !=, <, <=, >, >=, !, NOT+比较运算符
确定范围 BETWEEN AND, NOT BETWEEN AND
确定集合 IN, NOT IN
字符匹配 LIKE, NOT LIKE
空值 IS NULL, IS NOT NULL
MySQL基本操作笔记的更多相关文章
- mysql 基本操作语句
mysql 基本操作笔记: 创建表demo:CREATE TABLE `role` ( `role_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMME ...
- MYSQL基础笔记(二)-SQL基本操作
SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...
- MySQL必知必会笔记-Mysql基本操作
Mysql基本操作 mysql的基本操作包括增.删.改.查,本书中前三章简单的介绍MySQL为何物,查是mysql中非常重要的功能,4-6章展示了mysql的查(查询--select)的简单实现,my ...
- css属性编写顺序+mysql基本操作+html细节(个人笔记)
css属性编写顺序: 影响文档流的属性(比如:display, position, float, clear, visibility, table-layout等) 自身盒模型的属性(比如:width ...
- MYSQL基础笔记(四)-数据基本操作
数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...
- MYSQL基础笔记(五)- 练习作业:站点统计练习
作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...
- MYSQL基础笔记(三)-表操作基础
数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...
- MYSQL基础笔记(一)
关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...
- MySQL入门笔记
MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: · rpm包形式 · 通用二进制 ...
随机推荐
- Git 日志提交规范
Commit messages的基本语法 当前业界应用的比较广泛的是 Angular Git Commit Guidelines 具体格式为: <type>: <subject> ...
- Next.js 在 Serverless 中从踩坑到破茧重生
作者 杨苏博,偏后端的全栈开发,目前负责腾云扣钉的 Cloud Studio 产品.在团队中负责接技术架构设计与 Review.Cloud Studio 编辑器内核设计与开发.部分核心插件设计与开发: ...
- vue中使用echarts的两种方法
在vue中使用echarts有两种方法一.第一种方法1.通过npm获取echarts npm install echarts --save 2.在vue项目中引入echarts 在 main.js 中 ...
- python之名称空间与函数对象
目录 名称空间 内置名称空间 全局名称空间 局部名称空间 名称的查找顺序 作用域 global关键字 nonlocal关键字 函数名的多种用法 函数的嵌套 名称空间 名称空间就是变量名与变量值绑定关系 ...
- 【网站】windows phpstudy v8.1搭建https
这两天在搭建微擎,使用了官方推荐的一键安装环境,在搭建完站点后,想开启https. 发现如下图所示,无论关闭网站,还是关闭nginx.都无法建立https.网上也找不到相关流程,后来试着关闭nginx ...
- synchronized真的很重么?
synchronized 是java中常见的保证多线程访问共享资源时的安全的一个关键字.很多人在讲到synchronized 时都说synchronized 是一把重量级的锁,那么synchroniz ...
- Ceph集群搭建记录
环境准备 基础环境 node00 192.168.247.144 node00 node01 192.168.247.135 node01 node02 192.168.247.143 node02 ...
- ICDAR2013
参考:https://www.cnblogs.com/dmyu/p/6483357.html以及博主相关文章等.
- C语言- 基础数据结构和算法 - 动态数组
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》
写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...