三、表操作、约束

三、表操作、约束

1、创建表(create table)
  1. 语法格式:表名一般建议使用 t_或 tbl _开头

    create table 表名(
    	字段名1 数据类型,
        字段名2 数据类型,
        ....
    );
    
  2. Mysql字段中常见的数据类型:

    数据类型描述
    int整数型(java中的int)
    bigint长整型(java中的long)
    float浮点型(java中的float 和 double)
    char定长字符串(java中的String)
    varchar可变长字符串(java中的StringBuffer/StringBuilder)
    date日期类型(java中的java.sql.Date)
    BLOB二进制大对象(存储图片、视频等流媒体信息,java中的Object)
    CLOB字符大对象(存储较大文本,4G的字符串,java中的Object)
  3. char和varchar怎么选择?

    • 当一个字符的数据长度不发生改变时,是定长的如:性别、生日采用char
    • 当一个字符串的长度不确定时,如:简介,姓名等都是采用varchar
  4. 创建学生表

    • 学生信息:学号、姓名、性别、班级编号、生日

      create table t_student(
      	no bigint,
          name varchar(255),
          sex char(1),
          classno varchar(255),
          birth char(10)
      );
      
2、数据插入(insert into)
  1. 语法格式:

    insert into 表名(
    	字段1,字段2...
    )
    values(1,2...
    );
    
  2. 插入的数据的要点:

    1. 字段的数量和值的数量要相同,并且数据类型要对应相同

    2. 当将前面的字段省略时,后面的values()中的内容,字段数量不可缺少,不可调换顺序

    3. 一次可以插入多条数据使用 ","分隔开来

      -- 插入多条数据
      insert into 表名
      	(字段1,字段2...)
      values
      	(1,值2...),
      	......
      	(1,值2);
      
    4. 可以选择那些字段插入数据,没有插入的字段由默认值代替,默认值可有desc 表名 查看

      -- 可以省略一些字段不插入,可以调换插入的顺序
      insert into 表名
      	(字段2,字段4,字段1)
      values
      	(2,值4,值1);
      
    5. 当一条insert语句执行成功后,表格中必然多了一行记录即使多的这一行记录中存在null,后期也无法用insert语句进行改变,必须使用update语句

3、表的复制
  • 语法:

    create table 表名 as select语句;
    -- 将查询出来的结果作为表创建出来
    
  • 案例:

    create table dept_copy
    as
    select * from dept;
    
4、将查询结果插入到另一张表中
  • 语法:

    insert into 表名 select语句
    
  • 要求:表的字段和select语句查询出来的字段要一致

  • 案例:

    insert into dept_copy
    select * from dept;
    
5、修改数据(update)
  • 语法

    update 
    	表名
    set
    	字段1 =1,
    	字段2 =2
    	...
    where 
    	修改条件
    
  • 注意点:没有where条件全部都修改了

  • 案例:

    -- 将部门10的LOC修改为SHANGHAI,将部门名称修改为RENSHIBU
    update 
    	dept
    set
    	LOC = 'SHANGHAI',
    	DNAME = 'RENSHIBU'
    where
    	deptno = 10;
    
6、删除表数据(delete)
  • 语法格式

    delete from 
    	表名
    where
    	删除条件
    
  • 注意点:没有条件全部删除

  • 案例:

    -- 删除10部门的数据
    delete from
    	dept
    where
    	deptno = 10;
    
  • 删除一张很大的表

    truncate table 表名;-- 表被截断,不可回滚,永久丢失
    -- 删除表?
    drop table 表名;-- 这个通用
    drop table if exists 表名; -- oracle不支持这种写法
    
7、约束(constraint)
  1. 约束的概念:在创建表的时候,可以给表的字段添加响应的约束,添加约束的目的是为了保证表中数据的合法性、有效性和完整性

  2. 常见约束有哪些:

    • 非空约束(not null) : 约束的字段不能为null
    • 唯一约束(unique) : 约束的字段不能重复,但是可以为null
    • 主键约束(primary key) : 约束的字段既不能为null,也不能重复(简称pk)
    • 外键约束(foreign key): (简称fk)
    • 检查约束(check) : mysql没有,oreacle有
  3. not null (非空约束)

    drop table if exists t_user;
    create table t_user(
        username varchar(255) not null,
        password varchar(255) 
    ); -- not null 只有列级约束,没有非空约束
    
  4. unique(唯一约束)

    drop table if exists t_user;
    create table t_user(
    	id int unique,
        username varchar(255) unique  -- 这个叫列级约束
    );
    -- 和下面这种方式添加约束有啥区别?
    drop table if exists t_user;
    create table t_user(
        id int,
        username varchar(255),
        unique(id,username) -- 这个叫做表级约束
    );
    -- 方式一是列级约束,方式二是表级约束
    -- 方式一是两个字段各自都不能重复,方式二:是两个字段联合来不能重复
    -- 看一个例子:
    insert into t_user(id,username) values(1,'zs');
    insert into t_user(id,username) values(1,'ls');
    -- 这两条插入语句同时执行,对于方式一创建的表,后面ls的数据插入不进去
    -- 对于方式二创建的表,两条语句都是可以插入进去的,因为方式二的是将连个字段联合起来不能重复
    
  5. primary key(主键约束,一张表只能有一个)

    • 添加了主键约束,主键字段中的数据不能为null,也不能重复

    • 主键和唯一性约束一样,存在表级约束和列级约束

    • 主键的作用:主键值是这行记录在这张表中唯一标识,第一范式要求任何一张表应该有主键

    • 主键的分类:

      • 根据主键的字段数量来划分:
        • 单一主键(常用)
        • 复合主键(多个字段联合起来添加一个主键约束)(不建议使用,违背了三范式)
      • 根据主键的性质来划分:
        • 自然主键(常用,和业务没有关系的普通自然数)
        • 业务主键(主键值和业务挂钩,不推荐使用)
    • 主键自增(auto_increment)

      drop table if exists t_user;
      create table t_user(
      	id int primary key auto_increment, -- id字段会自动维护一个自增的数字,从1开始
          username varchar(255)
      );
      -- oracle中也提供了自增机制叫做序列(sequence)
      
  6. foreign key(外键约束)

    • -- 请设计数据库表,用来维护学生和班级的信息?
      t_class 班级表
      	cno(pk)		cname
      	-----------------------
      	101			高三1102			高三2班
      	
      t_student 学生表
      	sno(pk)		sname		classno(该字段添加外键约束fk)
      	----------------------------------------------------
      	1			zs1			101
      	2			zs2			101
      	3			zs3			102
      	4			zs4			102
      	5			zs5			102
      
    • t_student中的classno字段引用了t_class表中的cno字段,此时t_student表叫做子表t_class表叫做父表

      • 顺序要求:

        删除数据的时候,先删除父表,再删除父表

        添加数据的时候,先添加子表,再添加子表

        创建表的时候,先创建父表,再创建子表

        删除表的时候,先删除字表,再删除父表

    • 将上表的建表语句写出来

      drop table if exists t_student;
      drop table if exists t_class;
      create table t_class(
      	cno int primary key,
          cname varchar(255)
      );
      create table t_student(
      	sno int primary key,
          sname varchar(255),
          classno int,
          foreign key(classno) references t_class(cno)
      );
      insert into t_class(101,'xxxx');
      insert into t_class(102,'xxxx');
      insert into t_student(1,'zs1',101);
      insert into t_student(2,'zs2',101);
      insert into t_student(3,'zs3',102);
      insert into t_student(4,'zs4',102);
      insert into t_student(5,'zs5',101);
      select * from t_class;
      select * from t_student;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值