#創建資料庫 CREATE DATABASE database_name; create database mysql_test; #刪除資料庫 DROP DATABASE database_name; > drop database mysql_test; #數據類型 完整數據類型請參考MySQL ...
創建資料庫
CREATE DATABASE database_name;
create database mysql_test;
刪除資料庫
DROP DATABASE database_name;
> drop database mysql_test;
數據類型
完整數據類型請參考MySQL 數據類型。
MySQL支持所有標準SQL數值數據類型,所以數據類型有很多,這裡介紹幾個常用的
數值類型
類型 | 大小 | 範圍(有符號) | 範圍(無符號) | 用途 |
---|---|---|---|---|
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 單精度浮點數值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 雙精度浮點數值 |
DECIMAL | 對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 | 依賴於M和D的值 | 依賴於M和D的值 | 小數值 |
日期類型
類型 | 大小( bytes) | 範圍 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
字元串類型
類型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定長字元串 |
VARCHAR | 0-65535 bytes | 變長字元串 |
TEXT | 0-65 535 bytes | 長文本數據 |
總體來說整數用int,小數根據精度選擇float,double和decimal,日期用date,字元串用varchar。
然後再說一下字元串類型的區別, CHAR 和 VARCHAR 類型類似,但它們保存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在存儲或檢索過程中不進行大小寫轉換。所以經常變化的欄位用 varchar, 知道固定長度的用 char。儘量用 varchar,超過 255 字元的只能用 varchar 或者 text,能用 varchar 的地方儘量不用 text。
創建數據表
CREATE TABLE table_name (column_name column_type);
UNSIGNED 無符號,即非負
AUTO_INCREMENT 自增
NOT NULL 非空
PRIMARY KEY 主鍵
CREATE table student(
id int PRIMARY KEY auto_increment,
name VARCHAR(20) not null,
address VARCHAR(20) not null)
;
刪除數據表
DROP TABLE table_name ;
插入數據
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
INSERT into student (name,address) VALUES ('張三','北京');
查詢數據
SELECT column_name,column_name FROM table_name [WHERE Clause]
SELECT id,name,address FROM student;
UPDATE更新
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
UPDATE student set address = '長沙' WHERE `name` = '李四';
DELETE語句
DELETE FROM table_name [WHERE Clause]
如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。
WHERE子句
我們知道從 MySQL 表中使用 SQL SELECT 語句來讀取數據。如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句中。
SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2.....
查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,並使用WHERE語句來設定查詢條件。
- 你可以在 WHERE 子句中指定任何條件。
- 你可以使用 AND 或者 OR 指定一個或多個條件。
- WHERE 子句也可以運用於 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句類似於程式語言中的 if 條件,根據 MySQL 表中的欄位值來讀取指定的數據。
LIKE子句
SQL LIKE 子句中使用百分號 %字元來表示任意字元,如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的。
SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
你可以在 WHERE 子句中指定任何條件。
你可以在 WHERE 子句中使用LIKE子句。
你可以使用LIKE子句代替等號 =。
LIKE 通常與 % 一同使用,類似於一個元字元的搜索。
你可以使用 AND 或者 OR 指定一個或多個條件。
你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句來指定條件。
SELECT id,name,address FROM student WHERE address LIKE '%京';
UNION
UNION 操作符用於連接兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重覆的數據。
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
expression1, expression2, ... expression_n: 要檢索的列。
tables: 要檢索的數據表。
WHERE conditions: 可選, 檢索條件。
DISTINCT: 可選,刪除結果集中重覆的數據。預設情況下 UNION 操作符已經刪除了重覆數據,所以 DISTINCT 修飾符對結果沒啥影響。
ALL: 可選,返回所有結果集,包含重覆數據。
CREATE table teacher(
id int PRIMARY key auto_increment,
name VARCHAR(20) not null,
address VARCHAR(20) not null);
創建老師表並插入數據
SELECT address FROM student UNION SELECT address FROM teacher;
排序
如果我們需要對讀取的數據進行排序,我們就可以使用 MySQL 的 ORDER BY 子句來設定你想按哪個欄位哪種方式來進行排序,再返回搜索結果。
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][預設 ASC]], [field2...] [ASC [DESC][預設 ASC]]
你可以使用任何欄位來作為排序的條件,從而返回排序後的查詢結果。
你可以設定多個欄位來排序。
你可以使用 ASC 或 DESC 關鍵字來設置查詢結果是按升序或降序排列。 預設情況下,它是按升序排列。
你可以添加 WHERE...LIKE 子句來設置條件。
SELECT * FROM student ORDER BY address;
分組
GROUP BY 語句根據一個或多個列對結果集進行分組。在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
插入更多數據,並統計各個地址的人數
SELECT address,COUNT(address) as '人數' FROM student GROUP BY address;
連接的使用
你可以在 SELECT, UPDATE 和 DELETE 語句中使用 Mysql 的 JOIN 來聯合多表查詢。
JOIN 按照功能大致分為如下三類:
INNER JOIN(內連接,或等值連接):獲取兩個表中欄位匹配關係的記錄。
LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
內連接
新建一個分數表,鏈接兩個表列印成績和住址
SELECT student.id,student.`name`,student.address,score.score FROM student JOIN score on student.id = score.id;
左連接
SELECT student.id,student.`name`,student.address,score.score FROM student left JOIN score on student.id = score.id;
右連接
SELECT student.id,student.`name`,student.address,score.score FROM student RIGHT JOIN score on student.id = score.id;
ALTER命令
刪除,添加或修改表欄位
如下命令使用了 ALTER 命令及 DROP 子句來刪除以上創建表的 i 欄位:
ALTER TABLE testalter_tbl DROP i;
如果數據表中只剩餘一個欄位則無法使用DROP來刪除欄位。
MySQL 中使用 ADD 子句來向數據表中添加列,如下實例在表 testalter_tbl 中添加 i 欄位,並定義數據類型:
ALTER TABLE testalter_tbl ADD i INT;
執行以上命令後,i 欄位會自動添加到數據表欄位的末尾。
如果你需要指定新增欄位的位置,可以使用MySQL提供的關鍵字 FIRST (設定位第一列), AFTER 欄位名(設定位於某個欄位之後)。
修改欄位類型及名稱
如果需要修改欄位類型及名稱, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
例如,把欄位 c 的類型從 CHAR(1) 改為 CHAR(10),可以執行以下命令:
ALTER TABLE testalter_tbl MODIFY c CHAR(10);
使用 CHANGE 子句, 語法有很大的不同。 在 CHANGE 關鍵字之後,緊跟著的是你要修改的欄位名,然後指定新欄位名及類型。嘗試如下實例:
ALTER TABLE testalter_tbl CHANGE i j BIGINT;
ALTER TABLE testalter_tbl CHANGE j j INT;
ALTER TABLE 對 Null 值和預設值的影響
當你修改欄位時,你可以指定是否包含值或者是否設置預設值。
以下實例,指定欄位 j 為 NOT NULL 且預設值為100 。
ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;
如果你不設置預設值,MySQL會自動設置該欄位預設為 NULL。
修改表名
如果需要修改數據表的名稱,可以在 ALTER TABLE 語句中使用 RENAME 子句來實現。
嘗試以下實例將數據表 testalter_tbl 重命名為 alter_tbl:
ALTER TABLE testalter_tbl RENAME TO alter_tbl;
MySQL函數
完整MySQL函數請參考MySQL函數