学习笔记day_06_表的创建及数据的增删改

表的创建

  • 建表的语法格式:(DDL语句,DDL包括:create drop alter)

    create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型);
    
    create table 表名(
    	字段名1 数据类型, 
    	字段名2 数据类型, 
    	字段名3 数据类型
    );
    

数据类型

  • varchar(最长255,这里的255表示可以储存255个字符)

    • 可变长度的字符串
    • 会根据实际的数据长度来动态分配空间
    • 优点:节省空间 缺点:需要动态分配空间,速度慢
  • char(最长255)

    • 定长字符串
    • 分配固定长度的空间去存取数据
    • 优点:不需要动态分配空间,速度快 缺点:使用不恰当会导致空间的浪费
  • int(最长11)

    数字中的整数型,等同于Java的int

  • bigint

    数字中的长整型,等同于Java中的long

  • float

    单精度浮点型数据

  • double

    双精度浮点型数据

  • date

    短日期类型,包括年月日

  • datetime

    长日期类型,包括年月日还有时间的分秒信息

  • clob

    字符大对象,比如存储一篇文章,超过255个字符的都要采用clob字符大对象来存储

  • blob

    二进制大对象,专门用来存储图片,声音,视频等流媒体数据

创建一个学生表

要求:储存学生的学号、姓名、年龄、性别、邮箱地址的信息

create table student(
sno int,
sname varchar(32),
age int,
sex char(1),
email varchar(255)
);
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+-----------------+
| Tables_in_my_db |
+-----------------+
| dept            |
| emp             |
| salgrade        |
| student         |
+-----------------+

删除表:drop table student;//当这张表不存在的时候会报错

  • 快速创建一个表:

    create table emp2 as select * from emp;
    
    原理:
    	将一个查询结果当做一张表新建!!!!!
    	这个可以完成表的快速复制!!!!
    	表创建出来,同时表中的数据也存在了!!!
    

插入数据 insert(DML)

  • 语法格式:
insert into 表名(字段名1,字段名2,字段名3...) values(1,2,3...);
  • 字段名(属性名)和值要一一对应。数量要对应,数据类型也要对应
insert
into student(sno,sname,age,sex,email)
values(1,'zhangsan',18,'m','zhangsan@123');
+------+----------+------+------+--------------+
| sno  | sname    | age  | sex  | email        |
+------+----------+------+------+--------------+
|    1 | zhangsan |   18 | m    | zhangsan@123 |
+------+----------+------+------+--------------+
//插入的字段的数据不一定和表的顺序一样
insert
into student(sname,sno,sex,age,email)
values('lisi',1,'m',20,'lisi@123');
+------+----------+------+------+--------------+
| sno  | sname    | age  | sex  | email        |
+------+----------+------+------+--------------+
|    1 | zhangsan |   18 | m    | zhangsan@123 |
|    1 | lisi     |   20 | m    | lisi@123     |
+------+----------+------+------+--------------+
//也可以插入一个字段的数据,但是其他字段会取默认值,如果默认值没有指定就取null
insert
into student(sname)
values('wangwu');
+------+----------+------+------+--------------+
| sno  | sname    | age  | sex  | email        |
+------+----------+------+------+--------------+
|    1 | zhangsan |   18 | m    | zhangsan@123 |
|    1 | lisi     |   20 | m    | lisi@123     |
| NULL | wangwu   | NULL | NULL | NULL         |
+------+----------+------+------+--------------+
//当字段名全部省略的时候,每条数据都需要插入数据,并且插入的顺序和建表时的顺序一样
insert
into student()
values(1,'zhaoliu',18,'m','zhaoliu@123');
+------+----------+------+------+--------------+
| sno  | sname    | age  | sex  | email        |
+------+----------+------+------+--------------+
|    1 | zhangsan |   18 | m    | zhangsan@123 |
|    1 | lisi     |   20 | m    | lisi@123     |
| NULL | wangwu   | NULL | NULL | NULL         |
|    1 | zhaoliu  |   18 | m    | zhaoliu@123  |
+------+----------+------+------+--------------+
  • 插入多条数据

    语法:insert into 表名(字段名1,字段名2…) values(),(),()…();

    insert
    into student(sno,sname)
    values
    (2,'as'),
    (3,'df'),
    (4,'hg');
    +------+----------+------+------+--------------+
    | sno  | sname    | age  | sex  | email        |
    +------+----------+------+------+--------------+
    |    1 | zhangsan |   18 | m    | zhangsan@123 |
    |    1 | lisi     |   20 | m    | lisi@123     |
    | NULL | wangwu   | NULL | NULL | NULL         |
    |    1 | zhaoliu  |   18 | m    | zhaoliu@123  |
    |    2 | as       | NULL | NULL | NULL         |
    |    3 | df       | NULL | NULL | NULL         |
    |    4 | hg       | NULL | NULL | NULL         |
    +------+----------+------+------+--------------+
    
  • 插入子查询结果

    语法格式:

    insert
    into 表名(字段1…)
    子查询

    insert
    into student(sno,sname)
    select empno,ename from emp;
    
  • 补充知识点:

    如何设置默认值:

    drop table if exists t_student;
    create table t_student(
    	no int,
    	name varchar(32),
    	sex char(1) default 'm',//sex的默认值为m
    	age int(3),
    	email varchar(255)
    );
    

插入日期数据

关于日期数据处理的两个函数

str_to_date:将字符串varchar类型转换成date类型
date_format:将date类型转换成具有一定格式的varchar字符串类型。

创建一个famliy表
 create table family(
 name varchar(4),
 birth date);
插入数据
insert
into family(name,birth)
values('zhangsan','01-10-1999');
报错,原因是类型不匹配。数据库birth是date类型,这里给了一个字符串varchar
  • 插入日期有两种方式
    使用str_to_date函数

    语法格式:str_to_date(‘字符串日期’, ‘日期格式’)

    mysql的日期格式:
    %Y 年//注意这里的Y是大写Y
    %m 月
    %d 日
    %h 时
    %i 分
    %s 秒

    insert
    into family(name,birth)
    values('zs',str_to_date('01-10-1999','%d-%m-%Y'));
    +------+------------+
    | name | birth      |
    +------+------------+
    | zs   | 1999-10-01 |
    +------+------------+

如果输入的字符串日期格式为%Y-%m-%d,就不用str_to_date函数,系统会自动类型转换

insert
into family(name,birth)
values('li','2000-09-09');
+------+------------+
| name | birth      |
+------+------------+
| zs   | 1999-10-01 |
| li   | 2000-09-09 |
+------+------------+
  • 查询的时候可以以某个特定的日期格式显示

    date_format这个函数可以将日期类型转换成特定格式的字符串。

    date_format(日期类型数据, ‘日期格式’)

    select name,date_format(birth, '%m/%d/%Y') as birth from family;
    +------+------------+
    | name | birth      |
    +------+------------+
    | zs   | 10/01/1999 |
    | li   | 09/09/2000 |
    +------+------------+
    
  • date和datetime两个类型的区别

    date是短日期:只包括年月日信息。
    datetime是长日期:包括年月日时分秒信息。

    mysql短日期默认格式:%Y-%m-%d
    mysql长日期默认格式:%Y-%m-%d %h:%i:%s

  • 获取当前系统时间

    now() 函数,并且获取的时间带有:时分秒信息!!!!是datetime类型的

    insert into family(name,birth) values('lisi',now());
    +------+------------+
    | name | birth      |
    +------+------------+
    | zs   | 1999-10-01 |
    | li   | 2000-09-09 |
    | lisi | 2021-10-19 |
    +------+------------+
    

修改数据(update DML)

  • 语法格式:
    update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3… where 条件;

    update family set name='ww' where name='zs';
    +------+------------+
    | name | birth      |
    +------+------------+
    | ww   | 1999-10-01 |
    | li   | 2000-09-09 |
    | lisi | 2021-10-19 |
    +------+------------+
    
  • 注意:没有条件限制会导致所有数据全部更新。

删除数据(delet DML)

  • 语法格式:
    delete from 表名 where 条件;

    修改满足where的元组(记录)

  • 注意:没有条件,整张表的数据会全部删除

delete from family where name='lisi';
+------+------------+
| name | birth      |
+------+------------+
| ww   | 1999-10-01 |
| li   | 2000-09-09 |
+------+------------+
delete from family;//删除所有记录
mysql> select * from family;
Empty set (0.00 sec)
  • 带子查询的修改语句

    where 后面可以有子查询

  • 如何快速删除表中的数据

    • delete语句删除数据的原理:
      • 表中的数据虽然删除了,但是数据存储的空间没有被释放
      • 缺点:删除效率比较低
      • 优点:支持回滚(可以恢复数据)
    • truncate语句(DDL)删除数据的原理:
      • 语法:truncate table 表名;
      • 表中的数据和数据所占的空间都被删除了
      • 缺点:不支持回滚
      • 优点:效率高
  • 无论是delete还是truncate只是三处表中的数据而不是删除表

对表的增删改

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值