python之路-----MySql操做二

一.主鍵
  1.每一個 表只有一個主鍵
  2.每一個主鍵能夠由多個列組成.(若是主鍵由多個組成,只要有一行列值不等便可)
CREATE TABLE NAME (
    id INT auto_increment,
    NAME CHAR (20),
    sid int,
    PRIMARY KEY (id, sid)
);
插入數據(1,'a',1),主鍵值爲:(1,1)  ,插入(1,'b',2),主鍵爲(1,2),兩個主鍵值不徹底相等便可
主鍵示例
二.惟一索引
  惟一索引也是一種約束,約束內容爲:
  1.能夠爲空,可是不能重複
  2.加快查詢速度
CREATE TABLE name1 (
    id INT auto_increment,
    NAME CHAR (20),
    UNIQUE qu_name (NAME),
    INDEX (id)
)
惟一索引示例
  惟一索引的值能夠爲多列,稱爲聯合惟一索引
  和主鍵的區別:
    1.主鍵不容許爲空,惟一索引能夠爲空
    2.主鍵可在表外部被調用,惟一索引只能在表內使用
 
 

 三.自增mysql

  1.修改自增列起始值
    1.1.查看錶數據
      DESC hostinfo;
    1.2.查看建立表時的命令:
      show CREATE TABLE tablename
      show CREATE TABLE tablename \G 豎着顯示數據
CREATE TABLE `more2` (
`id` int(11) NOT NULL AUTO_INCREMENT, `pc_name` char(20) DEFAULT NULL, `owner_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uq_more2` (`owner_id`), CONSTRAINT `one2_more2` FOREIGN KEY (`owner_id`) REFERENCES `one2` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
    1.3.經過修改表的auto_increment值來進行自增初始值的修改
      ALTER TABLE tablename auto_increment=9;
     這時候會從9開始自增,新插入的數據自增列值爲9.
  2.修改步長
  mysql的步長單位和其餘的數據庫軟件不一樣,部分數據庫的步長爲表級別的,能夠針對表設置步長,而mysql的步長修改成會話級別的,一次鏈接修改的步長僅本次鏈接有效,若是新建鏈接,而步長依舊爲1.
  2.1 查看步長
    show session variables like '%auto_inc%';     #查看session變量

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 1 |   #步長
        | auto_increment_offset | 1 |       #數量默認起始值
        +--------------------------+-------+sql

  2.2 修改session級別自增變量值
     set session auto_increment_increment=3;   #設置步長爲3
    set session auto_increment_offset=5;           #設置自增列默認起始值爲5
  2.3 查看修改後的值   

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 3 |
        | auto_increment_offset | 5 |
        +--------------------------+-------+數據庫

    新建鏈接,查看自增起始值和步長服務器

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 1 |
        | auto_increment_offset | 1 |
        +--------------------------+-------+session

  咱們發送,經過修改session變量,僅本次鏈接有效,若是要使修改的值永久有效,須要修改global變量運維

  2.4查看global自增相關變量值ide

    show global variables like '%auto_inc%'; spa

        +--------------------------+-------+
        | Variable_name | Value |
        +--------------------------+-------+
        | auto_increment_increment | 1 |
        | auto_increment_offset | 1 |
        +--------------------------+-------+設計

  2.5 修改global變量code

    set global auto_increment_increment=2;  #修改自增步長

      set global auto_increment_offset=2;      #修改自增列起始值

  2.6 新建鏈接查看,配置依舊生效 。可是不建議使用該方法進行修改

四.外鍵
  補充:當主鍵爲多個時,外鍵能夠關聯多個
 create table morekey(
    id int auto_increment,
    sid int,
    name  char(20),
    PRIMARY KEY(id,sid)
);
CREATE table morekey1(
    id1 INT,
    sid1  INT,
    name1 CHAR(20),
    CONSTRAINT fk_moremore FOREIGN KEY(id1,sid1) REFERENCES morekey(id,sid)
 )
關聯多個外鍵
  1.一對多
    當咱們對兩個表經過外鍵創建約束關係時,此時表A的值對應應表B的多個值時,且B表的值僅對應A表的一個值,則該關係爲一對多。例如部門表和員工表。一個員工僅對應一個部門,而一個部門卻能夠對應多個員工。
 create table morekey(
    id int auto_increment,
    sid int,
    name  char(20),
    PRIMARY KEY(id,sid)
);
CREATE table morekey1(
    id1 INT,
    sid1  INT,
    name1 CHAR(20),
    CONSTRAINT fk_moremore FOREIGN KEY(id1,sid1) REFERENCES morekey(id,sid)
 )
一對多示例
  2.一對一
    當B表的值受A表的約束,且A表的值只能被B表使用一次,這時候A表和B表的值是一對一的。例如公司資產登記,一臺pc只能歸一個職工使用。或者是密碼登錄管理,不容許用戶名重複。
    咱們知道,惟一索引的做用就是對錶內的值進行約束,使其在表內是惟一的,不容許重複。咱們利用外鍵和惟一索引,便可完成一對一的表格設計
-- pc編號 
CREATE TABLE hostinfo(
    id int auto_increment PRIMARY KEY,
    host_name CHAR(20)
);
-- 用戶資產信息
CREATE TABLE employ(
    id int auto_increment PRIMARY KEY,
    name char(20),
    pc_id int,
    UNIQUE uq_hostinfo_employ (pc_id),
    CONSTRAINT fk_hostinfo_employ FOREIGN KEY (pc_id) REFERENCES hostinfo(id)
);
一對一示例
  3.多對多
    當A表的值和B表的值互相對應多個時,即兩表之間有着多對多的關係。例如運維人員對公司服務器的主機管理,一我的可登錄多臺服務器,一臺服務器也可多人登錄。
    咱們須要利用第三張表來記錄A表和B表之間多對多的關係。
-- 主機信息表 
CREATE TABLE pcinfo(
    id int auto_increment PRIMARY KEY,
    host_name char(20)
);
-- 管理員信息表 
CREATE TABLE admininfo(
    id int auto_increment PRIMARY KEY,
    name char(20)
);
-- 管理員主機對應表
CREATE TABLE admin_pc(
    id int auto_increment PRIMARY KEY,
    pc_id int ,
    user_id int,
    UNIQUE uq_user_pc (pc_id,user_id),
    CONSTRAINT fk_admin_pc FOREIGN KEY(pc_id) REFERENCES pcinfo(id),
    CONSTRAINT fk_admin_user FOREIGN KEY(user_id) REFERENCES admininfo(id)
);
多對多示例

 

五.操做表內容高級運用補充

  1.笛卡爾積

    笛卡爾積是關係代數裏的一個概念,表示兩個表中的每一行數據任意組合。例如A表中有三條數據,B表中有三條數據,則使用命令:

    select * from A,B,則會產生九條結果。A表的每一個值都會和B表的每一個值產生一條對應的值。關係圖以下:

            

 

  2.臨時表,將過濾出來的數據臨時當成一張表使用

命令格式:(SELECT 列名 FROM 表) as B

應用
連表操做:
SELECT * FROM (SELECT sid FROM score) as B LEFT JOIN student on student.sid=B.sid;
把score表中過濾出來的數據和student表進行連表操做

      3.insert插入過濾後的表內容

INSERT INTO class(caption) SELECT name FROM class2;
ps:須要注意的是,插入的列要跟表的列一致

  4.條件語句

  句型:case when 條件 then 條件爲正返回 esle 條件爲假返回 end

case when id<10 then 1 else 0 end;   #若是id小於10,則返回1,不然返回0

  5.利用常量來統計

select count(1) from tablename groub by id;

  6.插入動態值

SELECT 
                        student_id,
                        (select num from score as s2 where s2.student_id=s1.student_id and course_id = 1) as 語文,
                        (select num from score as s2 where s2.student_id=s1.student_id and course_id = 2) as 數學,
                        (select num from score as s2 where s2.student_id=s1.student_id and course_id = 3) as 英語
                    from score as s1;

  s1表的值能夠再內循環中使用。相似於:

for student_id in s1:
    for id in s2:
        s2=s1

   7.三元運算

    if(條件,爲真返回,爲假返回)

    e.g:if (isnull(xx),0,1)  若是爲null,則返回0,不然返回1

相關文章
相關標籤/搜索