MySQL入门学习

发布时间 2023-10-03 00:55:51作者: wuhu12345

tablets and keys

  1. tablets的存储结构是二维的,每一行存储一笔数据,每一行存储一个属性。
  2. key:可以在表中的一列或多列上创建。有三种主要的键类型:主键(Primary Key)、唯一键(Unique Key)和外键(Foreign Key)。
    • 主键(Primary Key):主键是表中唯一标识符,用于唯一地标识表中的每一行数据。主键不能为空(NULL),并且在一个表中只能有一个主键。
    • 外键(Foreign Key):外键用于将两个表关联起来。在一个表中,外键是一个指向另一个表中的主键(且只能是主键)的列。通过外键,可以将两个相关的表连接起来。

数据类型

  • INT:整数
  • DECIMAL(m,n):带小数点的数,有两个参数m和n,m用来表示一共有几位数,n表示小数点后面有几位。
  • VARCHAR(n):字符串,n表示此串中一功能存放几个字元。使用该类型数据时需要在字串两边加引号,单双引号都可。
  • BLOB(Binary Large Object):存放二进制数据,如图片、影片、档案等。
  • DATE:存放日期,格式为YYYY-MM-DD(年-月-日)。
  • TIMESTAMP:记录时间,格式为YYYY-MM-DD HH:MM:SS(年-月-日 时-分-秒)。

常用命令

开始之前,需要知道MySQL命令是默认不区分大小写的,但是自定义的数据库或表名称区分大小写;MySQL的所有命令须在语句末尾加;

数据库操作

  1. CREATE DATABASE `word`;:创建一个名称为word的数据库。此处两个反引号(`)用于引用表名、列名或其他数据库对象,这是一种转义字符,用于确保对象名称在查询中被正确识别和处理,尤其是当名称包含特殊字符或关键字时。
  2. SHOW DATABASES;:显示所有已有的数据库。
  3. DROP DATABASE `word`;:删除名称为word的数据库。

创建表格

  1. USE `word`;创建表格前需要选定数据库,此语句的作用就是选择使用名称为word的数据库。
  2. CREATE TABLE `word`(
     `attribute1` 数据类型 PRIMARY KEY(可选),
     `attribute2` 数据类型,
     ...
    );
    :基本格式就是这样,上面每一行对应一个属性,属性名称后面先跟数据类型,如果需要将其设置为key,再在数据类型后面加上键类型。此外,不在属性后加PRIMARY KEY,而在括号中的某一行写上PRIMARY KEY(`attribute`)也是可行的。
  3. DESCRIBE `word`;:展示表格word。
  4. DROP TABLE `word`;:删除表格word。
  5. ALTER TABLE `word` ADD `attribute` 数据类型 key(可选);:向名为word的表中插入名为attribute的属性,插入格式和建表相同。
  6. ALTER TABLE `word` DROP COLUMN `attribute`;:在名为word的表中删除名为attribute的属性。
  • ALTER TABLE `word1`表示更改表格,此后跟的指令都是对名为word1的表进行操作,且多为对某列或某几列进行操作。如ADD FOREIGN KEY(`attribute`) REFERENCES `word2`(`attribute`)就是将名为word1的表中属性为attribute的列设为外键,关联的是名为word2的表中的attribute属性。

储存数据

  1. INSERT INTO `word`(`attribute1`,`attribute2`...) VALUES(1,'fk',114514,...);:向名为word的表中插入一笔数据。word后的括号里是自定义插入顺序,若无此括号,则默认按照建表时的顺序插入。若该笔数据没有某个属性,则可以在该属性的位置填NULL,这样查表时该笔数据的该属性的位置会是空的。当VALUES后的数据数小于该表的属性数时,会默认从前往后填充,数据用完后没有被填充的属性位置默认置为空。

限制、约束

可以在建表时在某些属性的数据类型后面、key前面加上对该属性数据的约束,下面是一些常用约束:

  1. DEFAULT data:插入数据没有该属性的数据时,该属性默认置为data。
  2. UNIQUE:该属性不能有重复数据。
  3. NOT NULL:该属性的值不能为空。
  4. AUTO_INCREAMENT:该属性的值会自增,也就是说第一次插入数据给该属性置初始值后,之后再插入数据时可以略过该属性,那么之后插入数据中,该属性对应的数据会在上笔数据中该属性对应的数据基础上加1。

修改&删除数据

  1. UPDATE `word`
    SET ...
    WHERE ...;
    :对名为word的表格执行修改操作,SET后的内容是操作内容,可以有多个操作,中间用,隔开;WHERE后的内容是条件判断,OR为或,AND为且。注意MySQL中没有===的区别,只有一个=,这个=在SET后就是赋值,在WHERE后就是判断相等。另外MySQL中的不等于是符号<>。可以不写WHERE,这样SET中的操作会对表中每一笔数据执行。
  2. DELETE `word`
    WHERE ...;
    :删除名为word的表中符合条件的数据,不写WHERE的话表中数据将被全删。

取得数据

SELECT `attribute1`,`attribute2`,... FROM `word`;:从名为word的表中取得属性为attribute1、attribute2...的几。此指令后面可以加限制后缀,下面的是几个基本的后缀:

  1. WHERE ...:条件限制,不多赘述。
  2. LIMIT num:只取出num笔数据的指定属性。
  3. ORDER BY `attribute`:以attribute属性进行排列后取出,默认从小到大排序,也可以在此后缀后面再添加DESC,意为降序排列。
    需要注意的是上面几条后缀是平行关系,也就是说可以将它们同时加在SELECT指令后面。
  • 如果在SELECT后、表名前加一个DISTINCT,就能达到取得的数据中没有重复的效果。

聚合函数

将取得数据命令中的属性用一个函数代替,函数后的括号中包含一个指定的属性,从而取得该属性中的数据按照这个函数操作后的某个值。以下是一些常用的聚合函数:

  1. COUNT():用于取得该属性中的数据总个数(也就是NULL之外的数据有几个)。
  2. SUM():用于取得该属性中数据的和。
  3. AVG():用于取得该属性中数据的平均值。
  4. MAX():用于取得该属性中数据的最大值。
  5. MIN():用于取得该属性中数据的最小值。

通配符

  • 通配符有两个:%(匹配任意数量的字符)_(匹配单个字符)
  • LIKELIKE运算符用于在搜索中匹配模式,它支持使用通配符%_进行模糊匹配。例如,如果要查找以"cat"开头的所有单词,可以使用以下查询:SELECT * FROM table_name WHERE column_name LIKE 'cat%';
  • 使用通配符时不能用=作比较。

联集

使用关键字UNION,写在两个或多个SELECT指令中间,用于将两个或多个搜寻结果合并。使用UNION有下面几点要求:

  • 这些SELECT指令取得的attribute数目必须相等。
  • 这些SELECT指令取得的attribute的数据类型必须一致。

连接

关键字为JOIN,写在SELECT指令后的FROM 表名后面,且其后再跟一个表名,意为将这两个表连接在一起返回数据。其后一般会再加一个连接条件,由关键词ON引导,满足该条件则取得连接后数据,不满足则不取。下面是一些基本的注意事项:

  • 两个表会出现有些属性重名的情况,此时只需要用tablet_name.column_name的格式就可以指定某属性的所属表,从而唯一确定某个属性。
  • 可以在JOIN前加LEFTRIGHT,前者的作用是如果不满足ON后的条件,则取得LEFT JOIN前面的表的结果,而非直接不取得,右边则都置为NULL;后者反之。

子查询

在一个查询中嵌入另一个查询的结果,很容易理解,这里只说一个需要注意的点,即嵌套时要把被嵌的查询语句用()括起来

ON DELETE

ON DELETE语句是用于定义外键约束的一部分,写在外键设置语句之后,它指定了在删除主表中的记录时,对关联表中相应记录的操作。当在主表中删除一行时,ON DELETE语句可以用来指定以下操作之一:

  1. CASCADE:删除关联表中与主表中被删除行相关联的所有行。
  2. SET NULL:将关联表中与主表中被删除行相关联的行的外键列设置为NULL。
  3. NO ACTION或RESTRICT:阻止删除主表中的行,如果关联表中存在与主表中被删除行相关联的行。
  4. SET DEFAULT:将关联表中与主表中被删除行相关联的行的外键列设置为默认值。