SQL中的表

1、创建表
---1.1建表语句的语法格式
---1.2建表
---1.3常见的字段的数据类型
2、删除表
3、向表中插入数据
---3.1概述
---3.2插入数据的四种方式
4、default默认值
5、表的复制
---5.1定义
---5.2两种方式
---5.3将查询结果插入到某张表中
6、增/删/改表结构
---6.1语法结构
---6.2示例
7、update 修改数据
---7.1语法格式
---7.2safe-updates模式
---7.3例子
8、删除数据
---8.1语法格式
---8.2例子
---8.3删除大表中的数据

创建表

建表语句的语法格式
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,
...
);

注意:
表名在数据库当中一般建议以t_或者tbl_开始。
VARCHAR长度最好是2的倍数,方便存储中文。

建表
  • 建一个t_student表
create table t_student(
no bigint,
name varchar(255),
sex char(1),
classno varchar(255),
birth char(10)
);

在这里插入图片描述

常见的字段的数据类型
数据类型 占用字节数 描述
char char(n) 定长字符串,存储空间大小固定使用char(2)来表示类型戒状态
varchar varchar(n) 变长字符串,存储空间等亍实际数据空间,只包含英文字符的字符串
int 4个字节 表示整型,比如自增 ID 和表示數量
bigint 8个字节 表示长整型,比如自增 ID(数量比较大的情况下)
float(有效数字位数,小数位) float(有效数字位数,小数位) 数值型
double(有效数字位数,小数位) double(有效数字位数,小数位) 数值型
date 8字节 表示日期和时间
BLOB Binary Large Object (二进制大对象)
CLOB Character Large Object(字符大对象)
其它…..
  • 示例
    1、VARCHAR(3)表示存储的数据长度不能超过3个字符长度。
    2、CHAR(3) 表示存储的数据长度不能超过3个字符长度。
    3、INT(3)表示最大可以存储999。
    4、BIGINT:对应java程序中的long类型。
    5、FLOAT(7,2)表示7个有效数字,2个有效小数位。
    6、DOUBLE(7,2)表示7个有效数字,2个有效小数位。
    7、DATE:日期类型,实际开发中,常用字符串代替日期类型。
    8、BLOB:
    a)专门存储图片、视频、声音等数据。
    b) 数据库存储图片是很常见,但存储大视频是很少的,一般都是存储视频地址。
    9、CLOB:可存储超大文本,可存储4G+字符串。
  • 插入日期的三种方式
    第一种方式:插入的日期格式和MySQL默认日期格式一致
    insert into t_student(no,name,birth) values(1,'Jack','1980-10-19');
    第二种方式:采用str_to_date
    insert into t_student(no,name,birth) values(1,'Jack',str_to_date('1980-10-19','%Y-%m-%d'));
    第三种方式:添加系统日期(now())
    insert into t_student(no,name,birth) values(1,'Jack',now());
  • VARCHAR与CHAR对比
    1、都是字符串。
    2、VARCHAR比较智能,可以根据实际的数据长度分配空间,比较节省空间;
    但在分配的时候需要相关判断,效率低。
    3、CHAR不需要动态分配空间,所以执行效率高,但是可能会导致空间浪费。
    4、若字段中的数据不具备伸缩性,建议采用CHAR类型存储。
    5、若字段中的数据具备很强的伸缩性,建议采用VARCHAR类型存储。

删除表

  • 两种方式
    第一种:drop table t_student;(如果数据库中没有该表格,则会报错)。
    第二种:drop table if exists t_student;
  • 最好采用第二种方式删除表格,但这是MySQL特色其它数据库无法使用。

向表中插入数据

概述

Insert into 表名(字段名1,字段名2,…) values(值1, 值1,…);
注意:字段和数值必须一一对应,字段与数据个数必须相同,数据类型必须一致。

插入数据的四种方式

1、向t_student 表格中所有字段插入数据。

Insert into t_student(
no, name, sex, classno, birth) 
values(
1, '张三', '男', '高三十六班', '1999-09-09');
Insert into t_student(
no, name, sex, classno, birth) 
values(
2, '李四', '男', '高三十六班', '1999-08-08');

在这里插入图片描述
2、向t_student 表格中部分字段插入数据。

Insert into t_student(
name, classno) 
values(
'王五', '高三十六班');

在这里插入图片描述
默认情况下,当表创建之后,没有指定约束也没指定默认值,系统默认值就是NULL ,默认值NULL表示:若插入的时候没有指定任何数据,默认插入 NULL 值。
目前王五的 no、sex、birth 值为 null ,我们可以往里插入值吗?

Insert into t_student(
no, sex, birth) 
values(
3, '男', '1999-10-10');

在这里插入图片描述
以上执行insert语句只能导致底层数据表中新增一条记录,
若希望NULL值变为其它值,我们必须使用UPDATE更新语句。
3、向t_student 表格中所有字段插入数据(省略字段,但是要按照顺序插入)。

Insert into t_student 
values(
3, '王五', '女', '高三六班', '1999-10-10');

在这里插入图片描述
4、一次插入多条数据。

Insert into t_student
(no, name, sex, classno, birth) 
values
(4, '赵六', '男', '高三十六班', '1999-11-11'), 
(5, '周七', '女', '高三六班', '1999-12-12');

在这里插入图片描述

  • 结论
    1、不建议将前面的字段省略,若省略就表示要将表中所有字段必须赋值(即使使用default默认的值也要再赋值),并且程序不健壮,若修改表结构,将可能导致INSERT语句执行失败。
    2、插入中文错误原因可能是:
    DOS窗口字符编码为GBK,数据库字符编码为UTF-8,可以使用MySQL-Front工具插入数据,该MySQL客户端开发软件在实际工作中使用较多。
    3、查看变量:show variables like '%char%';
    设置结果编码集(只对当前窗口有效)set character_set_results = 'GBK';

default默认值

1、创建表格时给字段设置默认值:default默认值。

create table t_student(
no bigint,
name varchar(255),
sex char(1),
classno varchar(255) default '高三十六班',
birth char(10)
);

在这里插入图片描述
在这里插入图片描述

表的复制

定义

1、将查询结果当作一张表创建。
2、语法结构:CREATE TABLE 表名 as select查询语句;

两种方式

1、完全复制t_student表到t_student1:

create table t_student1 as 
select * from t_student;

在这里插入图片描述
2、选择性复制t_student表到t_student2:

create table t_student2 as 
select name, classno from t_student;

在这里插入图片描述

将查询结果插入到某张表中
  • 语法结构
    INSERT INTO 表名 select查询语句;
  • 两种方法
    1、从t_student1表中查询出classno为高三十六班的,同时将查询结果插入到t_student1表中。
insert into t_student1 
select * from t_student1 
where classno = '高三十六班';

在这里插入图片描述
2、复制t_student表为t_student1,再将t_student表中数据插入到t_student1中。(在新建表上操作比较好、安全性高)

create table t_student1 
as select * from t_student;
insert into t_student1 
select * from t_student 
where classno = '高三十六班';

在这里插入图片描述

增/删/改表结构

语法结构

新增:ALTER TABLE 表名 ADD 字段名 字段类型(长度);
修改:ALTER TABLE 表名 MODIFY 字段名 字段类型(长度);
删除:ALTER TABLE 表名 DROP 字段名;

示例

1、给t_student表添加一个电话字段:
alter table t_student add tel varchar(10);
2、将字段tel长度扩展到20个长度
alter table t_student modify tel varchar(20);
3、将t_student 表中的tel字段删除
alter table t_student drop tel;
4、将t_user表中的联系方式字段名改为email

ALTER TABLE t_user RENAME COLUMN `联系方式` TO `email`;

update 修改数据

语法格式
UPDATE 表名 
SET 字段名 = 字段值,字段名 = 字段值 
WHERE 条件;

注意:update如果没有条件限制,将把整张表的数据全部更新。

safe-updates模式

1、MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令。
2、解决方法
show variables like 'SQL_SAFE_UPDATES';查看开关状态。
执行命令:SET SQL_SAFE_UPDATES = 0;修改数据库模式(关;1为开)。

例子

1、将编号no为5的classno改为高三九班,birth改为1999-03-03。

update t_student set 
classno = '高三九班', 
birth = '1999-03-03' 
where no = 5;

在这里插入图片描述
2、将所有性别sex改为男。

update t_student set 
sex = '男';

在这里插入图片描述
3、将t_student表中的classno包含“十六”的改为“网红班级”。

update t_student set 
classno = '网红班级' 
where classno like '%十六%';

在这里插入图片描述
4、将t_student表中名字为王五、赵六、周七的性别改为女。

update t_student 
set sex = '女' 
where name in ('王五', '赵六', '周七');

在这里插入图片描述

删除数据

语法格式

DELETE FROM 表名 WHERE 条件限制;
注意:若没有条件限制,会将表中所有记录全部删除。

例子

1、将t_student 表中no为5的学生删除。

delete from t_student 
where no = 5;

在这里插入图片描述
2、将t_student表中的数据全部删除。

delete from t_student;

3、将t_student表中classno为“网红班级”的name为“赵六”的删除掉。

delete from t_student 
where classno = '网红班级' and 
name = '赵六';

在这里插入图片描述

删除大表中的数据

1、删除比较大的表中的数据时,delete效率低。
2、使用truncate table 表名;,此时表被截断,不可回滚。

原文地址:https://www.cnblogs.com/yu011/p/13338348.html