1. 程式人生 > >mysql資料庫基礎(一)

mysql資料庫基礎(一)

一、 表操作

 1.建立資料庫
   CREATE DATABASE mydb CHARACTER SET utf8;
 2.建立資料表
   CREATE TABLE IF NOT EXISTS person(
    person_id SMALLINT UNSIGNED,
    fname VARCHAR(30),
    lname VARCHAR(20),
    genter ENUM('M','f'),
    CONSTRAINT pk_person PRIMARY KEY(person_id));

   CREATE TABLE IF NOT EXISTS favorate_food(
    person_id SMALLINT UNSIGNED,
    food VARCHAR(30),
    CONSTRAINT pk_per_food PRIMARY KEY(person_id,food),
    CONSTRAINT fk_food_fav_per FOREIGN KEY (person_id) REFERENCES person(person_id));

    例如:

    mysql> CREATE TABLE IF NOT EXISTS transaction(
  -> txn_id INTEGER UNSIGNED,
  -> txn_date DATETIME,
  -> account_id INTEGER UNSIGNED,
  -> txn_type_cd VARCHAR(10),
  -> amount DOUBLE(10,2),
  -> teller_emp_id SMALLINT UNSIGNED,
  -> execution_branch_id SMALLINT UNSIGNED,
  -> funds_avail_date DATETIME,
  -> CONSTRAINT PRIMARY KEY(txn_id),
  -> FOREIGN KEY(account_id) REFERENCES account(account_id),
  -> FOREIGN KEY(teller_emp_id) REFERENCES employee(emp_id),
  -> FOREIGN KEY(execution_branch_id) REFERENCES branch(branch_id));
 Query OK, 0 rows affected (0.04 sec)       

 3.修改表字段
   ALTER TABLE person MOFIDY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
  4.刪除表
   DROP TABLE person;

二、約束(constraint)

 1.主鍵約束(PRIMARY KEY)
   CONSTRAINT pk_person PRIMARY KEY(person_id)
 2.外來鍵約束(FOREIGN KEY(...) REFERENCES table(...))
   CONSTRAINT fk_fav_per FOREIGN KEY(person_id) REFERENCES person(person_id);
 3.檢查約束之列舉(ENUM)
   genter ENUM('M','F')

三、資料操作

 1.插入
  INSERT INTO person(person_id,fname,lname,genter) 
  VALUES(null,'Smis','Zh','F');
 2.更新
  UPDATE person SET fname = 'SSS',lname='miei' WHERE person_id = 1;
 3.刪除
    DELETE FROM person WHERE person_id = 1;
 4.查詢

四、查詢入門

1.查詢機制
每當查詢被髮送到伺服器端時,伺服器在執行語句之前會進行如下檢查:
(1)使用者是否有許可權執行該語句
(2)使用者是否有許可權訪問目標資料庫
(3)語句語法是否正確
如果通過了檢查,語句就會被傳遞給查詢優化器,它負責為查詢找到最有效率的執行方式。
當伺服器執行完查詢後,就會向呼叫程式返回一個結果集。

2.查詢語句
字句:select,from,where,group by,having,order by.
(1)select : select 字句中可以加入 字元、表示式、函式等。
(2)distinct : 可以去除重複的行。
(3)from : from
字句定義了查詢中使用的表,以及連線這些表的方式。 1].臨時表: select e.emp_id ,e.fname from (select * from employee) e where e.emp_id > 2; (4)where : 對結果集進行篩選。 (5)group by : 根據列值對資料進行分組。 (6)having : 對分組資料進行過濾。 (7)order by: 對結果集中的原始列資料或是根據列值資料計算的表示式結果進行排序。預設為升序(ASC),降序為(DESC)。還可以根據表示式排序。

五、表的分類

  1. 永久表

    永久表:採用 create table 來建立的表
  2. 臨時表

    臨時表:子查詢返回的表
  3. 虛擬表
虛擬表:使用 create view 建立的檢視,它的行為表現得像一個表,但實際上並不擁有任何資料,當發出一個對檢視的查詢時,該查詢會被繫結到檢視定義上,以產生最終被執行的查詢。

建立虛擬表:
create view employee_vw as select emp_id,fname,lname, YEAR(start_date) start_year from employee;
使用虛擬表:
select emp_id,start_year from employee_vw;