zoukankan      html  css  js  c++  java
  • MySQL(02)DDL&DML

    目录 1.DDL 2.DML 3.约束

    #单行注释 /**/多行注释

    SQL语句不区分大小写 , 被 " " 和 ' ' 包住的字符串才区分大小写

    1.DDL(data defination language)数据库定义语言,主要是增删数据库 , 建表, 删除表, 修改表字段等操作

    关键字    creat(创建)  drop(删除)  alter(修改)

    创建数据库  crate database [数据库名];  if not exists 不存在则创建,存在则不创建

    删除数据库  drop database [数据库名];

    MySQL 创建数据库默认字符集 latin1 不支持中文 , 

                创建数据库指定数据库默认字符集utf8 create database if not exists [数据名] default charset utf8; 支持中文

    删除表    dorp table 表名

    查询表结构 desc 表名 或者 show cloumns from 表名

    创建表 设置默认存储引擎为innodb 默认字符集utf8

    use [数据库名];  进入数据库

      create table if not exists 表名    if not exists 不存在则创建,存在则不创建
      (
        属性名1 数据类型1 约束1(可省略),  #逗号代表一列
        属性名2 数据类型2 约束2(可省略),  #约束保证数据完整性,正确性的
        ...
        属性名n 数据类型n 约束n(可省略)
      )engine Innodb charset=utf8;

    # 数值类型
    tinyint      1字节
    smallint     2字节
    mediumint    3字节
    int  integer 4字节
    bigint       8字节
    
    float     4字节
    double    8字节
    
    # 字符类型
    char         1字节      表示定长字符串  定义一个 char(20)   无论字符有多少个都占20个字节大小
    varchar      2字节      表示变长字符串  定义一个 varchar(20) 最大占20个字节 ,有3个就占3个字节大小
    tinyblob                表示二进制字符串
    tinytext                表示文本
    blob
    text
    mediumblob
    mediumtext
    longblob
    longtext
    
    # 时间和日期类型
    date              YYYY-MM-DD         年月日
    time              HH:MM:SS        时分秒
    datetime          YYYY-MM-DD HH:MM:SS  

    修改表

      增加列  alter table [表名] add [列名] [类型] [约束];     表的末尾追加一列及其属性

          在增加列的末尾加上 frist 表示在第一个增加列 , 如果是 after 列名 表示在指定列名之后增加列

      修改列 alter table [表名] modify column [列名] [类型] [约束];  modify column:修改列

      删除列 alter table [表名] drop column [列名];        删除指定列


    2.DML(data manipulation language)数据操作语言,主要是数据库中数据的增删改三种操作

    关键字 insert(插入)  update(更新) delete(删除)

    插入数据 insert into student(stu_age,stu_name) values (20,'张三');  为指定字段添加值, 添加值的顺序按照指定字段的顺序

         insert into student values ( , , ); 为所有字段插入值, 且顺序严格按照表中的顺序, 必须全部都插入

         insert into student values ( , , ) ,( , , ), ( , , )...; 可以按这种方式同时插入多个字段的值 ,约束允许时字段可以给null

    更新数据 update [表名] set [字段名] =  [值], [字段名] = [值];  设置指定字段的所有值,并更新

    条件更新 update [表名] set [字段名] =  [值] where [字段名]=[值]; where后面的 = 是比较的意思, 满足where条件的字段才更新

    删除数据 delete from [表名];  删除表里的全部字段的值

    条件删除 delete from [表名] where [关键字段]= [值] ;  满足条件的字段才删除

      and(和) &&  , or(或) ||  , delete from [表名] where [关键字段]= [值] and [关键字段] = [值]; 删除两个符合条件的字段的值


    3.约束

    数据完整性

      实体完整性  标识符或主键的完整性      主键约束,唯一约束

      域完整性   限制类型 格式 可能值的范围  检查约束,默认值约束 ,

      引用完整性  保存原表和引用表的数据的一致性 外键约束

      自定义完整性 用户自定义的业务规则 一般有上三个完整性就够了

    创建约束的方法有两种 : 1.创建列时加上约束  或者  2.事后通过   alter table [表名] modify column [字段] [类型] [约束] 进行增加

    约束分两个级别: 行级约束(每一列的约束) , 表级约束. 这两个级别的约束效力是一样的

    常见约束

      not null:    非空,该字段的值必填

      unique:   唯一,该字段的值不可重复 default

      DEFAULT:  默认,该字段的值不用手动插入有默认值

      check:     检查,mysql不支持

      primary key:  主键,该字段的值不可重复并且非空 unique+not null

      foreign key:   外键,该字段的值引用了另外的表的字段

    修改约束的方法有两种   不建议使用modify column 的方式去创建或修改 唯一  外键 这样的表级约束, 因为没有约束名称导致无法删除约束

      alter table [表名] modify column [字段名] [类型] [new约束];  modify column: 修改列. 最好只是修改 not null 这样的行级列

      alter table [表名] add constraint [自定义约束名称] [约束]([指定字段]); add constraint 增加列, 给指定字段增加和修改约束

    除约束 alter table [表名] drop index [自定义约束名称] ;

    创建复合唯一约束(创建两列以上的 唯一 约束(表级约束) ) ,必须两个字段同时相同才违反约束, 两个字段只有一个相同 不违反复合唯一约束

       在 create table 时最后一句写 constraint [自定义约束名称] unique([字段1],[字段2], ... )

       alter table [表名] add constraint [自定义约束名称] [约束]( [字段1],[字段2], ... );

    删除复合约束 通过 约束名称 删除 alter table [表名] drop index [自定义约束名称] ;

    主键约束 每个表只能有一个主键约束(表级约束)

      复合主键约束 复合的值不能重复(整个符合列相同才违反约束) , 只有其中一列的值重复不违反约束 和 方法上面的复合唯一约束相同

      添加主键约束 alter table [表名] add constraint primary key( [字段1], ... ); 主键约束可以不取 约束名 因为主键只有一个

    删除主键约束 alter table [表名] drop primary key; 删除唯一的主键

    自增列 create table 时 id int primary key auto_increment  当id为null时,每 insert into 一行数据  id自动+1(默认从1开始)

    删除自增列 alter table [表名] modify column [字段名] [类型] [约束]; 使用修改列约束的 方式把约束去掉

          比如 alter table [表名] modify column [字段名] [类型] 约束不写; 就会把原来的行级约束删除

         设置自增列默认开始的值 ,create table [表名]( )auto_increment=number; 

    检查约束 [字段] [类型] check(age >0 and age<200) , MySQL不支持check

    默认值约束, default [值],  或者 alter table [表名] modify column [字段名] [类型] default [值];

    删除默认值约束 alter table [表名] modify column [字段名] [类型] 不写约束;   修改列的属性约束位 什么都不写,就会把默认值约束删除

    外键用于关联另一张表, 外键关联的必然是参考表的主键

      外键的 数据类型 长度 精度 必须和参考表的主键保持一致 , 参考表存在后才能设置外键约束

      创建外键约束 alter table 表名 add constraint [约束名] foreign key(要约束的字段) references [参考表](参考表的主键);

      删除外键约束 alter table 表名drop foreign key (约束名) ;

      删除一个表时要先解除要删除表的外键约束,否则无法删除

    外键约束有 on delete 和 on update 两个选项, 选项的属性

      cascade:  级联,在父表上 delete/update 记录时, 子表也会同步 delete和update 外键所匹配的记录

      set null:  在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能设置not null

      no action   选项的默认属性,  如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作

      set default 父表有变更时,子表将外键设置成一个默认的值 但Innodb不能识别

      restrict   同 no action 一样

    使用方法:  alter table [表名] add constraint [约束名] forkeign key(要添加外键的字段) references 参考表(参考表字段) on delete [属性] on update[属性]; 

  • 相关阅读:
    saolei
    Hibernate中表与表之间的关联多对多,级联保存,级联删除
    Hibernate中表与表之间的关联一对多,级联保存和级联删除
    Hibernate中的Query对象查询所有记录
    Hibernate缓存
    hibernate简单实现连接数据库,并实现数据的操作
    Navicat注册码
    用jdbc连接数据库并简单执行SQL语句
    JDBC中的DriverManager.getConnection(url)中的参数url
    spring进行事务管理
  • 原文地址:https://www.cnblogs.com/yxnrh/p/13331126.html
Copyright © 2011-2022 走看看