【SQL学习笔记】DDL篇

一、定义

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

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值