MySql 學習二

show databases;


查看當前選擇的數據庫

select database();

use test3;(使用表)

查詢編碼格式(這樣可以避免在doc下看到的亂碼)

show variables like 'character%';


set character_set_client=gbk;

set character_set_results=gbk;

開始創建表


create table student(

id int,

name varchar(20),

chinese float,

english float,

math float

);

insert into student(id,name,chinese,english,math) values(1,'陳冠希',89,78,90);

insert into student(id,name,chinese,english,math) values(2,'郭美美',67,98,56);

insert into student(id,name,chinese,english,math) values(3,'阿嬌',88,98,90);

insert into student(id,name,chinese,english,math) values(4,'李一',87,78,77);

insert into student(id,name,chinese,english,math) values(5,'李來財',82,84,67);

insert into student(id,name,chinese,english,math) values(6,'張進寶',55,85,45);

insert into student(id,name,chinese,english,math) values(7,'黃蓉',75,65,30);

然後插入數據


distinct 明顯的,獨特的



查詢表中所有的學生信息

select * from STUDENT;

查詢表中所有學生的姓名和對應的英語成績。

select NAME,ENGLISH from STUDENT;


顯示英語成績,過濾表中重複數據

select distinct ENGLISH from STUDENT;


在所有學生數學分數上加10分特長分。

select NAME,MATH+10 from STUDENT;


統計每個學生的總分。

select NAME MATH+CHINESE+ENGLISH from STUDENT;


使用別名表示學生分數。

select NAME as 姓名,MATH+ENGLISH+ENGLISH 總分 from STUDENT;(注意在使用別名的時候的as是可以省略的)



查詢姓名爲"陳冠希"的學生成績

select * from STUDENT where NAME='陳冠希';


查詢英語成績大於90分的同學


select * from STUDENT where ENGLISH > 90;


查詢總分大於200分的所有同學

select * from STUDENT where(MATH+CHINESE+ENGLISH)>200;


查詢英語分數在 80-90之間的同學。


select * from STUDENT where ENGLISH between 80 and 90;


查詢數學分數爲89,90,91的同學。

select * from STUDENT where MATH in(89,90,91);


查詢所有姓李的學生成績。

select * from STUDENT where NAME like '李%';


查詢數學分>80,語文分>80的同學。

select * from STUDENT where MATH>80 and CHINESE>80;



注意:not and or 優先級依次降低。一元運算符比二元的要高。


對數學成績排序後輸出。

select MANE,MATH from STUDENT order by MATH;


對總分排序後輸出,然後再按從高到低的順序輸出


select NAME,MATH+CHINESE+ENGLISH 總分 from STUDENT order by 總分 desc;


對姓李的學生語文成績排序輸出


select NAME,CHINESE from STUDENT where NAME like '李%' order by CHINESE; 


注意:訂單,order。創建表時要注意不要和關鍵字衝突。

解決辦法:

1、把用戶定義的內容用反引號引起來。`(Esc按鍵的下方)

2、數據庫命名習慣:表名ORDERS (建議)這樣將表名變爲複數形式

這樣可以避免和關鍵字衝突


create table order(id int);


這樣的輸入會報錯,所以我們必須加上`(Esc按鍵下方)的反引號


應該這樣輸入:

create table `order`(int int);


查看錶格式

desc `order`;



二、完整性約束


數據完整性的意義:

數據完整性是爲了保證插入到數據中的數據時正確的,

它防止了用戶可能輸入錯誤。

數據完整性有以下三類


1、實體完整性:

規定表中的一行(即每一條記錄)在表中是唯一的實體(Entity)。

實體完整性通過表的主鍵來實現。

主鍵:不能爲null;唯一


創建一個表格T1,並聲明一個主鍵


寫法一(只能指定一個字段作爲主鍵)

create table T1(

ID int primary key,

NAME varchar(100)

);


insert into T1(ID,name) values(1'aa');



寫法二:(指定聯合主鍵)


create table T2(

ID int,

NAME varchar(100),

primary key(ID)

);


用desc T2;

查看錶的結構


比較寫法一和寫法二:

推薦寫法二:可以指定聯合主鍵


 寫法三:(創建沒有任何約束的表格,最後再修改約束) 

 create table T3(

ID int,

NAME varchar(100)

 );

alter table T3 add primary key(ID);



三種方法比較後:

極力推薦寫法三

寫法三的好處是:如果兩張表的主鍵受到另外一張表的約束的時候,在數據還沒有插入完畢的時候,

在插入數據的過程中會報錯。所以我們選擇寫法三的話,就可以避免這樣的錯誤。


注意:

邏輯主鍵(建議):除了唯一標識一條記錄外,沒有別的意義,一般

取名ID

業務主鍵:還有一定的業務意義。

在MySql中:

create table T4(

ID int key auto_increment,#自動增長,不建議使用,

並不是所有的數據庫都支持自動增長,比如Qracle就不支持。

NAME varchar(100)

);

域的完整性

指數據庫表的列(即字段)必須符合某種特定的數據類型偶約束。比如NOT NULL

1、約束數據的類型:強類型

2、非空約束: not null

3、唯一約束 unique

實例:

create table T5(

ID  int  primary key auto_increment,

USERNAME varchar(100) not null unique,

PHONE_NUM varchar(11) unique,

GENDER varchar(10) not null

);

參照完整性(多表的設計)定義外鍵

注意:類和表的結構關係;對象和記錄的關係(幫助學習ORM:Hibernate MyBatis)

一對多(實例:客戶對訂單)

CUSTOMERS                       ORDERS

ID(PK) NAME  PADDRESS ID(PK)   ORDER_NUM AMOUT      CUSTOMER_ID(FK)

  1 張三   四川               1        2016101301     10          1

  2    李四   湖北               2        2016101302     12          2

                                      3        2016101303     15          2

                                      4        2016101304     16          1

如何描述訂單與客戶的關係呢?

我們可以在ORDERS中增加一列CUSTOMER_ID(FK),這個CUSTOMER_ID 的值受到CUSTOMERS 的ID的約束

即一個訂單隻能對應一個客戶(一對多),反過來,一個客戶可以有多個訂單(多對一)

建表:

create table CUSTOMERS(

ID int primary key,

NAME varchar(100),

ADDRESS varchar(100)

);

create table ORDERS(

ID int primary key,

ORDER_NUM varchar(100),

AMOUNT float(10,2),

CUSTOMER_ID int,

constraint CUSTOMER_ID_FK foreign key (CUSTOMER_ID) references CUSTOMERS(ID)

);

說明:CUSTOMER_ID_FK爲約束名稱(一個庫中約束名稱唯一)

insert into CUSTOMERS values(1,"周莉",'四川');

insert into ORDERS values(1,'0001',100.00,2);(這句會報錯的,因爲有外鍵的約束)

我們插入:

insert into ORDERS values(1,'0001',100.00,1);這樣就是完美的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章