Python/MySQL(二、表操作以及連接)


Python/MySQL(二、表操作以及連接)

mysql表操作:

主鍵:一個表只能有一個主鍵。主鍵可以由多列組成。

 外鍵 :可以進行聯合外鍵,操作。
mysql> create table yuan(id int auto_increment,yuangongname int,bumen_id int, primary key(id,yuangongname))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.43 sec)

查看表創建的類型:

show create table 表名;

mysql> show create table  class;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                   |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| class | CREATE TABLE `class` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `caption` char(10) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

 show create table 表名 \G;

mysql> show create table  class\G;
*************************** 1. row ***************************
       Table: class
Create Table: CREATE TABLE `class` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `caption` char(10) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR:
No query specified

alter table 表名 auto_increment=20;   設置自增的起始位。

mysql> alter table class auto_increment=20;
Query OK, 0 rows affected (0.11 sec)

步長:

基於會話級別:

show session variables like 'auto_inc%';  查看會話的步長

mysql> show session variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set, 1 warning (0.00 sec)

 set session auto_increment_increment=2;   設置會話步長

mysql> set session auto_increment_increment=2;
Query OK, 0 rows affected (0.00 sec)

set session  auto_incrment_offset=10;  

mysql> set session auto_increment_offset=10;
Query OK, 0 rows affected (0.00 sec)

基於全局級別:

show global variables like ' auto_inc%';  查看全局步長

show global variables like ' auto_inc%';  查看全局步長

mysql> show global variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+
2 rows in set, 1 warning (0.00 sec)

 set  global  auto_increment_increment=2;  設置全局步長 

mysql> set global auto_increment_increment=2;
Query OK, 0 rows affected (0.02 sec)

set global auto_incrment_offset=10;  

mysql> set global auto_increment_increment=1;
Query OK, 0 rows affected (0.00 sec)

數據庫中自增的共有(二種)

1.自增步長;

2.自增主鍵;

  

唯一索引:

unique 唯一索引名稱(列名,列名)

唯一:約束不能重復(可以為空),加速查找

主鍵:約束 不能重復且不能為空

  

創建唯一索引:

mysql> create table biao(id int auto_increment primary key,name char(10),unique s_t(id))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.82 sec)

外鍵的擴展:

一對多:例如,一個公司有很多員工但是部門只有固定的4個

創建一個部門表;

mysql> create table bumen(id int auto_increment primary key,bumenname char(10))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.55 sec)

mysql> show tables;
+--------------+
| Tables_in_b2 |
+--------------+
| b1           |
| biao         |
| bumen        |
| class        |
| course       |
| score        |
| student      |
| teacher      |
+--------------+
8 rows in set (0.00 sec)
創建員工表:
mysql> create table yuangong(id int auto_increment primary key,yuangongname char(10))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.62 sec)

mysql> show tables;
+--------------+
| Tables_in_b2 |
+--------------+
| b1           |
| biao         |
| bumen        |
| class        |
| course       |
| score        |
| student      |
| teacher      |
| yuangong     |
+--------------+
9 rows in set (0.00 sec)


為員工表添加信息:
mysql> insert into yuangong(yuangongname) values('張三');
Query OK, 1 row affected (0.11 sec)

mysql> insert into yuangong(yuangongname) values('張si'),('張ts'),('張li');
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from yuangong;
+----+--------------+
| id | yuangongname |
+----+--------------+
|  1 | 張三         |
|  2 | 張si         |
|  3 | 張ts         |
|  4 | 張li         |
+----+--------------+
4 rows in set (0.00 sec)

為部門表添加信息:
mysql> insert into bumen(bumenname) values('IT'),('BT'),('kT'),('XT');
Query OK, 4 rows affected (0.05 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from bumen;
+----+-----------+
| id | bumenname |
+----+-----------+
|  1 | IT        |
|  2 | BT        |
|  3 | kT        |
|  4 | XT        |
+----+-----------+
4 rows in set (0.00 sec)

一對一:

例如公司有多個員工,公司分配郵箱,每個員工只能有一個郵箱不能重復有多,就是一對一的

多對多:

例如,相親記錄表(用戶表 1用戶表 2 倆個表的內容可以進行多次匹配 就實現多對多效果;

 SQL語句數據行操作補充;

增
   
insert into biao(name,age) values('alex',18);
insert into biao(name,age) values('alex',18),('egon',10);
insert into biao(name,age)  select name,age from biao2;

刪:
delete from biao;
delete from tb12 where id !=2
            delete from tb12 where id =2
            delete from tb12 where id > 2
            delete from tb12 where id >=2
            delete from tb12 where id >=2 or name='alex'

改:
update biao set name='alex' where id>2 and name='egon'
update biao set name='alex',age=19 where id>2 and name='egon';

查:
     select * from biao:
     select name from biao;
     select id,name from biao where id>22 or name='alex';
     select * from tb12 where id in (select id from tb11)
     select * from tb12 where id between 5 and 12;  (閉區間包含自己本身)

 通配符:

select * from biao where name like 'a%'  (查看以a開頭的任意內容)
 select * from biao where name like 'a_'  (查看以a開頭的下一個內容)
 select * from biao where name like '%a%'  (查看包含a的內容)
 select * from biao where naem like '%a' (查看以a結尾的內容)

 分頁:

select * from biao limit 10;  (查看10的內容從0開始排列))
 select * from biao limit 1,10;(查看從1開始后面的10個內容)
 select * from biao limeit 10 offset 20;(查看從20開始后面的10個人內容)

 排序:

select *from biao order by id desc (從大到小的排序)
select *from biao order by id asc (從小到大的排序)

 查看后10條數據:

select *from biao order by id desc limit 10;  (把表的內容進行反轉 ,然后再獲取10條數據)

 分組:(count . max . min . sum . avg)

select  count(id),min(id),max(id),part_id from

mysql> select count(cid) from class group by cid;
+------------+
| count(cid) |
+------------+
|          1 |
|          1 |
|          1 |
+------------+
3 rows in set (0.04 sec)

mysql> select caption from class group by caption;
+----------+
| caption  |
+----------+
| 一年三班 |
| 三年一班 |
| 三年二班 |
+----------+
3 rows in set (0.04 sec)


mysql> select sid,class_id from student group by sid,class_id;
+-----+----------+
| sid | class_id |
+-----+----------+
|   1 |        1 |
|   2 |        1 |
|   3 |        2 |
+-----+----------+
3 rows in set (0.04 sec)


mysql> select sid from student group by sid having  max(sid)>1;
+-----+
| sid |
+-----+
|   2 |
|   3 |
+-----+
2 rows in set (0.09 sec)


**** 如果對於聚合函數結果進行二次篩選時?必須使用having ****
                    select count(id),part_id from userinfo5 group by part_id having count(id) > 1;

                    select count(id),part_id from userinfo5 where id > 0 group by part_id having count(id) > 1;

 連表操作 (left join 表名 on 有相關關系的進行連接,並設置是否相等,如果不設置就是(的卡爾基效果,表的行數相乘))

mysql> select * from teacher join course on course.tearch_id=teacher.tid;
+-----+-------+-----+-------+-----------+
| tid | tname | cid | cname | tearch_id |
+-----+-------+-----+-------+-----------+
|   1 | 波多  |   1 | 生物  |         1 |
|   1 | 波多  |   2 | 體育  |         1 |
|   2 | 蒼空  |   3 | 物理  |         2 |
+-----+-------+-----+-------+-----------+
3 rows in set (0.03 sec)
mysql> select * from teacher right join course on course.tearch_id=teacher.tid;
+------+-------+-----+-------+-----------+
| tid  | tname | cid | cname | tearch_id |
+------+-------+-----+-------+-----------+
|    1 | 波多  |   1 | 生物  |         1 |
|    1 | 波多  |   2 | 體育  |         1 |
|    2 | 蒼空  |   3 | 物理  |         2 |
+------+-------+-----+-------+-----------+
3 rows in set (0.00 sec)

 

 靠左連接 (left join 表名 on 有相關關系的進行連接

mysql> select * from teacher left join course on course.tearch_id=teacher.tid;
+-----+-------+------+-------+-----------+
| tid | tname | cid  | cname | tearch_id |
+-----+-------+------+-------+-----------+
|   1 | 波多  |    1 | 生物  |         1 |
|   1 | 波多  |    2 | 體育  |         1 |
|   2 | 蒼空  |    3 | 物理  |         2 |
|   3 | 飯島  | NULL | NULL  |      NULL |
+-----+-------+------+-------+-----------+
4 rows in set (0.00 sec)

 靠右連接:right join 表名 on 有相關關系的進行連接

mysql> select * from teacher right join course on course.tearch_id=teacher.tid;
+------+-------+-----+-------+-----------+
| tid  | tname | cid | cname | tearch_id |
+------+-------+-----+-------+-----------+
|    1 | 波多  |   1 | 生物  |         1 |
|    1 | 波多  |   2 | 體育  |         1 |
|    2 | 蒼空  |   3 | 物理  |         2 |
+------+-------+-----+-------+-----------+
3 rows in set (0.00 sec)

mysql>

 不顯示NULL(空)行(inner)

mysql> select * from teacher inner join course on course.tearch_id=teacher.tid;
+-----+-------+-----+-------+-----------+
| tid | tname | cid | cname | tearch_id |
+-----+-------+-----+-------+-----------+
|   1 | 波多  |   1 | 生物  |         1 |
|   1 | 波多  |   2 | 體育  |         1 |
|   2 | 蒼空  |   3 | 物理  |         2 |
+-----+-------+-----+-------+-----------+
3 rows in set (0.00 sec)

 篩選條件:

這些條件可以在對表進行操作時代入

 1 in 2 not in 不在
 3 and 4 or 5 = 等於
 6 != 不等於
 7 > 大於
 8 < 小於
 9 >= 大於等於
10 <= 小於等於
11 between and  在什么之間 和 .....

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM