1. 程式人生 > >java學習day21~23--MySQL(上)

java學習day21~23--MySQL(上)

關於SQL  結構化查詢語言  structured query language

sql語句對於不同的資料庫有微小差異

資料語言

    1.DDL  資料定義語言
        create  建立表,檢視,索引...
        drop   刪除表,檢視,索引...
        alter   修改表
    2.DML  資料操控語言
        insert   插入資料
        update   修改資料
        delete  刪除資料
        select  查詢資料
    3.DCL  資料控制語言(資料的許可權控制)
        grant   授權
        revoke   回收許可權
    4.TCL   事物控制語言
        start transaction  開始事物(begin)
        commit   提交
        rollback   
注意:
    資料庫不嚴格區分大小寫
    資料庫中的字串是單引號
    varchar是可變字元

creat database 資料庫名;  --->建立一個庫
use 資料庫名;    --->使用資料庫 / 切換到某個庫
show tables;   --->顯示所有表
create table 表名 (
    列名1  型別    約束,
    列名2    型別    約束,
    ...
);    --->建立具體表

desc 表名;   --->查看錶的結構
insert into 表名(列1, 列2,...,列n)  values (值1, 值2, ..., 值n);    --->插入資料
select 內容 from 表名;    查詢表中的具體屬性
select * from 表名;  查詢表中
drop  table 表名    --->刪除表,裡面的資料也被刪除

約束:可以寫在型別後面,也可以單獨一行,將要約束的值作為引數傳入
unique   唯一約束,取值必須唯一
primary key    主鍵約束
foreign key   外來鍵約束,必須單起一行   reference 
not  null   非空約束
primery key(x,y)     複合主鍵
check   (mysql不支援)

eg:
學生表  student
編號 int  sid
姓名 varchar sname
生日 date   birthday
性別 char   sex

-- 把約束加在型別之後
create table student(
  sid int unique,
  sname varchar(20),
  birthday date,
  sex char(1)
);
-- 把約束單獨一行
create table student(
  sid int not null,
  sname varchar(20) not null,
  birthday date,
  sex char(1),
  unique(sid)
);
--外來鍵約束,student裡面的id必須符合class中的id的值
create table student(
  sid int primary key,
  sname varchar(20) not null,
  birthday date,
  sex char(1),
  cid int,
  foreign key(cid) references class(cid) /* student中的cid取值必須引用class中的cid的值 */
);


資料型別
    整數型別
        int  四個位元組
        tinyint 一個位元組
        smallint  兩個位元組
        bigint  八個位元組
    小數型別
        float   四個位元組
        double  八個位元組

    定點型別:decimal 小數部分不會丟失精度,但是佔用記憶體高
        decimal(10,2)  所有位數不超過10,小數部分不超過2,超過範圍會丟失資料
        decimal(10, 2)
            12345678.77  ok
            123456789.44  存不下
            12345678.456  小數部分變為46
    字串型別
        char(最大長度)   定長的字元型別   用空格補齊不足的部分,再查詢時會去掉,效率高,但佔用空間高
        varchar(變長的字元型別)    不用空格補齊,記憶體較優,但效率較低
    日期型別
        datetime   包括年月日,時分秒,範圍大(公元1000--9999)
        date  只包括年月日
        time 只包括時分秒
        timestamp  也可以包括年月日時分秒,範圍小(1970--2038)

        now()  獲取當前時間
        values('時間');      給定一個特定的時間,注意格式和合理性

    ? 資料型別   回車   --->會提示輸入的資料型別的範圍

自增列(主要用於在給主鍵產生一個唯一值)
auto_increment    產生一個自動增長的值,初值給null,自動增1
        使用了自增長,就不要手動賦值了,否則會使用手動賦的值
        也可以選擇不從1開始賦值,即指定初始值

指定預設值   default '指定值' 
default  current_timestamp    插入資料時,採用當前時間作為預設值
on update current_timestamp 修改資料時,採用修改時間的時刻來更新這一列

修改   update
update 表名 set 列名 = 新值, 列二 = 值二...    修改表中所有的行
update 表名 set 列名=新值, 列二=值二... where 列名=條件;    -- 僅更新符合條件的記錄
如果條件不滿足去更新不會報錯,但影響行數是0
更新多個列   ,用逗號隔開
注意:主鍵列主要用於查詢,一般不會更新 
alter   修改
給老師新增一列年齡  alter table teacher add age tinyint;
給老師的姓名列擴充套件長度    alter table teacher modify tname varchar(30)

刪除
delete from 表名;   刪除表中所有記錄,但表的定義不動
drop table 表名;   刪除這個表連同裡面的資料
delete from 表名 where 列名=條件;   僅刪除符合條件的記錄

主鍵所在表可以稱為`主表`,而外界所在表稱為`從表`
主表中刪除的記錄,如果被從表引用,那麼會刪除失敗,違反外來鍵約束(外來鍵約束預設行為)。

外來鍵約束還有一種行為,主表記錄刪除,把從表中與之關聯的記錄一塊刪除(級聯刪除)
以員工和部門為例:foreign key(deptno) references dept(deptno) on delete cascade
 例如: 刪除10號部門,不僅會刪除10號部門,而且會被從表(emp)中的10部門下所有員工也一塊刪除

查詢: select
select 列名... from 表名 where 條件;

條件
1.比較運算
  表示相等的 =
  大於 >
  大於等於 >=
  小於  <
  小於等於 <=
  不等於 !=
  
2.邏輯運算 and(並且) or(或者) not(取反)
  
  -- 查詢工資大於800 並且 部門等於20
  where sal>800 and deptno=20
  -- 部門=20 或者 等於30的
  where deptno=20 or deptno=30;
  
3. null值
資料庫中的null ,比較特殊,不能使用=來比較, 必須用 is null
  例如:查詢佣金為null的員工
  select * from emp where comm is null;
  例如:查詢佣金不為null的員工
  select * from emp where comm is not null;

4. like (模糊查詢)
   例如查詢以 ‘S’字母打頭的員工
   
select * from emp where ename like 'S%';

萬用字元 % 表示匹配0~多個任意的字元
萬用字元 _ 表示匹配一個任意字元

5. between ... and ... 範圍匹配
求工資大於等於1000, 小於等於2000的員工
select * from emp where sal>=1000 and sal<=2000;

select * from emp where sal between 1000 and 2000;
1) 必須按有小到大順序
2) between 包含等於條件

6. in 求這一列是否在一個值列表內
求所有銷售人員和經理
select * from emp where job='SALESMAN' or job='MANAGER';

select * from emp where job in ('SALESMAN', 'MANAGER');

7. limit (mysql特有的)
用來限制返回的結果數
1) limit n;       n表示最多返回幾條記錄
2) limit m, n;    m代表偏移量(下標) 注意偏移量從0開始

8. order by 用來給結果排序
語法: order by 列名 asc|desc, 列名 asc|desc, ...
例如:按工資升序:
select * from emp order by sal;
select * from emp order by sal asc;
按工資降序:
select * from emp order by sal desc;
其中如果不寫asc或desc,預設升序

如果多列排序,如果第一列取值相同,再按照第二列進行排序,例如:
先按工資排序,工資相同的,再按姓名排序:
select * from emp order by sal asc, ename asc; /*如果升序,兩個asc都可以省略*/

9. select 語句的順序:
select ... from 表 where 條件 order by 排序 limit 限制


匯入資料
source 路徑\sql檔案的名稱;
匯出資料
mysqldump -u root -p test3 > a.sql    在cmd視窗執行