Python day 41:数据库的增删改查初级操作/外键(一对多)
## 数据库的操作: ```python 增加:create database 数据库名称; 例:create database db1; 删除:drop database 数据库名称; drop database db1; 修改: 没有专门的的指令,只能删了重建 查询: show databases; 使用: use 数据库名; #对表/列/记录的操作都必须先use 数据库名 例: use db1; ``` ## 数据表的操作: ```python #首先 use 数据库名称; 创建:create table 表名(列名1 列类型 ,列名2 列类型); 例:create table t1( id int auto_increment primary key,name char(32) not null default "")engine=Innodb charset=utf8; 添加:insert into 表名(列名1,列名2) values(值1,值2); 例:insert into t1 (id,name) values (1,"owen") 查询:show tables; desc 表名; 查看表的结构 show create table 表名;查看表的创建过程;#以上三个查看表本身 select 列名 from 表名;#查看表中数据 例: select * from t1; 删除:drop table 表名; drop table t1;(删除数据表所有数据,实际生产用不到该命令) 修改:alter table 表名 change 原列名 新列名 新列类型 例: alter table t1 change name username varchar(16) alter table 表名 add 新列 新列类型 例:alter table t1 name char(16); alter table 表名 drop 列名 例:alter table t1 drop name; 列类型: a. 数值型 create table t4 (id unsigned mediumint auto_increment primary key, name char(32) not null default '',pwd char(32) not null default '')engine=Innodb charset=utf8; tinyint : 范围: 有符号: -128到127无符号: 0 到 255 unsigned smallint范围: 有符号: -32768到32767无符号: 0 到 65535 unsigned mediumint范围:有符号: -8388608到8388607无符号: 0 到 16777215 unsigned int bigint区别: a. 取值范围不一样, 根据自己公司的业务来去选择 b. 无符号和有符号的意思 float(M,D) 浮点型 decimal(M,D) 定点型 比float更加的精准 例如: 3.1415151519868789789 float: 3.141515000000000000 decimal : 3.1415151519868789789 126.35:M:小数总共多少位 decimal(5, ) D:小数点后面几位 decimal(5, 2) 使用场景:比如 说存 salary 工资 : 6000.23 decimal(,2) b. 字符串类型 char : 定长 char(32) 这一列的值就是32 优点: 速度快 缺点: 浪费 archar : 变长 varchar(32) 优点: 不浪费, 节省空间 缺点: 速度慢 根据自己公司的业务来去选择: create table userinfo (id unsigned mediumint auto_increment primary key, name varchar(128) not null default '',pwd char(32) not null default '', create_time datetime not null default '1970-01-01 00:00:00')engine=Innodb charset=utf8; 一般情况下, 如果没有100%的把握, 都是用varchar() text: 文本 范围比较大, 如果存储大量字符的话, 可以使用这个字段 c. 时间类型 date 2019-6-12 推荐使用datetime ``` ## 数据行的操作: ```python 增: insert into 表名 (列名1,列名2) values (id,name); 上面已介绍; 查询: select 列名 from 表名;将表中所有数据列出 删: delete from 表名;将表中的所有的 数据删除掉, 再次添加的时 候, 继续会延续上一个 ID truncate 表名(t3); 将表中的所有的 数据删除掉, 再次添加 的时候, ID 会重新开始 修改: update 表名 set username="..."; 例:update t3 set username='zekai'; update t3 set username='xxxx' where id=3; update t3 set username='xxxx', pwd='xxxxx' where id=3; ``` ## 外键: ```python 问题: 1. 数据重复 2. 如果 部门过长的话, 太占用空间 解决方法:重新设计一张表, 这张表 中存放部门的相关信息 部门表案例: create table department(id int auto_increment primary key,department_name varchar(16) not null default "")engine=Innodb charset=utf8; insert into department (depart_name) values ("公关部"),("销售部"),("财务部"); create table userinfo(id int auto_increment primary key,name varchar(16) not null default "",depart_id int not null default "",constraint userinfo_depart foreign key (depart_id) references department(id))engine=Innodb charset=utf8; insert into userinfo(name,depart_id) values ("owen",1) '注意:depart_id的值,必须是表department中列depart_name有的值!' '创建多个外键的时候,名称不能一样 以上是 一对多 外键情况 ```