MySQL学习笔记(一)基础概念

写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明。

文章仅供参考,如需深入了解,请查阅MySQL参考手册。附上下载链接:

链接:https://pan.baidu.com/s/1FpONA6oyI6O73m_ebN7J_Q 
提取码:7pr8 
复制这段内容后打开百度网盘手机App,操作更方便哦


目录

1. Database Management System (DBMS)数据库管理系统

2. Database Approach数据库方法

2.1 Data control language (DCL).数据控制语言

2.2 Data definition language (DDL).数据定义语言

2.3 Data manipulation language (DML).数据操作语言

2.4 Data query language (DQL).数据查询语言

3. MySQL语句构成

3.1 讲解

3.2 例子,便于理解

4. 表字段类型总结

4.1 数值

4.2 字符串

4.3 日期

4.4 有符号&无符号的SQL语句

4.5 关于类型选择的解释

4.5.1 关于INT

4.5.2 关于CHAR, VARCHAR, 和TEXT

5. 修饰符总结

5.1 AUTO_INCREMENT

5.2 NULL 和 NOT NULL

5.2.1 NULL

5.2.2 ''

5.2.3 NULL和''的区别

5.3 DEFAULT

参考资料


1. Database Management System (DBMS)数据库管理系统

一种软件系统,用户可以定义(define)、创建(create)、维护(maintain)和控制(control)对数据库的访问。

数据库应用程序:通过向DBMS发出适当的请求(SQL语句)与数据库交互的计算机程序。   

© Pearson Education Limited 1995, 2005

DBMSs的优点:

  1. 控制数据冗余
  2. 数据一致性
  3. 从相同数量的数据中获取更多信息
  4. 数据共享
  5. 改进的数据完整性
  6. 提高了安全性
  7. 标准的执行
  8. 规模经济

2. Database Approach数据库方法

2.1 Data control language (DCL).数据控制语言

1)GRANT
2)COMMIT
3)ROLLBACK

2.2 Data definition language (DDL).数据定义语言

- 允许指定数据类型、结构和任何数据约束。
- 所有规范都存储在数据库中。

1)CREATE
2)DROP
3)ALTER

2.3 Data manipulation language (DML).数据操作语言

- 数据的通用查询工具(查询语言)

1)INSERT
2)DELETE
3)UPDATE

2.4 Data query language (DQL).数据查询语言

1)SELECT

3. MySQL语句构成

3.1 讲解

SQL语句由保留字(reserved words )和用户定义字(user-defined words)和符号组成:
- 保留字是SQL的固定部分,必须严格按照要求拼写,不能跨行拆分。一般由大写字母表示。(虽然很多数据库在实际的操作中用小写英文来表示保留字,例如SELECT写成select,也可以成功运行,但是建议区分大小写以养成良好的习惯,方便阅读)
- 自定义词由用户组成,表示关系、列、视图等各种数据库对象的名称。一般由小写字母表示。


- * 通配符,表示所有。
- | 表示在备选方案中进行选择。
- [ ] 方括号表示可选元素。
- ...表示可选重复(0或更多)。
- &表示并且。
- % 模糊查询符。
- =等于
- <>不等于
- >大于, <小于
- >=大于等于, <= 小于等于
- COMMENT备注
- BETWEEN 表示在某个范围内,是闭区间, 等同于a<=所选区间<=b (a<=b)
- IN 表示指定针对某个列的多个可能值, 满足任何一个即可
- LIKE 表示搜索某种模式
- -- 单行注释,--开头的语句不会被执行和解析,只能作为描述。
- /*多行注释line1
  对行注释line2
  对行注释linex*/


文字是SQL语句中使用的常量。
所有非数字文字必须用单引号括起来(例如“China”)。
所有数字文字不得用引号括起来(例如10010).

SQL语句对于并列条件用逗号(,)连接, 在语句结尾用分号(;)结束。

3.2 例子,便于理解

-- 创建表
CREATE TABLE Staff(staffNo VARCHAR(5), lName VARCHAR(15), salary DECIMAL(7,2));


-- 向表插入数据
INSERT INTO Staff VALUES (‘SG16’, ‘Brown’, 8300);


-- 从表选择数据
SELECT staffNo, lName, salary
FROM Staff
WHERE salary > 10000;

4. 表字段类型总结

4.1 数值

数值可以分为有符号(包含负数)金额无符号(0和正数)。

  1. TINYINT (有符号:-128 ---127, 无符号: 0 --- 255)
  2. SMALLINT (有符号:-32768 --- 32767, 无符号:0 --- 65535)
  3. MEDIUMINT (有符号:-8388608 --- 8388607, 无符号:0 --- 16777215)
  4. INT (有符号:-2147483648 --- 2147483647, 无符号:0 --- 4294967295)
  5. BIGINT (有符号:-9223372036854775808 --- 9223372036854775807,无符号:0 --- 18446744073709551615)

4.2 字符串

  1. CHAR(M)                     0 --- 255
  2. VARCHAR                   0 --- 65535
  3. TINYTEXT                   0 --- 255
  4. TEXT                           0 --- 65535
  5. MEDIUMTEXT            0 ---16777215
  6. LONGTEXT                0 --- 4294967295

4.3 日期

INT

TIMESTAMP

4.4 有符号&无符号的SQL语句

一些例子:

-- 单行注释符

/* 多行注释符
int类型数值举例 */

-- 有符号数值:
CREATE TABLE t1(id INT);

-- 无符号数值:
CREATE TABLE t2(id INT UNSIGNED);
/* 多行注释符
char类型数值举例 */
CREATE TABLE t3(username CHAR(5));

/* 多行注释符
char类型数值举例 */
CREATE TABLE t4(username VARCHAR(5));
-- 日期类型
CREATE TABLE t5(myTime INT);

4.5 关于类型选择的解释

4.5.1 关于INT

1)INT(M) 在 integer 数据类型中,M 表示最大显示宽度。M的值和INT(M)所占储存空间的多少没有任何关系,M为任何值在磁盘上都是占用 4 btyes 的存储空间。例如 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。

M与显示给用户的方式不同有关,例如如果M的值为10,INT(10)显示结果为0000000010, int(3)显示结果为010, 它们显示的长度不一样,但是都占用了四个字节的空间。

2)对于int类型的,如果不需要存取负值,最好加上unsigned。一方面是日常工作中数据统计出现负数的情况不多(特殊行业除外), 另一方面是可以尽量利用内存。

4.5.2 关于CHAR, VARCHAR, 和TEXT

1)最主要的区别是长度的区别:

char最大255个字节,varchar最大65535个字节(所以,不同字符集,所能存储的字符个数是不同的,varchar 是 256个字符以内),text最大65535字符

2)它们三个的存储方式和数据的检索方式都不一样。数据的检索效率是:char>varchar>text。

3)空间占用方面,CHAR为定长,VARCHAR,TEXT为变长:

CHAR(M) M个字节,0 <=M<= 255,
VARCHAR(M) L+1个字节,其中L<=M且0 <=M<= 65535
TEXT L+2个字节,其中L< 216

CHAR在保存的时候,后面(右边)会用空格填充到指定的长度,在检索的时候后面的空格会去掉,所以检索出来的数据需要再用什么trim之类的函数去处理。(与sql server可能有些不同)
Varchar在保存的时候,不进行填充。当值保存和检索时尾部的空格仍保留。
TEXT列不能有默认值,存储或检索过程中,不存在大小写转换.
当存储的字符超过他们定义的长度时候,如果不是在sql服务器的严格模式下,都会自动截取合适的字段存储,而不会出现错误。但是,如果是中文的话同样要报错误, 比如定义char(4),然后insert (‘c哈哈’)。
注意一点的,CHAR,VARCHAR不像数值类型,有系统默认长度,所以必须在括号里定义长度,可以有默认值。
TEXT不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。

4)总结:

  1. 经常变化的字段用varchar
  2. 知道固定长度的用char
  3. 超过255字符的只能用varchar或者text
  4. 能用varchar的地方不用text   
  5. 尽量用varchar

5. 修饰符总结

上面已经讲过SIGNED和UNSIGNED,除此之外MySQL还有其他的常用关键字需要了解。

5.1 AUTO_INCREMENT

顾名思义,每次自动加一。

CREATE TABLE t6(
    -> id INT UNSIGNED AUTO_INCREMENT primary key,
    -> username varchar(50)
    -> );

一般用于主键自动增长,第一次写的时候是从一开始,之后写入其他行的时候自动加一。如上面t6表的例子,之后每次只需要插入username的值即可,id会自动增长。

如果现在往空表t6中插入第一条数据,id为1,然后把第一条记录删除,再插入第二条数据,id是2,而不是1。在插入一条,再删除一条,再插入一条,id为4,这就是自动增长。

(在操作数据库的时候发现有趣的现象,在此记录:如果在插入语句的时候,假设当前id为2,但是自己指定id为200并插入数据,则下次再插入数据从201开始;如果再人工指定id为50并插入数据,则下次插入数据还是从201开始。即最大索引开始)

可以使用truncate清空表数据,同时会清除计数器(自增)。

TRUNCATE t6;

drop, delete与truncate的区别 :

drop清空表,将表所占用的空间全释放掉,不再有这个表,也不再有计数器;

delete清空表数据,但不会清除计数器(自增),不会减少表或索引所占用的空间,delete from删空表后,会保留一个空的页;

truncate清空表数据,同时会清除计数器(自增),这个表和索引所占用的空间会恢复到初始大小,truncate在表中不会留有任何页。

DROP TABLE t6;
DELETE FROM t6;

对于应用范围,TRUNCATE 只能对table,DELETE可以是table和view。

对于执行速度:DROP > TRUNCATE > DELETE。DROP也属于DDL语言,立即执行,执行速度最快。truncate语句一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的,实际可以理解为删除原来的表然后重新建立一个新表。DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

总结:

DELETE语句可以使用WHERE子句实现部分删除,而其他的不可以,使用时,可以按需求选择。在没有备份情况下,谨慎使用 DROP 与TRUNCATE。要删除表结构使用 DROP 。对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。

5.2 NULL 和 NOT NULL

5.2.1 NULL

空值是不占用空间的,但是MySQL中的NULL其实是占用空间的。在列中出现NULL值,需要行中的额外空间来记录其值是否为空。对于t6表,每个空列额外占用一位,四舍五入到最近的字节。我们可以理解为虽然NULL是空,但是需要一个记录来记下来它是空的,这个记录是占内存的。

我们可以用NOT NULL来限定表格的插入值。举个例子:

CREATE TABLE t7 ( name VARCHAR(10) NOT NULL, address VARCHAR(50));

对name的设定是不能为null,接下来我们插入数据:

INSERT INTO t7 VALUES (null,'Beijing');  

程序报错:

> 1048 - Column 'name' cannot be null

 说明NOT NULL 的字段是不能插入“NULL”的。

5.2.2 ''

我们尝试另一种插入:

INSERT INTO t7 VALUES ('','Beijing');  

插入成功。 这说明NOT NULL 的字段可以插入''。注意空值的''之间是没有空格的。

5.2.3 NULL和''的区别

同理,在选择时 WHERE之后的限定条件不同结果也是不同的,要理解我们的需求,根据需求选择。举例,再往t7表中插入数据:

INSERT INTO t7 VALUES ('小王','Shanghai'); 
INSERT INTO t7 VALUES ('','Tianjin'); 
INSERT INTO t7 VALUES ('阿珍','Suzhou'); 
INSERT INTO t7 VALUES ('','');  

t7表现在的视图如下所示:

 使用IS NOT NULL来选择:

SELECT * FROM t7 WHERE `name` IS NOT NULL;

 得到下图视图:

  使用<> ''来选择:

SELECT * FROM t7 WHERE `name` <> '';

得到以下视图:

5.3 DEFAULT

DEFAULT 修饰符为字段设定一个默认值。 当忘记上传数据的时候,MySQL会根据我们设定的默认值设置改字段。

举个例子,先创建t8表并插入数据,得到以下视图:

CREATE TABLE t8 (stu VARCHAR(10) DEFAULT '小花', class TINYINT DEFAULT 1);
INSERT INTO t8 VALUES ('李华', 1);
INSERT INTO t8(class) VALUES (2);
INSERT INTO t8 VALUES ('',5);
INSERT INTO t8 (stu) VALUES ('小文');
SELECT * FROM t8;

由此可以看出,在插入一行数据的时候,如果一列没有插入数据但它有默认值,则使用默认值自动填充。该方法可以避免NULL的出现。 

参考资料:

课堂资料:

X. Zhu(2019). Introduction to Databasese [PowerPoint slides]. Available: https://ice.xjtlu.edu.cn/course/view.php?id=293

Mysql数据库设计与操作 (access time: 2021/6/23)

网络资料:

mysql中int(10)代表什么意思 (access time: 2021/6/28)

总结char,varchar,text区别 (access time: 2021/6/28)

mysql类型 varchar() 与 text 有什么区别? (access time: 2021/6/28)

MySQL中char,varchar和text的区别 (access time: 2021/6/28)

"<>" mysql中什么意思 (access time: 2021/6/29)

MySQL中 null与not null和null与空值''的区别 (access time: 2021/6/29)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值