目录
1.1.14 delete、truncate、drop的区别
1.3.2 pymysql.connect()连接数据库函数
1.3.4 执行sql语句execute和executemany
一、数据库
1.1 基础操作
1.1.1 连接数据库
在win-doc窗口中,连接数据库:
mysql -h127.0.0.1 -uroot -p
mysql -h127.0.0.1 -uroot -p123456
mysql -hlocalhost -uroot -p
1.1.2 指定端口
mysql -hlocalhost -uroot -P3306 -p
1.1.3 mysql授权语句
# 此语句适用于mysql5版本,若你装的是mysql8.0高版本,这样使用会报错
GRANT ALL PRIVILEGES ON test.* TO 'abuser'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
# 报错原因:高版本数据库把创建用户和赋予权限分开了,所以高版本数据库应该按照如下步骤创建用户并授权
create user 'lappin'@'%' identified by '123456';
GRANT ALL PRIVILEGES ON test.* TO 'lappin'@'%' WITH GRANT OPTION;
# 刷新
flush privileges;
说明:
all privileges :表示所有的权限 ,增删改查权限全部都有了
*.*: 所有的数据库下面所有的表,test.*,表示test库下面所有表
'lifuche'@'%' :test库下面所有表,所有的权限,全部都给lifuche用户 , % 表示lifuche用户可以在任意机器上面进行连接登录
identified by '123456' :远程登录连接的密码
WITH GRANT OPTION: 表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项,导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
flush privileges:刷新权限列表
1.1.4 创建数据库
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
说明:
CREATE DATABASE:创建数据库
IF NOT EXISTS test:如果test库不存在
DEFAULT CHARSET utf8:默认utf8字符集
COLLATE utf8_general_ci: COLLATE指规则和限制,utf8_general_ci中的ci指大小写不敏感
mysql> CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.02 sec)
1.1.5 查看数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
1.1.6 选择数据库&查看你当前使用的数据库
mysql> use test; # 选择数据库test
Database changed
mysql> select database();# 查看你当前用的数据库
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
1.1.7 删除数据库 DROP DATABASE;
1.1.8 创建表
mysql> show tables;
Empty set (0.03 sec)
mysql> create table user(id int(10) primary key auto_increment,name varchar(20));
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.01 sec)
1.1.9 插入表数据&查询表数据
mysql> insert into user(id,name) values(1,"张三");
Query OK, 1 row affected (0.02 sec)
mysql> insert into user(name) values("李四"); # id是自增的,可省略不写
Query OK, 1 row affected (0.01 sec)
mysql> insert into user values(3,"王老师"); # 前面省略字段名时,values中每个字段值都要写
Query OK, 1 row affected (0.01 sec)
mysql> insert into user values(4,"吴老师"),(5,"小明"),(6,"王五");# 插入多行数据
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from user;
+----+--------+
| id | name |
+----+--------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王老师 |
| 4 | 吴老师 |
| 5 | 小明 |
| 6 | 王五 |
+----+--------+
6 rows in set (0.01 sec)
1.1.10 删除表数据
mysql> delete from user where id = 1;
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+----+--------+
| id | name |
+----+--------+
| 2 | 李四 |
| 3 | 王老师 |
| 4 | 吴老师 |
| 5 | 小明 |
| 6 | 王五 |
+----+--------+
5 rows in set (0.00 sec)
1.1.11 更新表数据
mysql> update user set name="赵小明",id=10 where id = 5;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from user;
+----+--------+
| id | name |
+----+--------+
| 2 | 李四 |
| 3 | 王老师 |
| 4 | 吴老师 |
| 6 | 王五 |
| 10 | 赵小明 |
+----+--------+
5 rows in set (0.00 sec)
1.1.12 删除所有表数据
1)delete from user;
2)truncate table user;
1.1.13 删除表数据及表结构
drop table user;
删除表字段
alter table 表名 drop 字段名;
alter table studentinfo drop status;
1.1.14 delete、truncate、drop的区别
参考:drop、truncate和delete的区别_青青angle的博客-CSDN博客_truncate和delete的区别
1.1.15 查看是否设置自动提交
MySQL默认操作模式就是autocommit=1自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。
mysql> show variables like "autocommit";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set, 1 warning (0.01 sec)
参考:关于mysql的参数autocommit_三斤和他的朋友们的博客-CSDN博客_autocommit
autocommit变量验证:
第一步:先在客户端A中执行
mysql> show variables like "autocommit";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set, 1 warning (0.01 sec)
mysql> select * from user;
+----+------+
| id | name |
+----+------+
| 1 | 一小 |
+----+------+
1 row in set (0.00 sec)
第二步:从客户端B查询表数据
第三步:然后在客户端A中执行
mysql> insert into user values(2,"小明");
Query OK, 1 row affected (0.01 sec)
第四步: 在客户端A中设置autocommit = 0,并插入一条新纪录,但不commit
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "autocommit";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)
mysql> insert into user values(3,"小张");
Query OK, 1 row affected (0.00 sec)
第五步: 在客户端A中commit
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
总结:
设定了autocommit=1后,所有的内容都被自动commit,除非写了begin,begin后的内容需要单独再commit一次才可以。
设定了autocommit=0后,所有的操作都需要commit后才会生效
如果2个终端尝试修改同一行数据,且都没有commit,第二个修改的终端则会卡死,等待第一次修改的commit。
1.1.16 查看表创建的语句
show create table user;
mysql> show create table user;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 |
+-------+---------------------------------------------------------------