数据类型

image.png

DECIMAL的精确度更高 image.png

创建表:
shwo create database xxx;

create table

  1. // 如果没有这个表 则创建
  2. create table if not exists t {
  3. }

查看表结构

desc tableName; show create table xxx; 如果创建的表没有指明字符集 则会引用该数据库的字符集 如果该数据库没有字符集 则会引用配置文件的字符集

基于现有的表创建表

  1. create table mydb
  2. as select employee_id
  3. from employees
  1. # 创建表employees_copy 实现对employees表的复制 包括表数据
  2. create table employees_copy
  3. as select * from employees;
  4. # 创建表 employees_blank 实现对employess表的复制 不包括表数据
  5. create table employees_blank
  6. as select * from employees where 1 = 2;

修改表

添加一个字段

  1. # 添加字段
  2. alter table emp1
  3. # double(10,2) 一共有10位 小数点后面有2位
  4. add salary double(10, 2);
  5. # 添加字段并且指定位置
  6. alter table emp1
  7. add phone_number varchar(20) first; #
  8. alter table emp1
  9. add email varchar(20) after id;

修改一个字段

change用来字段重命名,不能修改字段类型和约束;

modify不用来字段重命名,只能修改字段类型和约束

  1. # 修改一个字段
  2. # 可以修改字段的数据类型 长度和默认值等
  3. alter table emp1
  4. modify phone_number varchar(25) default null;
  5. # 重命名一个字段(重命名的时候也可以修改字段的属性)
  6. alter table emp1
  7. change phone_number phone double(10, 3);

删除一个字段

  1. # 删除一个字段
  2. alter table emp1
  3. drop column email;

重命名表

  1. # 重命名表
  2. rename table emp1
  3. to emp2
  4. # 第二种方式
  5. alter table emp2
  6. rename to emp1

删除表

不光删除的表的结构 同时表的数据也清空

  1. # 删除表
  2. drop table if exists employees_blank;

清空表

  1. # 清空表操作
  2. truncate employees_copy;
  3. select *
  4. from employees_copy;

truncate 和 delete的区别

  1. truncate employees_copy
  2. delete employees_copy 都可以对表的数据进行删除 并且保留表的数据
  3. 不同的是: truncate table 一旦执行了此操作 表数据会被全部清除 同时 数据是不可以回滚的
  4. delete from 一旦执行此操作 表数据可以全部清除(不带where 同时数据是可以实现回滚的

DDL 和 DML的不同

  1. DDL 的操作一旦执行 就不可以回滚 不支持指令set autocommit = false (执行完ddl操作之后 一定会执行一次 commit)
  2. DML操作的默认情况 也是不能回滚的 设置一个参数 在执行DML之前 执行了 set autocommit = false 则执行的DML的操作就可以回滚

truncate 比delete 速度快 而且使用的系统和事物日志资源少 但 truncate 无事物且不出发trigger 有可能造成事故 建议在代码中使用delete

  1. drop table employees_copy;
  2. create table employees_copy
  3. as select * from employees;
  4. select * from employees_copy;
  5. set autocommit = false; # 支持回滚操作
  6. delete from employees_copy;
  7. rollback;
  8. select *
  9. from employees_copy;

表明_业务 unsigned 无符号

image.png
image.png
image.png

demo

  1. create table if not exists customers
  2. (
  3. c_num int(7),
  4. c_name varchar(50),
  5. c_contact varchar(50),
  6. c_city varchar(50),
  7. c_birth date
  8. );
  9. # 将 c_contact字段移动到c_birth字段后端
  10. alter table customers
  11. modify c_contact varchar(50) after c_birth;
  12. # 将c_name 字段数据类型改为 varchar(70)
  13. alter table customers
  14. modify c_name varchar(70);
  15. # 将c_contact 字段改名为c_phone
  16. alter table customers
  17. change c_contact c_phone varchar(50);
  18. # 新增c_gender 字段到 c_name后面 数据类型为char(1)
  19. alter table customers
  20. add c_gender char(1) after c_name;
  21. desc customers;
  22. rename table customers to customers_info;
  23. # 删除字段c_city
  24. alter table customers_info
  25. drop column c_city;
  26. desc customers_info;

DML 的增删改操作

增加数据

values 也可以写成value 但是 values是规范

  1. # 一条一条添加数据 按照声明字段的先后顺序添加
  2. # 字段需要按照声明字段的顺序添加
  3. desc emp1;
  4. insert into emp1
  5. values (123, '123', 1234);
  6. #2.指明要添加的字段(推荐使用 )
  7. insert into emp1(id, phone, salary)
  8. values ('1234', 123, 12345);

插入多条记录

  1. # 同时插入多条记录
  2. insert into emp1(id, phone, salary)
  3. value ('1234', 12345, 1234),
  4. ('1', 1, 1)

将查询出来的结果进行插入

  1. insert into emp1(id, phone, salary)
  2. select employee_id, 1, salary
  3. from atguigudb.employees
  4. where salary > 1000

更新操作

update 可以实现批量修改数据的

修改的数据如果受到约束的影响 有可能更新不成功

  1. # 更新操作 一般都会根where筛选 不然更新全表
  2. update emp1
  3. set id = 123
  4. where id = 1

更新多个字段

  1. # 更新多个字段
  2. update emp1
  3. set phone = 1,id = 12
  4. where salary = 1234;

删除操作

也可能受到约束的影响 删除也会不成功

  1. delete from emp1
  2. where id = 1;

sql8.0新增列