创建表
CREATE TABLE
CREATE TABLE的作用是创建表。不多说,先创建个简单的学生表。
CREATE TABLE students (
	id int,
    name char(16) NOT NULL,
    primary key (id)
);
这里没写 ENGINE=InnoDB,因为这是新 MariaDB 的默认值。
那么进入正题,CREATE TABLE的语法如下。
CREATE TABLE [表名] (
	[列名] [类型] [约束和其他属性],
    [列名] [类型] [约束和其他属性],
    ....
    [其他表配置]
);
很容易看出,括号里面写的是表的相关配置,包括列定义,主键定义,索引定义等等。
默认值
在创建表时可以指定默认值,有默认值的列在插入时可以不填。
语法如下。
CREATE TABLE [表] (
	[列] [类型] DEFAULT [值],
);
即可为一个列设定默认值。
非空
非空约束非常常见。比如说,我们要记录学生信息,包括学号、成绩、姓名,那么学生姓名能不能留空呢?显然不行,因为没有姓名的记录让谁看都是一脸懵逼,这破坏了一条记录的完整性。
创建非空约束的语法如下。
CREATE TABLE [表] (
	[列] [类型] NOT NULL,
);
这就创建了非空约束。非空约束下,插入数据时不能不填写这个列。
如果需要要求可空,那么这样做。但一般不用特地写,很多DBMS的列默认创建就是可空的。
CREATE TABLE [表] (
	[列] [类型] NULL,
);
修改表
ALTER TABLE
ALTER TABLE可以修改表定义,添加删除列,修改约束,等等。
添加列
举例,在一个只有学号和姓名两个列的学生表加入一个新的成绩列,代码如下。
ALTER TABLE students
ADD score int;
语法基本是这样。
ALTER TABLE [表名]
ADD [列名] [类型] [其他属性和约束];
后面列的定义写法基本和CREATE TABLE时差不多。
删除列
和添加列差不多,但删除的关键字不是DELETE,而是DROP。
ALTER TABLE [表名]
DROP [列名];
添加外键约束
外键约束其实保证的是引用完整性,外键约束的列的值必须引用了一个有效的行,或者是NULL。
举例来说,我们先有两个表。
学生表
| id | name | class | 
|---|---|---|
| 1 | student 1 | 1 | 
| 2 | student 2 | 2 | 
| 3 | student 3 | 3 | 
班级表
| id | level | 
|---|---|
| 1 | Lv5 | 
| 2 | Lv4 | 
| 3 | Lv3 | 
为了让学生表的class关联到班级表的id,我们要这样做。
ALTER TABLE students
ADD CONSTRAINT fk_students_classes
FOREIGN KEY (class) REFERENCES classes (id);
语法基本是这样子的
ALTER TABLE [保存外键的表]
ADD CONSTRAINT [外键约束的名字,一般fk开头]
FOREIGN KEY ([外键名]) REFERENCES [引用的表名] ([引用的键名])
比较复杂。
删除表
那么终于到了期待已久的删库跑路阶段。
删除表的语法非常简单,那么从一开始活到现在的这所学校终于干不下去了,校长决定遣散学生。
DROP TABLE students;
人走光了。
重命名表
校长决定把学校改成夜总会,于是他写道:
RENAME TABLE school TO night_club;
要是换行有这么容易就好了......(你敢说回车看看)