博客整理day34 数据库sql操作
目录
python day34 数据库
一 创建表
增加表
create table 表名(
字段名 列表型[可选的参数], #必须加逗号
字段名 列表型[可选的参数] #最后一行不加逗号
)charset = utf8 #后面
增加数据
#语法
insert into 表名(列1,列2) values (值1,值2);
#例子
insert into t1 (id,name) values (1,'momo');
查询数据
#语法
select 列1,列2 from 表名; (*表示查询所有的列)
show tables;
#列子
select id,name from t1;
修改数据
#1.修改表名 语法
alter table 旧表名 rename 新表名;
alter table t1 rename t11;
#2.增加字段 语法
#添加的列永远是添加在最后一列之后
alter table 表名
add 字段名 列表型[可选的参数];
alter table t11 add name varchar(32) not null defaut '';
#添加的列永远是添加在第一列
alter table 表名
add 字段名 列表型[可选的参数] first;
alter table t11 add name varchar(32) not null defaut '' first;
#添加的列永远是添加在....列之后
alter table 表名 add 字段名 列表型[可选的参数] after 字段名;
alter table t11 add name varchar(32) not null defaut '' after age;
#3.删除字段 语法
alter table 表名 drop 字段名 ;
alter table t11 drop name;
#4.修改字段 语法
#修改字段数据类型
alter table 表名 modify 字段名 数据类型[可选的参数];
alter table t11 modify name char(30);
#修改字段名和数据类型
alter table 表名 change 字段名 字段名 数据类型[可选的参数];
alter table t11 change name name2 char(30) not null default '';
删除数据
#删除数据 语法
drop table 表名;
drop table t1;
复制表结构
create table t11 like t111;
二 查看表结构
#方法一
describe 表名;
#方法二
desc 表名;
#方法三 查看创建表的SQL语句
show create table 表名
三 MySQL支持的数据类型
整型
类型 | 大小 | 范围(有符号) | 范围(无符号) unsigned | 用途 |
---|---|---|---|---|
tinyint | 1字节 | (-128,127) | (0,255) | 小整数值 |
smallint | 2字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
mediumint | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
int或integer | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
bigint | 4 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 大整数值 |
float | 4 字节float(255,30) | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
double | 8 字节double(255,30) | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
decimal | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 double(65,30) | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
#浮点型
create table t1(
id int auto_increment primary key,
salary decimal(16,10),
num float
)charset=utf8;
#float : 精确到小数点两位
#decimal : 可以控制精确的小数点位 decimal(m,n) m是数字的总个数(负号不算),n是小数点后个数
字符串
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
#char(长度): 定长
create table t1(
id int unsigned auto_increment primary key,
name char(10) not null default 'momo'
)charset=utf8;
#varchar(长度): 变长
create table t2(
id int auto_increment primary key,
name varchar(10) not null default 'momo'
)charset=utf8;
'''区别:
char: 定长, 无论插入的字符是多少个,永远固定占规定的长度
场景:
1. 身份证
2. 手机号 char(11)
3. md5加密之后的值,比如密码 等 char(32)
varchar: 变长, 根据插入的字符串的长度来计算所占的字节数,但是有一个字节是用来保存字符串的大小的
注意:如果,不能确定插入的数据的大小,一般建议使用 varchar(255)
'''
日期时间类型
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 年月日 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时分秒 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD\HH:MM:SS | 年月日时分秒 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD\HHMMSS | 混合日期和时间值,时间戳 |
create table t1(
d date,
t time,
dt datetime
);
四 表的完整型约束
auto_increment : 自增
primary key : 主键索引,可以加快查询速度,列的值不能重复
not null : 标识该字段不能为空
default : 为该字段设置默认值
#列子1
create table t1(
id int,
name char(5)
)charset = utf8;
#例子2
create tabel t2(
id int auto_increment primary key,
name char(10)
)charset = utf8
#例子3
create table t3(
id int unsigned auto_increment primary key,
name char(10) not null defualt 'hello',
age int not null default 0
)charset = utf8
五 枚举
ENUM 中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显示。ENUM只允许从值集合中选取单个值,而不能一次取多个值。
create table t1 (
id int auto_increment primary key,
gender enum('male','female')
)charset utf8;
mysql> insert into t9 (gender) values ('male');#不是male或者female就会报错
六 操作表数据行
增
#语法
insert into 表名 (列1, 列2) values (值1,'值2');
#例子
insert into t1 (id, name) values (1, 'simple');
删
#语法
delete from 表名 where 条件;
#例子
mysql> delete from t1 where id=1;
delete from 表名; #删除表中所有的数据
truncate 表名; #没有where条件的
区别:
1. delete之后,插入数据从上一次主键自增加1开始, truncate则是从1开始
2. delete删除, 是一行一行的删除, truncate:全选删除 truncate删除的速度是高于delete的
改
#语法
update 表名 set 列名1=新值1,列名2=新值2 where 条件;
mysql> update t11 set name='momo' where id=1;
查
#语法
select 列1, 列2 from 表名; (*代表查询所有的列)
select * from t66 where id=1;
#between..and...: 取值范围是闭区间
select * from t11 where id between 1 and 3;
#避免重复DISTINCT
mysql> select distinct name from t11;
#通过四则运算查询
mysql> select name, age*10 as age from t1;
# in 用法
mysql> select * from t11 where id in (1,3,5);
#like : 模糊查询
mysql> select * from t11 where name like 'm%';
mysql> select * from t11 where name like '%o';
mysql> select * from t11 where name like '%mo%';