十五、python学习之MySQL数据库(二):数据库的操作

版权声明:浅弋、璃鱼的原创 https://blog.csdn.net/qq_35709559/article/details/82703043

 一、数据库的操作:

1.数据库操作的概述:

在数据库操作中,基本操作都是围绕增删改查来操作。简称CRUD

  • C Create 创建
  • R Read/Retrieve 查询
  • U Update 修改
  • D Delete 删除

2.数据库操作

在数操作数据库时,所有的数据库语句都要以分号结束

数据库操作不区分大小写

  • 创建数据库
  • create database 数据库名
     create database testdb;
    
  • create database 数据库名 character set utf8
     create database testdb2 character set utf8;
    
  • 显示数据库创建信息 show create database 数据库名

      show create database testdb;
    
  • 修改数据库编码 alter database 数据库名 character set utf8

      alter database testdb charset=utf8;
  • 显示所有数据库

    show databases;

删除数据库 drop database 数据库名

drop database testdb2;

二、数据表的操作: 

1.创建数据表:

create table 表名(属性1 数据类型1[...] [,...])

--创建一个学生信息表,属性有学号(sid),姓名(sname),年龄(sage),性别(sgender)
create table student(sid int(11), sname varchar(30), sage smallint, sgender char(2));

2. 查看当前数据库所有拥有的数据表:

use 数据库名;        # 指定数据库

show tables;          # 显示所有数据表

3.显示创建信息:

show create table 表名;

或者:

show create table 表名 \G        # 结构化输出,以记录条目形式显示 .\G后不用加分号

或者:查看表结构

desc 表名;

4.使用alter table修改表结构:

4.1  增加字段: 为已存在的表添加一个新的字段:

语法: alter table 表名 add 列名 数据类型;

4.2 删除字段:在变种删除一个已经存在的字段:

语法: alter table 表名 drop 列名; 

4.3 修改数据类型:修改表中现有字段的数据类型:

语法: alter table 表名 modify 列名 新数据类型;

4.4 修改列的名及数据类型:修改表中现有字段的列名和数据类型

语法:alter table 表名 change 原列名 新类名 新数据类型;

三、Mysql常用的数据数据类型:

数据表是由若干个字段组成的,每个字段表示不同类型的数据。所以在创建表的时候,需要为每个字段指定相应的数据类型。

  • 整数类型:

 

  •  小数类型:

  •  字符串类型:

  • 枚举类类型(派生自整型):

enum('男', '女')

  • 时间类型:

 四、增删改查:

1.查询数据:

作用:查询数据就是客户端通过DBMS从数据库中取出满足条件的数据。

语法:select 字段名列表 from 表名;

 2.插入数据:

作用:向数据库中插入数据。

语法:insert into 表明[(字段名,...)] values (值列表, ...);

 2.1 插入所有字段数据:

不指定插入的字段,直接写插入的数据。

insert into tstudent values(1001, "小明", 18, "男");

2.2 插入指定字段,指定字段顺序和列中顺序可以不同,值顺序要和指定的列表准许相同。

insert into tstudent(sid, sname, sage) values(1001, "小明", 18);

2.3 插入多条数据:

insert into tstudent(sid, sname, sage) values(1001, "小明", 18), (1002, "小刚", 19);

3.修改数据:

作用:可以根据指定的条件,修改更新满足条件的数据。

语法:updata 表明 set 字段 = 值 [条件]

3.1更新所有数据:

update 表名 set 字段名=值;

update stu set sage = 25;

3.2 更新满足条件的数据

updata 表名 set 字段 = 值 where 条件;

update stu set sname = 'alice' where sname = "tony"; 

 4. 删除数据:

作用:将数据从数据表中删除

语法1: truncate 表名

语法2: delete from 表名 [条件]

4.1 删除全部的数据:

/*方法一:*/
truncate stu;    --truncate 表名; -> 删除表中全部数据

/*方法二:*/
delete from stu;    --不需要加条件,也不能加条件,删除全部数据,重置自动编号到默认值,没有事务,速度快。
/* 相当于 truncate stu,但是delete操作有事务操作,所以速度慢,而且不会重置自动编号。 */

4.2 删除满足条件的数据

/* 删除stu表中snumber=1的数据 */
delete from stu where snumber= 1;

 五、添加约束:

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的准确性,完整性、唯一性,可靠性、联动性。

1.没有约束时的问题:

  • 数据冗余;
  • 失去数据完整性;
  • 数据缺少唯一标识;
  • 失去实体完整性;
  • 失去域完整性;
  • 失去引用完整性;

2. 数据常用约束:

2.1 主键约束:

作用:让数据具有唯一标识

语法: primary key

  • 在创建是设置主键约束:
create table t_student(sid int primary key, sname verchar(30));
  • 创建后修改字段:
/* 使用 alter table 表名 add constraint 约束名 primary key (ID) 添加主键约束*/
alter table student add constraint primary key(sid);

字段被设置了主键约束,同时也具有了唯一性约束和非空约束。 在字段中插入重复数据时,或不给数据时会报错。

2.2 自增长:

作用:让数字值自动累加

语法:auto_increment

自增长设置在数值类型字段上,需要配合主键约束一起使用。如果没有设置逐渐约束,是不允许设置自动增长的

/* 将主键sid设置成自动增长 */
create table t_student(sid int primary key auto_increment, sname varchar(30));

2.3 唯一性约束:

作用:保证数据的准确性,不会出现重复数据

语法:unique

create table t_student(sid int primary key auto_increment, sname varchar(30) unique);

一个表中可以给多个字段设置唯一性,如果有需要的话。

2.4 非空约束:

作用:

不允许字段为空,添加数据时必须给值

语法:not null

/*设置sname字段为非空字段*/
create table t_student(sid int, sname varchar(20) not null);

2.5 默认值:

作用:在添加数据是,如果没有给定有默认约束字段的数据,该字段使用默认值填充语法:default

/* 给sname设置默认值NoName */
create table t_student(id int, name varchar(20) default "NoName");

2.6 外键约束:

作用:让两表之间产生联动关系。

语法:foreign key (字段名) references 表名(字段名)

--表1
create table t_class(cid int primary key, cname varchar(20));

--表2
create table t_student(sid int primary key, sname varchar(20), cid int, foreign key(cid) references)

设置外键约束字段所关联的字段,必须是主键约束字段。

想要删除有设置外键的表,必须先删除外键所关联的表或者解除外键(如何解除外键,请谨慎的往下看)

2.7 检查约束(在Mysql中):

作用:设置字段的域范围,也就是有效值范围

语法:check(值范围条件)

create table t_student(sid int primary key, sname varchar(20), sage int check(sage>0 and sage < 150), sgender char(10) check("boy" and "girl"));

3. 增加、删除约束:

添加约束前应该保证该字段上没有新添加的约束,删除约束前应保证该字段上存在该约束.

3.1添加主键约束:

语法: alter table 表名 add constraint 约束名 primary key(字段)

alter table t_student add constraint pk_id primary key(sid);

3.2 删除主键约束:

语法:alter table 表名 drop primary key

alter table t_student drop primary key;

3.3 添加外键:

语法: alter table 表名 add constraint 外键约束名 foreign key(外键字段名) references 关联表(关联字段)

/* t_student表的cid与t_class表的cid关联 */
alter table t_student add constraint FK_id foreign key (cid) referances t_class(cid);

3.4 删除外键约束:

语法: alter table 表名 drop foreign key 外键约束名

alter table t_student drop foreign key FK_id;

4.数据库导入导出:

作用:使用数据库导入河道处功能,可以完成对数据库的备份和迁移等操作.

4.1导出数据库:导出数据库使用mysqldump命令完成(在bash下操作)

语法: mysqldump -u root -p (注意不要输入密码) 要导出的数据库[(要导出的数据表,..)] > 目标文件名.sql

4.1.1导出整个数据库:

# 导出school数据库并命名为school_bak.sql
mysqldump -u root -p school > school_bak.sql

4.1.2 导出库中的指定表

# 导出school数据库中的t_student表并命名为student_bak.sql
mysqldump -u root -p school t_student > student_bak.sql

4.2 导入数据库:

4.2.1 导入数据库前需要先创建一个空数据库

4.2.2 语法:mysql -uroot -p 数据库名 < 要导入的文件.sql

# 导入school_bak.sql到数据库school
mysql -u root -p school < school_bak.sql

也可以在mysql客户端中使用:

-- 导入./路径下schoole.sql到当前数据库
sources ./school.sql

5.数据表设计思想:

  • 需求分析:根据用户的需求,分析出需要记录的数据
  • 需求设计:根据分析出的数据,设计E-R模型图
  • 详细设计:将E-R模型图转换成数据表
  • 三大范式:使用数据库三大范式的设计思想对数据表进行审核

5.1 E-R模型图:

概念:Entity-Relationship,实体关系图 组成元素

E-R图应用案例:将下边的项目需求,通过ER图形表示出来:

表示关系:

 

 5.2 三大范式:

数据库在设计时,需要满足三大范式的设计思想。

三大范式的理论非常抽象,有兴趣可以查阅资料进行了解,

下面以简单的形式描述三大范式,方便大家有一个简单的概念上的理解。

  • 第一范式 : 每一列都具有原子性,也就是不能再分割 

  • 第二范式 : 每个表只描述一件事情 

  • 三范式 : 表中不能存在冗余字段 

猜你喜欢

转载自blog.csdn.net/qq_35709559/article/details/82703043