千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:千锋视频教程 >  python视频教程  >  Python学习之Mysql数据库技术操作指令整理

Python学习之Mysql数据库技术操作指令整理

时间:2018-05-31 15:09     来源:千锋视频教程 作者:千锋老师

一、概念:

数据: data

数据库: DB

数据库管理系统:DBMS

数据库系统:DBS

MySQL:数据库 

mysql:客户端命令(用来连接服务或发送sql指令)

SQL:结构化查询语言,其中MySQL支持这个。

SQL语言分为4个部分:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制)

MySQL->库->表->数据

SQL语句中的快捷键

\G格式化输出(文本式,竖立显示)

\s查看服务器端信息

\c结束命令输入操作

\q退出当前sql命令行模式

\h查看帮助

二、连接数据库:

mysql -h 主机名 -u 用户名  -p密码  库名

C:\>mysql  --采用匿名账号和密码登陆本机服务

C:\>mysql -h localhost -u root -proot   --采用root账号和root密码登陆本机服务

C:\>mysql -u root -p   --推荐方式默认登陆本机

Enter password: ****

C:\>mysql -u root -p lamp61  --直接进入lamp61数据库的方式登陆

三、授权:

格式:grant 允许操作 on 库名.表名 to 账号@来源 identifiedby '密码';

--实例:创建zhangsan账号,密码123,授权lamp61库下所有表的增/删/改/查数据,来源地不限

mysql>grant select,insert,update,delete on lamp61.* to zhangsan@'%' identified by'123';

mysql>grant all on *.* to zhangsan@'%' identified by '123';

QueryOK, 0 rows affected (0.00 sec)

四、SQL的基本操作

mysql>show databases;          --查看当前用户下的所有数据库

mysql>create database [if not exists] 数据库名; --创建数据库

mysql>use test;       --选择进入test数据库

mysql>show create database 数据库名\G    --查看建数据库语句

mysql>select database();     --查看当前所在的数据库位置

mysql>drop database [if exists] 数据库名;   --删除一个数据库

mysql>show tables; --查看当前库下的所有表格

mysql>desc tb1;  --查看tb1的表结构。

mysql>show create table 表名\G  --查看表的建表语句。

mysql>create table demo(      --创建demo表格

->name varchar(16) not null,

->age int,

->sex enum('w','m') not null default 'm');

QueryOK, 0 rows affected (0.05 sec)

mysql>desc demo;  --查看表结构

+-------+---------------+------+-----+---------+-------+

|Field | Type          | Null | Key |Default | Extra |

+-------+---------------+------+-----+---------+-------+

|name  | varchar(16)   | NO  |     | NULL    |      |

|age   | int(11)       | YES |     | NULL    |      |

|sex   | enum('w','m') | NO   |    | m       |       |

+-------+---------------+------+-----+---------+-------+

3rows in set (0.00 sec)

mysql>droptable if exists mytab;  -- 尝试删除mytab表格

--添加一条数据

mysql>insert into demo(name,age,sex) values('zhangsan',20,'w');

QueryOK, 1 row affected (0.00 sec)

mysql>insert into demo values('lisi',22,'m'); --不指定字段名来添加数据

QueryOK, 1 row affected (0.00 sec)

mysql>insert into demo(name,age) values('wangwu',23); --指定部分字段名来添加数据

QueryOK, 1 row affected (0.00 sec)

--批量添加数据

mysql>insert into demo(name,age,sex) values('aaa',21,'w'),("bbb",22,'m');

QueryOK, 2 rows affected (0.00 sec)

Records:2  Duplicates: 0  Warnings: 0

mysql>select * from demo; --查询数据

mysql>update demo set age=24 where name='aaa'; --修改

QueryOK, 1 row affected (0.02 sec)

Rowsmatched: 1  Changed: 1  Warnings: 0

mysql>delete from demo where name='bbb';  --删除

QueryOK, 1 row affected (0.00 sec)

mysql>\h   -- 快捷帮助

mysql>\c   -- 取消命令输入

mysql>\s   -- 查看当前数据库的状态

mysql>\q   -- 退出mysql命令行

五、 MySQL数据库的数据类型:

MySQL的数据类型分为四大类:数值类型、字串类型、日期类型、NULL。

5.1数值类型:

*tinyint(1字节)0~255  -128~127

smallint(2字节)

mediumint(3字节)

*int(4字节)

bigint(8字节)

*float(4字节)   float(6,2)

*double(8字节) 

decimal(自定义)字串形数值

5.2 字串类型

普通字串

*char  定长字串          char(8) 

*varchar可变字串 varchar(8)

二进制类型

tinyblob

blob

mediumblob

longblob

文本类型

tinytext

*text      常用于<textarea></textarea>

mediumtext

longtext

*enum枚举

set集合

5.3时间和日期类型:

date  年月日

time  时分秒

datetime年月日时分秒

timestamp时间戳

year年

5.4NULL值

NULL意味着“没有值”或“未知值”

可以测试某个值是否为NULL

不能对NULL值进行算术计算

对NULL值进行算术运算,其结果还是NULL

0或NULL都意味着假,其余值都意味着真

MySQL的运算符:

算术运算符:+ - * /%

比较运算符:= >< >= <= <> !=

数据库特有的比较:in,not in, isnull,is not null,like, between and

逻辑运算符:and ornot

like:支持特殊符号%和_ ; 其中 %表示任意数量的任意字符,_表示任意一位字符。

六、 表的字段约束:

unsigned无符号(正数)

zerofill前导零填充

auto_increment  自增

default     默认值

notnull  非空

PRIMARYKEY 主键(非null并不重复)

unique唯一性   (可以为null但不重复)

index常规索引

七: 建表语句格式:

create table 表名(

字段名 类型 [字段约束],

字段名 类型 [字段约束],

字段名 类型 [字段约束]

...

);

mysql>create table stu(

->id int unsigned not null auto_increment primary key,

->name varchar(8) not null unique,

->age tinyint unsigned,

->sex enum('m','w') not null default 'm',

->classid char(6)

->);

QueryOK, 0 rows affected (0.05 sec)

mysql>desc stu;

+---------+---------------------+------+-----+---------+----------------+

|Field   | Type                | Null | Key | Default |Extra          |

+---------+---------------------+------+-----+---------+----------------+

|id      | int(10) unsigned    | NO  | PRI | NULL    | auto_increment |

|name    | varchar(8)          | NO  | UNI | NULL    |                |

|age     | tinyint(3) unsigned | YES  |     |NULL    |                |

|sex     | enum('m','w')       | NO  |     | m       |                |

|classid | char(6)             | YES  |     | NULL   |                |

+---------+---------------------+------+-----+---------+----------------+

5rows in set (0.00 sec)

mysql>show create table stu\G  --查看建表的语句

***************************1. row ***************************

Table: stu

CreateTable: CREATE TABLE `stu` (

`id` int(10) unsigned NOT NULLauto_increment,

`name` varchar(8) NOT NULL,

`age` tinyint(3) unsigned default NULL,

`sex` enum('m','w') NOT NULL default 'm',

`classid` char(6) default NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `name` (`name`)

)ENGINE=MyISAM DEFAULT CHARSET=utf8

1row in set (0.00 sec)

mysql>

mysql>insert into stu(id,name,age,sex,classid) values(1,'zhangsan',20,'m','lamp

61');

QueryOK, 1 row affected (0.00 sec)

mysql>insert into stu(name,age,sex,classid) values('lisi',22,'w','lamp61');

QueryOK, 1 row affected (0.00 sec)

mysql>insert into stu(name,age,classid) values('wangwu',21,'lamp61');

QueryOK, 1 row affected (0.00 sec)

mysql>insert into stu values(null,'qq',24,'w','lamp62');

QueryOK, 1 row affected (0.00 sec)

mysql>insert into stu values(null,'aa',20,'m','lamp62'),(null,'bb',25,'m','lamp

63');

QueryOK, 2 rows affected (0.00 sec)

Records:2  Duplicates: 0  Warnings: 0

mysql>select * from stu;

+----+----------+------+-----+---------+

|id | name     | age  | sex | classid |

+----+----------+------+-----+---------+

|  1 | zhangsan |   20 | m  | lamp61  |

|  2 | lisi    |   22 | w   | lamp61 |

|  3 | wangwu  |   21 | m   | lamp61 |

|  4 | qq      |   24 | w   | lamp62 |

|  5 | aa      |   20 | m   | lamp62 |

|  6 | bb      |   25 | m   | lamp63 |

+----+----------+------+-----+---------+

6rows in set (0.00 sec)

八、修改表结构

-------------------------------------

格式: alter table表名 action(更改选项);

更改选项:

1. 添加字段:alter table 表名 add 字段名信息

例如:

-- 在user表的最后追加一个num字段 设置为int not null

mysql> alter table user addnum int not null;

-- 在user表的email字段后添加一个age字段,设置int notnull default 20;

mysql> alter table user addage int not null default 20 after email;

-- 在user表的最前面添加一个aa字段设置为int类型

mysql> alter table user addaa int first;

2. 删除字段:alter table 表名 drop 被删除的字段名

例如:-- 删除user表的aa字段

mysql> alter table userdrop aa;

3. 修改字段:alter table 表名 change[modify] 被修改后的字段信息

其中:change可以修改字段名, modify 不修改

例如:

-- 修改user表中age字段信息(类型),(使用modify关键字的目的不修改字段名)

mysql> alter table user modify age tinyint unsigned not null default20;

-- 修改user表的num字段改为mm字段并添加了默认值(使用change可以改字段名)

mysql> alter table user change num mm int not null default 10;

4. 添加和删除索引

-- 为user表中的name字段添加唯一性索引,索引名为uni_name;

mysql> alter table user add unique uni_name(name);

-- 为user表中的email字段添加普通索引,索引名为index_eamil

mysql> alter table user add index index_email(email);

-- 将user表中index_email的索引删除

mysql> alter table user drop index index_email;

5. 更改表名称:

ALTER TABLE 旧表名 RENAME AS 新表名

6. 更改AUTO_INCREMENT初始值:

ALTER TABLE 表名称 AUTO_INCREMENT=1

7. 更改表类型:

ALTER TABLE 表名称 ENGINE="InnoDB"

MySQL数据库中的表类型一般常用两种:MyISAM和InnoDB

区别:MyISAM类型的数据文件有三个frm(结构)、MYD(数据)、MYI(索引)

MyISAM类型中的表数据增删 改速度快,不支持事务,没有InnoDB安全。

InnoDB类型的数据文件只有一个 .frm

InnoDB类型的表数据增删 改速度没有MyISAM的快,但支持事务,相对安全。

九、数据的DML操作:添加数据,修改数据,删除数据

----------------------------------------------------------

1. 添加数据

格式: insert into 表名[(字段列表)] values(值列表...);

--标准添加(指定所有字段,给定所有的值)

mysql> insert into stu(id,name,age,sex,classid)values(1,'zhangsan',20,'m','lamp138');

Query OK, 1 row affected (0.13 sec)

mysql>

--指定部分字段添加值

mysql> insert into stu(name,classid) value('lisi','lamp138');

Query OK, 1 row affected (0.11 sec)

-- 不指定字段添加值

mysql> insert into stu value(null,'wangwu',21,'w','lamp138');

Query OK, 1 row affected (0.22 sec)

-- 批量添加值

mysql> insert into stu values

-> (null,'zhaoliu',25,'w','lamp94'),

-> (null,'uu01',26,'m','lamp94'),

-> (null,'uu02',28,'w','lamp92'),

-> (null,'qq02',24,'m','lamp92'),

-> (null,'uu03',32,'m','lamp138'),

-> (null,'qq03',23,'w','lamp94'),

-> (null,'aa',19,'m','lamp138');

Query OK, 7 rows affected (0.27 sec)

Records: 7  Duplicates: 0  Warnings: 0

2. 修改操作:

格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 条件

-- 将id为11的age改为35,sex改为m值

mysql> update stu set age=35,sex='m' where id=11;

Query OK, 1 row affected (0.16 sec)

Rows matched: 1  Changed: 1  Warnings: 0

-- 将id值为12和14的数据值sex改为m,classid改为lamp92

mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14--等价于下面

mysql> update stu set sex='m',classid='lamp92' where id in(12,14);

Query OK, 2 rows affected (0.09 sec)

Rows matched: 2  Changed: 2  Warnings: 0

3. 删除操作

格式:delete from 表名 [where 条件]

-- 删除stu表中id值为100的数据

mysql> delete from stu where id=100;

Query OK, 0 rows affected (0.00 sec)

-- 删除stu表中id值为20到30的数据

mysql> delete from stu where id>=20 and id<=30;

Query OK, 0 rows affected (0.00 sec)

-- 删除stu表中id值为20到30的数据(等级于上面写法)

mysql> delete from stu where id between 20 and 30;

Query OK, 0 rows affected (0.00 sec)

-- 删除stu表中id值大于200的数据

mysql> delete from stu where id>200;

Query OK, 0 rows affected (0.00 sec)

十、数据的DQL操作:数据查询

==============================================

格式:

select [字段列表]|* from 表名

[where 搜索条件]

[group by 分组字段 [having 子条件]]

[order by 排序 asc|desc]

[limit 分页参数]

mysql> select * from stu;

+----+----------+-----+-----+---------+

|id | name     | age | sex | classid |

+----+----------+-----+-----+---------+

|  1 | zhangsan |  20 | m  | lamp138  |

|  2 | lisi     | 20 | m   | lamp138  |

|  3 | wangwu   |  21| w   | lamp138  |

|  4 | zhaoliu  |  25 |w   | lamp94  |

|  5 | uu01     | 26 | m   | lamp94  |

|  6 | uu02     | 28 | w   | lamp92  |

|  7 | qq02     | 24 | m   | lamp92  |

|  8 | uu03     | 32 | m   | lamp138  |

|  9 | qq03     | 23 | w   | lamp94  |

|10 | aa       |  19 | m  | lamp138  |

|11 | sad      |  35 | m  | lamp94  |

|12 | tt       |  25 | m  | lamp92  |

|13 | wer      |  25 | w  | lamp94  |

|14 | xx       |  25 | m  | lamp92  |

|15 | kk       |   0 | w  | lamp94  |

+----+----------+-----+-----+---------+

15 rows in set (0.00 sec)

1. where条件查询

1. 查询班级为lamp138期的学生信息

mysql> select * from stu whereclassid='lamp138';

2. 查询lamp138期的男生信息(sex为m)

mysql> select * from stu where classid='lamp138' and sex='m';

3. 查询id号值在10以上的学生信息

mysql> select * from  stu whereid>10;

4. 查询年龄在20至25岁的学生信息

mysql> select * from stu where age>=20and age<=25;

mysql> select * from stu where age between 20 and 25;

5. 查询年龄不在20至25岁的学生信息

mysql> select * from stu where age not between 20 and 25;

mysql> select * from stu where age<20 or age>25;

6. 查询id值为1,8,4,10,14的学生信息

select * from stu where id in(1,8,4,10,14);

mysql> select * from stu where id=1 or id=8 or id=4 or id=10 orid=14;

7. 查询lamp138和lamp94期的女生信息

mysql> select * from stu where classid in('lamp138','lamp94') andsex='w';

mysql> select * from stu where (classid='lamp138' orclassid='lamp94') and sex='w

十二:导入和导出

-----------------------------------

-- 将lamp138库导出

D:\>mysqldump -u root -p lamp138 >lamp138.sql

Enter password:

---- 将lamp138库中的stu表导出

D:\>mysqldump -u root -p lamp138 stu>lamp138_stu.sql

Enter password:

-- 将lamp138库导入

D:\>mysql -u root -plamp138<lamp138.sql

Enter password:

-- 将lamp138库中stu表导入

D:\>mysql -u root -p lamp138<lamp138_stu.sql

Enter password:

D:\>

千锋Python培训课程还有严格、科学、负责的教学就业管理制度,班主任、职业规划师全程跟班,把握每位学员的学习状态,并有专业的职业素养课和就业指导课,确保教学及就业质量。还有大量免费Python视频教程帮助学员快速学习,更可以免费加入千锋开发者联盟,为会员提供免费技术支持及终身就业服务,免费参加千锋举办的各类技术沙龙和活动!

  • 北京天丰利校区(总部)地址:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2、3层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619
    深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋3楼
    咨询电话: 0755-23015275/23015546-801(硅谷) 0755-86660670-801(大学城)
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-811-9990 021-65233829-609
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 郑州校区地址:郑州市二七区航海中路60号海为科技园C区10层、12层
    咨询电话:0371-55191750
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 广州校区地址:广州市天河区元岗路200号慧通产业园B9三层
    咨询电话:020-38035223 020-38035220
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 武汉金融港校区地址:武汉市东湖高新技术开发区光谷大道77号金融港B18栋3楼
    武汉智慧园校区地址:武汉市东湖高新技术开发区光谷大道61号智慧园21栋2楼
    咨询电话:027-59313371
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、360网络安全、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训
  • 成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    咨询电话:400-811-9990 028-83178771
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:029-85363390
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 杭州旺田校区:浙江省杭州市江干区九堡旺田书画城A座4层
    杭州龙驰校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层
    咨询电话:400-811-9990 0571-86893632/0571-86094032
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 青岛校区地址:青岛市市北区龙城路卓越世纪中心3号楼8层801
    咨询电话:0532-80911190
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
    咨询电话:400-811-9990 023-68883009
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:0731-85513210
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 哈尔滨校区地址:哈尔滨市松北区创新一路699号 科技创新城19号楼B座五楼
    咨询电话:400-811-9990/0451-87173191
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 南京校区地址:南京市建邺区应天大街780号应天智汇产业园弘辉园1幢2楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱