Database基础_SQL基本句法(MySQL)
〇、垃圾
由于明天就有一次考试了,而我现在还没有对这方面的基础知识有一个系统性的整理,所以我十分焦虑,也正是复习的好时候。可我实在是不知道该怎么给SQL一个比较好的解构,因为刚刚入门,每项分类能写出的东西太少了,总不能从数据类型开始写起吧?
一、MySQL数据类型
1. 常用数据
数据类型 | 简介 |
CHAR(n) | 长度固定为n的字符串 |
VARCHAR(n) | 长度可变,上限至长度n的字符串 |
INTEGER |
整数 |
DECIMAL(m,d) | 最多带d位小数点的m位(总长)数字,m>=d |
DATE | 定规格的日期("yyy-mm-dd"),分隔符可以随意选取 |
DATETIME | 定规格的日期时间("yyy-mm-dd hh:mm:ss") |
2. NULL
- NULL意味着这个位置中没有储存数据,而不是“0”
- 在定义属性时后接NOT NULL,则该字段下的所有数据都不能为NULL
- 主键必定为NOT NULL,就算你建表时不加NOT NULL,MySQL也不会接受NULL值被记录到主键字段内
- NULL就是没有数据,他并不能区分该项数据是“未知”的还是“未定义”的
二、表格-数据定义语言(Data Definition Language, DDL)
Tips: 在默认设置下MySQL对大小写完全不敏感,字段名、按字母排序(ORDER BY)、指令甚至是字符串内容都是如此,如CREATE和create是完全相同的指令,“Joey”和“JOEY”是完全一样的字符串,一般情况下我们约定俗成地将指令部分全部大写来提高可读性。
0. 数据库
好吧,建表之前我们其实需要先创建一个数据库并选中它,有了仓库我们才能放东西
CREATE DATABASE school;
CREATE SCHEMA school;
USE school;
在MySQL中,schema和database是同义词,但在一些SQL操作系统中,二者是被区分的。
你要是不喜欢还可以删掉它
DROP DATABASE school;
另外地,如果你懒得选中某个数据库,你可以在列表名前加上“databaseName.”来调用你想要的数据库,此技巧以后有用。
1. 创造与毁灭(CREATE/DROP)
1)CREATE建表
i) 自定义新建表格
- 利用create来创建表格格式为:
CREATE TABLE tableName(var1 domain constrain, var2 domain constrain,...);
其中var1,var2 为变量名,domain为数据的类型,constrain为约束条件(如PRIMARY KEY,NOT NULL等,约束条件的声明顺序没有要求)
- 另外地,在表格中添加外键的格式为:
FORIEGN KEY (var1) REFERENCES otherTable(var2)
该命令将一个已存在的var1设置为外键,且他引用自另一个表格中的字段var2作为父键。注意,被引用的父键必须是主键或有唯一约束。
(gameID INTEGER NOT NULL PRIMARY KEY,
installSize DECIMAL(10,5) NOT NULL,
version VARCHAR(50),
releaseDate DATE NOT NULL,
FOREIGN KEY (releaseDate) REFERENCES market(publicDate));
记得写分号。
ii) 复制其他表格数据
除了自己创建表格,我们还可以使用select在创建表格的同时把select返回的数据直接塞到新表格中:
CREATE TABLE tableName (AS) SELECT attri1, attri2,... FROM tableName2;
就目前看来,有无AS对该语句不造成任何影响。
CREATE TABLE copy as SELECT * FROM games;
注意:该复制表格数据的方法只会将数据本身填入新表,而原表本身自带的约束无法转移,该方法可用于需要临时处理一些数据的情况,数据迁移时不要使用。
2)DROP删表
毁灭往往都是一瞬间的事情。
DROP TABLE games;
DROP还会配合下面的ALTER使用,达到删除某个属性的目的,与DELETE不同,涉及DROP的语句往往都比较简单粗暴。
注意:改名对于SQL来说过于复杂,如果你想改名,最好创建一个新的数据库/表格并把原数据拷贝过去,然后把原来的删掉。
2. 调整(ALTER)
单独利用DROP和CREATE只是对表格本身进行创建和删除,而ALTER可以对表格本身进行大体性的调整
1) 增加字段
ALTER TABLE games ADD price DECIMAL;
2) 删除字段
ALTER TABLE games DROP price;
ALTER的使用应适当的减少,以免引起不必要的错误。很多时候使用ALTER只能说明我们在设计这个表格之初并没有做好规划。
三、表格-数据操作语言(Data Manipulation Language, DML)
学会了建表删表改表,该往表里放点东西了
对于数据定义语言,由于他们所处的层面比较宏观,所以对表格进行操作的时候需要后接TABLE来指定对象是表格,而对于数据操作语言,操作对象都是表格,所以不再需要特定声明了
1. 插入数据(INSERT INTO)
向表格内插入数据的句法:
INSERT INTO tableName VALUES (var1,var2,var3,...);
该语句向表格内插入了一条记录,其中括号内的数据应按照顺序依次符合建表时创建字段的顺序
INSERT INTO games VALUES
(100,512.0,"BETA 2.0","2020-12-11");
1.5. 条件筛选(WHERE)
在记录其他命令之前,有必要提前引入WHERE的使用。
WHERE语句可以筛选符合条件的所有记录,一并处理,如:
WHERE ID=123,WHERE name="Joey"
2. 更新数据(UPDATE)
UPDATE可以更新指定表格中的某项数据,在开启安全模式状态下必须配合WHERE使用且必须以主键为筛选条件。
UPDATE games SET installSize=200480.3
WHERE gameID=100;
记得SET。
3. 删除数据(DELETE FROM)
使用DELETE来删掉表中指定的数据,同样需要使用WHERE
DELETE FROM games WHERE gameID=100;
4. 使坏
你要是叛逆的话可以关掉安全模式,这样你甚至可以完全不用WHERE,也不用担心唠叨烦人的报错了。
SET SQL_SAFE_UPDATES = 0; DELETE FROM games;
1是打开。
5. SELECT
SELECT可以将其从指定列表中筛选出的行输出到窗口上
SELECT * FROM games;
在MySQL Workbench上的输出结果:
其中, *代表全部列,也可以加入指定列来限制输出的字段,该语句后接WHERE等命令可按照要求输出指定记录,SELECT有很庞杂的句法搭配,之后需要单独记录。