一、定义
SQL是结构化查询语言,对应关系型数据库
关系型数据库有:MYSQL,SQL Server,Oracle
二、书写规范
- 可以有空格和缩进以便于阅读
- 可以有单行和多行,但以分号结尾
- 不区分大小写
三、SQL分类
- DDL:用于定义数据
- DML:用于操作数据
- DCL:用于控制数据
- DQL:用于查询数据
四、DDL语言
1. 操作数据库
1)创建数据库
CREATE DATABASE mydb
若mydb已存在则会报错,采用以下方法则可以避免报错:
CREATE DATABASE IF NOT EXISTS mydb
2)删除数据库
DROP DATABASE mydb
同理
DROP DATABASE IF EXISTS mydb
2.数据类型
- int
- float,double:double(5,2)代表最多一共有5位数字,其中有2位小数,所以该方法能表示的最大数字为999.99
- double括号内的数字可以省略,但是会有默认值,会根据插入数值的精度来决定精度
- char:固定字符串长度,当输入的数据小于该长度时会在后面补上空格(所以有时在查找以xxx结尾时需要先去掉char类型字符串最后的空格)
- char(n)代表设置最长为n的字符长度,其中n可以省略,且默认为1
- varchar:可变长度的字符,与char不同的是结尾不会有空格,虽然char耗费空间更大,但是效率更高,其中varchar(n)中的n不可以省略
- text:字符串类型
- date:日期格式为yyyy-mm-dd
- 必须用‘ ’引起来
- time:时间格为hh-mm-ss
- datetime:保存日期+时间,且datetime不受时区的影响,但是timestamp受
- decimal:泛型型,在表单线方面使用该类型,因为不会出现精度缺失问题,相较于float和double更加精确
3.操作表
1)创建表
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
......
);
2)删除表
DROP TABLE 表名;
3) 查看表结构
DESC 表名;
4) 修改表
注意!!每种修改方式的关键字不同
- 修改列名【change】
ALTER TABLE mytable CHANGE COLUMN OLDCOL_NAME NEWCOL_NAME DATETIME #注意要指定新列名的数据类型
- 修改列的类型或约束【modify】
ALTER TABLE mytable MODIFY COLUMN COL DATETIME
- 修改表名【rename to】
ALTER TABLE author RENAME TO COLUMN authors;
- 添加新列【add】
ALTER TABLE author ADD COLUMN annual DOUBLE;
- 删除列【drop】
ALTER TABLE stu DROP classname;
约束
- 用于限制表中的数据
用法:在字段名或类型名后添加,仅支持的4种类型【非空】【主键】【默认】【唯一】
分类:
1)【NOT NULL】:非空约束
2)【DEFAULT】:确保该字段有默认值
3)【PRIMARY KEY】:主键不能为空,用于保证该字段的值具有唯一性,比如学号
4)【UNIQUE】:唯一,用于确保唯一性,但是可以为空
5)【CHECK】:检查约束(但是mysql不支持该用法)
6)【FOREIGN KEY】:外键,用于限制两张表的关系,保证该字段的值必须来自于主表关联列的值,在从表添加外键约束,用于引用主表中某列的值
【关于外键】
1.只能在‘从表’设置外键
2.从表的外键列类型和主表的关联列类型必须一致或兼容,对于名称【无要求】
3.主表的关联列至少是1个key——一般是primary key或者unique
4.数据插入:先插入主表,再插入从表
数据删除:先删除从表,再删除主表
何时可以添加约束呢??
1. 创建表时 2.修改表时
- 约束的添加
CREATE TABLE 表名{
字段名 字段数据类型 列级约束,#列级约束中外键约束没有效果,其余都可以
...
表级约束 #除了‘非空’,‘默认’不支持,其余都可以
};
- 约束举例【创建时约束】
- 列级约束
CREATE TABLE student(
id INT PRIMARY KEY,#主键
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查,语法不支持,但是把格式写出来
seat INT UNIQUE,
age INT DEFAULT 18,
major INT FOREIGN REFERENCES major(id)#这里的major是表的意思
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
- 表级约束
CREATE TABLE student(
id INT ,#主键
stuName VARCHAR(20) ,
gender CHAR(1),
age INT,
major INT,
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT uq UNIQUE(seat),
CONSTRAINT ck CHECK(gender='男' OR gender='女'),
CONSTRAINT fk_student_major FOREIGN KEY(majorid) REFERENCES major(id)
);
- 约束举例【修改表时约束】
- 列级约束
#非空约束,表级约束不支持
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#默认约束,表级约束不支持
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#添加主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#添加唯一
ALTER TABLE stuinfo MODIFY COLUMN SET INT UNIQUE;
- 表级约束
#添加主键
ALTER TABLE stuinfo ADD INT PRIMARY KEY(id)
#添加唯一
ALTER TABLE stuinfo ADD INT UNIQUE(id)
#添加外键(列级约束不支持,仅支持表级约束)
ALTER TABLE stuinfo ADD FOREIGN KEY(id) REFERENCES major(id)
5) 表的复制
复制表的全部结构
CREATE TABLE COPY LIKE author
参考文章:DML语言和DDL语言,SQL基础知识总结
持续更新ing... ...