一、定义

        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... ...