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 表名;
,此时表被截断,不可回滚。