mysql數據庫基礎知識

sql:結構化查詢語句

rdbms:關係型數據庫管理系統

 

數據庫設計三大範式:

1:原子性。數據庫的字段都是具有單一屬性的,不可再分。

2:唯一性。每個非主屬性都完全函數依賴於鍵碼。記錄具有唯一標識。每列都跟主鍵有關係。(以一對多爲例)

3:消除傳遞依賴。每個非主屬性都不偉遞領帶於鍵碼。即任何字段不能由其他字段派生出來,它要求字段沒有冗餘。

  沒有冗餘的數據庫設計可以做到。但是,沒有冗餘的數據庫未必是最好的數據庫,有時爲了提高運行效率,就必須降低範式標準,適當保留冗餘數據。具體做法是:在概念數據模型設計時遵守第三範式,降低範式標準的工作放到物理數據模型設計時考慮。降低範式就是增加字段,允許冗餘。


 INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關係的記錄。LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。

root@host# mysql -u root -p password;
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| runoob_author | runoob_count |
+-----------------+----------------+
| mahran          |             20 |
| mahnaz          |           NULL |
| Jen             |           NULL |
| Gill            |             20 |
| John Poul       |              1 |
| Sanjay          |              1 |
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from runoob_tbl;
+-------------+----------------+-----------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-24      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-24      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-06      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>
接下來我們就使用MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一樣)來連接以上兩張表來讀取runoob_tbl表中所有runoob_author字段在tcount_tbl表對應的runoob_count字段值:

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-----------+---------------+--------------+
| runoob_id | runoob_author | runoob_count |
+-----------+---------------+--------------+
|         1 | John Poul     |            1 |
|         3 | Sanjay        |            1 |
+-----------+---------------+--------------+
2 rows in set (0.00 sec)
等價於:
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| runoob_id | runoob_author | runoob_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           2 | Abdul S         |           NULL |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)
mysql> SELECT b.runoob_id, b.runoob_author, a.runoob_count FROM tcount_tbl a RIGHT JOIN runoob_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| runoob_id | runoob_author | runoob_count |
+-------------+-----------------+----------------+
|           1 | John Poul       |              1 |
|           2 | Abdul S         |           NULL |
|           3 | Sanjay          |              1 |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

http://www.runoob.com/mysql/mysql-join.html

 

DML 部分:

SELECT - 從數據庫表中獲取數據

UPDATE - 更新數據庫表中的數據

DELETE - 從數據庫表中刪除數據

INSERT INTO - 向數據庫表中插入數據

DDL 語句:

CREATE DATABASE - 創建新數據庫

ALTER DATABASE - 修改數據庫

CREATE TABLE - 創建新表

ALTER TABLE - 變更(改變)數據庫表

DROP TABLE - 刪除表

CREATE INDEX - 創建索引(搜索鍵)

DROP INDEX - 刪除索引


更新重點句子:

alter table add column price int(10)

alter table drop name;

drop table cq_user;

select distinct name from cq_itemtype;

select * from cq_user where namein('haha2','haha1;);

select * from cq_user wherename='haha1' or name='haha2';

select * from cq_itemtype where namelike '%石%';

select * from cq_itemtype where namelike '50朵_ _玫瑰';(注意是兩個_,因爲白、紅是漢字)

select * from cq_itemtype where id like'111_ _ _';(111開頭的6位數的id)

select * from cq_action where paramlike '!%data%' escape '!';

select count(*) from usertype;

select max(level) from cq_user;

select * from cq_itemtype group byname;

select * from cq_itemtype order bydesc/asc;

update cq_itemtype set name='白色',level=10 where id=10;

update cq_user set level=level+1;

delete from cq_action where id=1;

 

類型屬性:

◦ZEROFILL

–適用於所有數值類型數據數據列

–作用:如果數值的寬度小於定義的顯示寬度,則在數值前填充0

◦UNSIGNED

–作用:不允許數據列中出現負數,無符號型

◦AUTO_INCREMENT  自增長

◦NULL/NOT NULL

–作用:控制數據列的值是否爲空

 

主要的數據類型:

整數數據類型:int 4個字節

浮點數據類型:float4個字節,double8個字節

日期時間類型:date(0000-00-00),datetime(0000-00-0000:00:00)

字符串類型:char(n),varchar(n)

 

創建表:

CREATE TABLE<表名>

( <列名> <數據列類型><列屬性> [{<約束>}],

          <列名> <數據列類型><列屬性>[{<約束>}],

        ……

        )

create table cq_action(

        id int(4) not null primary key,

        name int(4))

create table cq_action(

        id int(4) not null,

        name int(4),

        primary key(id))

表的修改:

alter table <表名> add<列定義>|<列約束>

alter table cq_action add price int(4)

alter tabke cq_action alter priceint(10)

alter table cq_action drop name

刪除表“

drop table cq_name

 

SELECT命令的格式

select [all|distinct] 列名 [[as] 別名]

from 表名[[as]表別名]

[where <檢索條件>]

[group by <列名>[having<條件表達式>]]

[order by <列名>[asc|desc]]

[limit 行數]

select * from cq_action

select distinct name from cq_action(顯示錶cq_action中的name字段,去除重複)

select name as username from cq_action(查詢顯示的結果爲別名)

select a.id,b.name from cq_userasa,cq_subject as b where a.id=b.typeId

 

條件查詢:

=,>,<,>=,<=,!=,<>比較大小

and ,or,not多重條件

in確定集合

like/not like字符匹配

is null空值

between and(>= and <=)確定範圍

select * from user where money>0andlevel>100

select * from user where id between 1and 4

select * from itemType where name='彎刀' or name='菜刀'

MySql的like語句中的通配符:百分號、下劃線和escape

%代表任意多個字符

Sql代碼

select * from user where usernamelike'%huxiao';

select * from user where usernamelike'huxiao%';

select * from user where usernamelike'%huxiao%';

_代表一個字符

Sql代碼

select * from user where username like'_';

select * from user where usernamelike'huxia_';

select * from user where usernamelike'h_xiao';

如果我就真的要查%或者_,怎麼辦呢?使用escape,轉義字符後面的%或_就不作爲通配符了,注意前面沒有轉義字符的%和_仍然起通配符作用

Sql代碼

select username from gg_user whereusernamelike '%xiao/_%' escape '/';

select username from gg_user where usernamelike'%xiao/%%' escape '/';

 

select * from user limit 100;

常用庫函數:

count接列值計算個數,就是一共有幾行,不計算空值,但可以計算到0。

max,min,avg,sum

select count(*) from itemtype

select max(level) from user;

分組查詢:group by將查詢結果按屬性或屬性列組合在行的方向上進行分組

select * from itemtype group by name

 

order by id desc(降序) asc(升序)

 

數據查詢:當查詢的時候涉及到兩個以上的表就是連接查詢。兩種方式:1)表與表之間滿足一定條件的列和行進行連接,from子句指明進行連接的表名,where子句指明連接的列名及其連接條件;

2)用join進行連接,用join關鍵字的時候,from子句中應該有關鍵詞on與之對應(個人不是很習慣這種方式)

select * from cq_goods,cq_itemtype

where cq_goods.itemtype=cq_itemtype.id

 

數據更新:

插入數據:insert into <表名> [<列名1>,<列名2>…] values(<值>)

列名是可選的

列名的順序沒有要求,但是如果有指定列名的話values後面的值也要是相對應的

insert intocq_action(id,id_next,id_nextfail,type,data,param) values

 (500,0,505,503, 10000,'')

insert into cq_action values

 (500,0,505,503, 10000,'')

 

修改數據:

update <表名>

set <列名>=<表達式>[,<列名>=<表達式>…..]

[where<條件>]

update cq_user set level=lever+1

 

刪除數據:

delete from  <表名>

[where<條件>]

delete from cq_user where id=1000

delete from cq_user

 

 

 --------------分界線--------下面的東西初級的用得少

數值類型:

整型:

BIT[(M)]

 位字段類型。M表示每個值的位數,範圍爲從1到64。如果M被省略, 默認爲1

TINYINT[(M)] [UNSIGNED][ZEROFILL]

 很小的整數。

 SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

 小的整數。

MEDIUMINT[(M)] [UNSIGNED][ZEROFILL]

 中等大小的整數。

 INT[(M)] [UNSIGNED] [ZEROFILL]

 普通大小的整數。

BIGINT[(M)] [UNSIGNED][ZEROFILL]

 大整數。

浮點型:

FLOAT[(M,D)] [UNSIGNED][ZEROFILL]

 小(單精度)浮點數。如果M和D沒有寫,那麼單精度浮點數精確到大約7位小數位

DOUBLE[(M,D)] [UNSIGNED][ZEROFILL]

 普通大小(雙精度)浮點數。如果M和D沒有寫,那麼雙精度浮點數精確到大約15位小數位

日期和時間類型:

DATETIME類型

 需要同時包含日期和時間信息的值時使用,以‘YYYY-MM-DDHH:MM:SS’格式檢索和顯示DATETIME值,支持的範圍爲'1000-01-0100:00:00'到'9999-12-31 23:59:59‘

DATE類型

 只需要日期值而不需要時間部分,用'YYYY-MM-DD'格式檢索和顯示DATE值

TIMESTAMP[(M)]

 時間戳。範圍是'1970-01-0100:00:00'到2037年

TIME類型

 以'HH:MM:SS'格式顯示TIME值,但允許使用字符串或數字爲TIME列分配值。

YEAR[(2|4)]類型

 兩位或四位格式的年。默認是四位格式。在四位格式中,允許的值是1901到2155和0000。在兩位格式中,允許的值是70到69,表示從1970年到2069年。

 

字符類型:

—CHAR

◦是固定長度的,每個值佔用相同的字節,不夠的位數MySQL會在它的右邊用空格字符補足。

—VARCHAR

◦是一種可變長度的類型,每個值佔用其剛好的字節數再加上一個用來記錄其長度的字節即L+1字節。

—BINARY

◦二進制字符串

—varbinary

◦可變長度的二進制字符串

 


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