tablets and keys
- tablets的存储结构是二维的,每一行存储一笔数据,每一行存储一个属性。
- 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的所有命令须在语句末尾加;。
数据库操作
- CREATE DATABASE `word`;:创建一个名称为word的数据库。此处两个反引号(`)用于引用表名、列名或其他数据库对象,这是一种转义字符,用于确保对象名称在查询中被正确识别和处理,尤其是当名称包含特殊字符或关键字时。
- SHOW DATABASES;:显示所有已有的数据库。
- DROP DATABASE `word`;:删除名称为word的数据库。
创建表格
- USE `word`;:创建表格前需要选定数据库,此语句的作用就是选择使用名称为word的数据库。
- CREATE TABLE `word`(
`attribute1` 数据类型 PRIMARY KEY(可选),
`attribute2` 数据类型,
...
);:基本格式就是这样,上面每一行对应一个属性,属性名称后面先跟数据类型,如果需要将其设置为key,再在数据类型后面加上键类型。此外,不在属性后加PRIMARY KEY,而在括号中的某一行写上PRIMARY KEY(`attribute`)也是可行的。 - DESCRIBE `word`;:展示表格word。
- DROP TABLE `word`;:删除表格word。
- ALTER TABLE `word` ADD `attribute` 数据类型 key(可选);:向名为word的表中插入名为attribute的属性,插入格式和建表相同。
- ALTER TABLE `word` DROP COLUMN `attribute`;:在名为word的表中删除名为attribute的属性。
- ALTER TABLE `word1`表示更改表格,此后跟的指令都是对名为word1的表进行操作,且多为对某列或某几列进行操作。如ADD FOREIGN KEY(`attribute`) REFERENCES `word2`(`attribute`)就是将名为word1的表中属性为attribute的列设为外键,关联的是名为word2的表中的attribute属性。
储存数据
- INSERT INTO `word`(`attribute1`,`attribute2`...) VALUES(1,'fk',114514,...);:向名为word的表中插入一笔数据。word后的括号里是自定义插入顺序,若无此括号,则默认按照建表时的顺序插入。若该笔数据没有某个属性,则可以在该属性的位置填NULL,这样查表时该笔数据的该属性的位置会是空的。当VALUES后的数据数小于该表的属性数时,会默认从前往后填充,数据用完后没有被填充的属性位置默认置为空。
限制、约束
可以在建表时在某些属性的数据类型后面、key前面加上对该属性数据的约束,下面是一些常用约束:
- DEFAULT data:插入数据没有该属性的数据时,该属性默认置为data。
- UNIQUE:该属性不能有重复数据。
- NOT NULL:该属性的值不能为空。
- AUTO_INCREAMENT:该属性的值会自增,也就是说第一次插入数据给该属性置初始值后,之后再插入数据时可以略过该属性,那么之后插入数据中,该属性对应的数据会在上笔数据中该属性对应的数据基础上加1。
修改&删除数据
- UPDATE `word`
SET ...
WHERE ...;:对名为word的表格执行修改操作,SET后的内容是操作内容,可以有多个操作,中间用,隔开;WHERE后的内容是条件判断,OR为或,AND为且。注意MySQL中没有=和==的区别,只有一个=,这个=在SET后就是赋值,在WHERE后就是判断相等。另外MySQL中的不等于是符号<>。可以不写WHERE,这样SET中的操作会对表中每一笔数据执行。 - DELETE `word`
WHERE ...;:删除名为word的表中符合条件的数据,不写WHERE的话表中数据将被全删。
取得数据
SELECT `attribute1`,`attribute2`,... FROM `word`;:从名为word的表中取得属性为attribute1、attribute2...的几列。此指令后面可以加限制后缀,下面的是几个基本的后缀:
- WHERE ...:条件限制,不多赘述。
- LIMIT num:只取出num笔数据的指定属性。
- ORDER BY `attribute`:以attribute属性进行排列后取出,默认从小到大排序,也可以在此后缀后面再添加DESC,意为降序排列。
需要注意的是上面几条后缀是平行关系,也就是说可以将它们同时加在SELECT指令后面。
- 如果在SELECT后、表名前加一个DISTINCT,就能达到取得的数据中没有重复的效果。
聚合函数
将取得数据命令中的属性用一个函数代替,函数后的括号中包含一个指定的属性,从而取得该属性中的数据按照这个函数操作后的某个值。以下是一些常用的聚合函数:
- COUNT():用于取得该属性中的数据总个数(也就是NULL之外的数据有几个)。
- SUM():用于取得该属性中数据的和。
- AVG():用于取得该属性中数据的平均值。
- MAX():用于取得该属性中数据的最大值。
- MIN():用于取得该属性中数据的最小值。
通配符
- 通配符有两个:%(匹配任意数量的字符)和_(匹配单个字符)。
- LIKE:LIKE运算符用于在搜索中匹配模式,它支持使用通配符%和_进行模糊匹配。例如,如果要查找以"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前加LEFT或RIGHT,前者的作用是如果不满足ON后的条件,则取得LEFT JOIN前面的表的结果,而非直接不取得,右边则都置为NULL;后者反之。
子查询
在一个查询中嵌入另一个查询的结果,很容易理解,这里只说一个需要注意的点,即嵌套时要把被嵌的查询语句用()括起来。
ON DELETE
ON DELETE语句是用于定义外键约束的一部分,写在外键设置语句之后,它指定了在删除主表中的记录时,对关联表中相应记录的操作。当在主表中删除一行时,ON DELETE语句可以用来指定以下操作之一:
- CASCADE:删除关联表中与主表中被删除行相关联的所有行。
- SET NULL:将关联表中与主表中被删除行相关联的行的外键列设置为NULL。
- NO ACTION或RESTRICT:阻止删除主表中的行,如果关联表中存在与主表中被删除行相关联的行。
- SET DEFAULT:将关联表中与主表中被删除行相关联的行的外键列设置为默认值。