一、数据表的操作
1. 增——操作
# 增
语法:
create table 表名(
字段名 列类型 [可选的参数], ### 记住加逗号
字段名 列类型 [可选的参数], ### 记住加逗号
.....
字段名 列类型 [可选的参数] ### 最后一行不加逗号
)charset=utf8; #### 后面加分号
# 创建表时的列的约束**************************************
auto_increment : 自增
primary key : 主键索引 , 加快查询速度 , 列的值不能重复
not null : 标识改字段不能为空 ,若不指定该约束条件,则在插入表数据时,若不给值则默认值时null,且在查询 时,where 条件的写法是 where 列名 is null 。但是我们在创建表时,一般还是写上 not null default '' ,此时我们的where条件的写法就是 where 列名 = '' 。 因为 where 列名 = ''的查询速度比where 列名 is null 的查询速度要快。
default : 为该字段设置默认值
# 列类型:**********************************
1.数字类型:
当列类型为数字类型时,在上面的列类型后面可以加一个参数 unsigned ,该参数表示让前面的数字类型的范围是无符号的范围。不加则默认是signed,表示有符号的范围。
无符号的意思是,假如 int 类型的整个范围是200,无符号的范围是 0~199
而有符号的范围是 -100~99 , 有符号的范围包括负数,无符号没有负数。
整型:
tinyint
smallint
mediumint
int (**************************推荐使用)
bigint
浮点型:
float 当小数位多时不一定精确,一般四舍五入保存两位小数
double 与float类似
decimal 可以表示非常精确的数字 语法: decimal(m, d) m是数字总个数(负数时不包括负号),d是小数点后个数。 若保存的数据的小数部分不足d,则自动补0,若小数部分多余d,则四舍五入到d个
2.字符串
char(长度) 定长的字符串,无论保存的数据是短是长,都按固定的长度保存,即都占用指定的大小的存储空间。
varchar(长度) 变长,会根据保存的数据的实际大小来开辟存储空间保存。并且一直自带一个字节的大小来保存数据的长度。
3.时间日期类型
year 只有年份
date 年月日
time 时分秒
datetime 年月日时分秒(***********************推荐使用)
timestamp 时间戳 表示从1970计算机元年开始到现在的秒数
4. 枚举
enum() 列出所有选项。 和列表类似,限制存储的数据只能从括号内选择一个。
# 实例:
create table t1(
id int,
name char(5)
)charset=utf8;
# Query OK, 0 rows affected (0.72 sec) 如果回显是Quey ok,代表创建成功
2. 删——操作
# 删除表
语法:
drop table 表名; #### 线上禁用
3. 改——操作
# 修改表名和字段
# 1.修改表名
语法:
ALTER TABLE 旧表名 RENAME 新表名;
# 2.增加表字段
语法:
ALTER TABLE 表名
ADD 字段名 列类型 [可选的参数],
....
ADD 字段名 列类型 [可选的参数];
实例:
mysql> alter table t88 add name varchar(32) not null default '';
在每一增加字段的语句的最后都可以添加一个参数——》first 或者 after 已存在的字段名, first 表示添加的字段放在所有字段的第一行。 after表示添加的字段放在after指定的字段后面。没有参数则默认添加在最后一行。
# 3.删除表字段
语法:
ALTER TABLE 表名 DROP 字段名;
# 4.修改表字段
语法:
#修改某字段的属性
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
#修改字某段的名字和属性
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
4. 查——操作
# 查看表
语法:
show tables;
5. 复制表结构
- 复制表的结构只是复制某个表的字段和字段的属性,表中的数据不会复制,所以复制后的表为空。
语法:
create table 新表名 like 已存在的表名;
二、表数据行的操作
1. 增——操作
# 增加数据
语法:
insert into 表名 (列1, 列2) values (值1,'值2');
若不写列名,则values里的值会依次传给各列。写了列名则会把值一一对应的传给列。
2. 删——操作
# 删除某行数据
语法:
delete from 表名 where 条件;
delete from 表名; 当没有where条件时,删除表中所有的数据
truncate 表名; #### 固定写法,没有where条件
区别:
1. delete之后,插入数据从上一次主键自增加1开始, truncate则是从1开始
2. delete删除, 是一行一行的删除, truncate:全选删除 truncate删除的速度是高于delete的
3. 改——操作
语法:
update 表名 set 列名1=新值1,列名2=新值2 where 条件;
4. 查——操作
语法:
# 1.查询列
select 列1, 列2 from 表名; (*代表查询所有的列)
# 2.查询全部
select * from 表名; (*代表查询所有的列)
#3. 按条件查询
select * from t66 where 条件;
# 4. 去重查询
select distinct 列1 from 表名; 表示查询所有列1的数据,把其中重复的数据去掉。
# 5. 通过四则运算查询(不要用),把查询后的结果进行运算,会降低数据库的查询速率**********
select 列名*10 from 表名; 此列名为int类型
# 6. in方法 类似python中的成员运算
select * from t66 where id in (23,34,11);
# 7. 模糊查询 like 方法 (不要用),会降低数据库的查询速率**********
% 表示其他所有 , _ 表示代表任意一个
# 以x开头
select * from t66 where name like 'x%';
# 以x结尾
select * from t66 where name like '%x';
# 包含x的
select * from t66 where name like '%x%';
# 8. between..and...: 取值范围是闭区间
select * from t66 where id between 30 and 40;