国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL 教程---菜鳥教程

這篇具有很好參考價值的文章主要介紹了MySQL 教程---菜鳥教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

MySQL 教程

關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)
RDBMS 術語:

  • 數(shù)據(jù)庫:數(shù)據(jù)庫是一些關聯(lián)表的集合。
  • 數(shù)據(jù)表:表是數(shù)據(jù)的矩陣。在一個數(shù)據(jù)庫中的表看起來像一個簡單的電子表格。
  • 列:一列包含了相同類型的數(shù)據(jù),例如郵政編碼的數(shù)據(jù)。
  • 行:一行是一組相關的數(shù)據(jù),例如一條用戶訂閱的數(shù)據(jù)。
  • 冗余:存儲兩倍數(shù)據(jù),冗余降低了性能,但提高了數(shù)據(jù)的安全性。
  • 主鍵:主鍵是唯一的。一個數(shù)據(jù)表中只能包含一個主鍵。你可以使用主鍵來查詢數(shù)據(jù)。
  • 外鍵:用于關聯(lián)兩個表。
  • 復合鍵:復合鍵將多個列作為一個索引鍵,一般用于復合索引。
  • 索引:使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對數(shù)據(jù)庫表中一列或多列的值進行排列的一種結構。類似于書籍的目錄。
  • 參照完整性:參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數(shù)據(jù)的一致性。

MySQL 為關系型數(shù)據(jù)庫(Relational Database Management System), 這種所謂的"關系型"可以理解為"表格"的概念, 一個關系型數(shù)據(jù)庫由一個或數(shù)個表格組成, 如圖所示的一個表格:
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

  • 表頭(header): 每一列的名稱;
  • 列(col): 具有相同數(shù)據(jù)類型的數(shù)據(jù)的集合;
  • 行(row): 每一行用來描述某條記錄的具體信息;
  • 值(value): 行的具體信息, 每個值必須與該列的數(shù)據(jù)類型相同;
  • 鍵(key): 鍵的值在當前列中具有唯一性。

登錄 MySQL

如果我們要登錄本機的 MySQL 數(shù)據(jù)庫,只需要輸入以下命令即可:

mysql -u root -p

按回車確認, 如果安裝正確且 MySQL 正在運行, 會得到以下響應:

Enter password:

若密碼存在, 輸入密碼登錄, 不存在則直接按回車登錄。登錄成功后你將會看到 Welcome to the MySQL monitor... 的提示語。

然后命令提示符會一直以 mysql> 加一個閃爍的光標等待命令的輸入, 輸入 exit 或 quit 退出登錄。

數(shù)據(jù)庫操作

創(chuàng)建數(shù)據(jù)庫:
CREATE DATABASE 數(shù)據(jù)庫名;
刪除數(shù)據(jù)庫:
drop database 數(shù)據(jù)庫名;
選擇數(shù)據(jù)庫:
use 數(shù)據(jù)庫名;

數(shù)據(jù)類型

MySQL 支持多種類型,大致可以分為三類:數(shù)值、日期/時間和字符串(字符)類型。

數(shù)值類型
MySQL 支持所有標準 SQL 數(shù)值數(shù)據(jù)類型。

這些類型包括嚴格數(shù)值數(shù)據(jù)類型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似數(shù)值數(shù)據(jù)類型(FLOAT、REAL 和 DOUBLE PRECISION)。

日期和時間類型
表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。

字符串類型
字符串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

創(chuàng)建數(shù)據(jù)表

以下為創(chuàng)建MySQL數(shù)據(jù)表的SQL通用語法:

CREATE TABLE table_name (column_name column_type);

以下例子中我們將在 RUNOOB 數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表runoob_tbl:

USE RUNOOB;
CREATE TABLE IF NOT EXISTS runoob_tbl(
   runoob_id INT UNSIGNED AUTO_INCREMENT,
   runoob_title VARCHAR(100) NOT NULL,
   runoob_author VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY (runoob_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

實例解析:

如果你不想字段為 NULL 可以設置字段的屬性為 NOT NULL, 在操作數(shù)據(jù)庫時如果輸入該字段的數(shù)據(jù)為NULL ,就會報錯。
AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數(shù)值會自動加1。
PRIMARY KEY關鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
ENGINE 設置存儲引擎,CHARSET 設置編碼。

刪除數(shù)據(jù)表

以下為刪除MySQL數(shù)據(jù)表的通用語法:

DROP TABLE table_name ;

USE RUNOOB;
DROP TABLE runoob_tbl;

插入數(shù)據(jù)

以下為向MySQL數(shù)據(jù)表插入數(shù)據(jù)通用的 INSERT INTO SQL語法:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

以下實例中我們將向 runoob_tbl 表插入三條數(shù)據(jù):

use RUNOOB;
INSERT INTO runoob_tbl 
(runoob_title, runoob_author, submission_date)
VALUES
("學習 PHP", "菜鳥教程", NOW()),
("學習 MySQL", "菜鳥教程", NOW()),
("JAVA 教程", "RUNOOB.COM", '2016-05-06');

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

查詢數(shù)據(jù)

以下實例將返回數(shù)據(jù)表 runoob_tbl 的所有記錄:

讀取數(shù)據(jù)表:

select * from runoob_tbl;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

WHERE 子句

SELECT * from runoob_tbl WHERE runoob_author='菜鳥教程';

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
MySQL 的 WHERE 子句的字符串比較是不區(qū)分大小寫的。 你可以使用 BINARY 關鍵字來設定 WHERE 子句的字符串比較是區(qū)分大小寫的。

SELECT * from runoob_tbl WHERE BINARY runoob_author='RUNOOB.COM';

實例中使用了 BINARY 關鍵字,是區(qū)分大小寫的,所以runoob_author='runoob.com'的查詢條件是沒有數(shù)據(jù)的。

UPDATE 更新

以下實例將更新數(shù)據(jù)表中 runoob_id 為 3 的 runoob_title 字段值:

UPDATE runoob_tbl SET runoob_title='學習 C++' WHERE runoob_id=3;
SELECT * from runoob_tbl WHERE runoob_id=3;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

DELETE 子句

以下實例將刪除 runoob_tbl 表中 runoob_id 為3 的記錄:

DELETE FROM runoob_tbl WHERE runoob_id=3;

LIKE 子句

以下我們將在 SQL SELECT 命令中使用 WHERE…LIKE 子句來從MySQL數(shù)據(jù)表 runoob_tbl 中讀取數(shù)據(jù)。

實例
以下是我們將 runoob_tbl 表中獲取 runoob_author 字段中以 COM 為結尾的的所有記錄:

SELECT * from runoob_tbl  WHERE runoob_author LIKE '%COM';

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

UNION 操作符

描述
MySQL UNION 操作符用于連接兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重復的數(shù)據(jù)。

前提:創(chuàng)建表websites,寫入數(shù)據(jù)

USE runoob;
CREATE TABLE IF NOT EXISTS Websites(
   id INT UNSIGNED AUTO_INCREMENT,
   name VARCHAR(100) NOT NULL,
   url VARCHAR(200) NOT NULL,
   alexa INT,
	 country VARCHAR(40),
   PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
---寫數(shù)據(jù)
INSERT INTO websites
(name, url, alexa, country)
VALUES
("Google", "https://www.google.cm/", 1, "USA"),
("淘寶", "https://www.taobao.com/", 13, "CN"),
("菜鳥教程","http://www.runoob.com",4689, "CN"),
("微博","http://weibo.com/", 20, "CN"),
("Facebook","https://www.facebook.com/",3,"USA"),
("stackoverflow","http://stackoverflow.com/",0,"IND");

創(chuàng)建表apps,寫入數(shù)據(jù):

USE runoob;
CREATE TABLE IF NOT EXISTS apps(
   id INT UNSIGNED AUTO_INCREMENT,
   app_name VARCHAR(100) NOT NULL,
   url VARCHAR(200) NOT NULL,
	 country VARCHAR(40),
   PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO apps
(app_name, url, country)
VALUES
("QQ APP","http://im.qq.com/","CN"),
("微博 APP","http://weibo.com/","CN"),
("淘寶 APP","https://www.taobao.com/","CN");

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
SQL UNION 實例

下面的 SQL 語句從 “Websites” 和 “apps” 表中選取所有不同的country(只有不同的值):

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
SQL UNION ALL 實例

下面的 SQL 語句使用 UNION ALL 從 “Websites” 和 “apps” 表中選取所有的country(也有重復的值):

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
帶有 WHERE 的 SQL UNION ALL

下面的 SQL 語句使用 UNION ALL 從 “Websites” 和 “apps” 表中選取所有的中國(CN)的數(shù)據(jù)(也有重復的值):

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

排序

嘗試以下實例,結果將按升序及降序排列。

SELECT * from runoob_tbl ORDER BY submission_date ASC;
SELECT * from runoob_tbl ORDER BY submission_date DESC;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

分組 GROUP BY 語句

GROUP BY 語句根據(jù)一個或多個列對結果集進行分組。

在分組的列上我們可以使用 COUNT, SUM, AVG,等函數(shù)。

已知表
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
接下來我們使用 GROUP BY 語句 將數(shù)據(jù)表按名字進行分組,并統(tǒng)計每個人有多少條記錄:

SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
使用 WITH ROLLUP
WITH ROLLUP 可以實現(xiàn)在分組統(tǒng)計數(shù)據(jù)基礎上再進行相同的統(tǒng)計(SUM,AVG,COUNT…)。

例如我們將以上的數(shù)據(jù)表按名字進行分組,再統(tǒng)計每個人登錄的次數(shù):

SELECT name, SUM(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
其中記錄 NULL 表示所有人的登錄次數(shù)。

我們可以使用 coalesce 來設置一個可以取代 NUll 的名稱,coalesce 語法:select coalesce(a,b,c);

參數(shù)說明:如果a==null,則選擇b;如果b==null,則選擇c;如果a!=null,則選擇a;如果a b c 都為null ,則返回為null(沒意義)。

以下實例中如果名字為空我們使用總數(shù)代替:

SELECT coalesce(name, '總數(shù)'), SUM(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

連接的使用

本章節(jié)我們將向大家介紹如何使用 MySQL 的 JOIN 在兩個或多個表中查詢數(shù)據(jù)。

你可以在 SELECT, UPDATE 和 DELETE 語句中使用 Mysql 的 JOIN 來聯(lián)合多表查詢。

JOIN 按照功能大致分為如下三類:

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

INNER JOIN:

已知兩個表
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
接下來我們就使用 MySQL 的 INNER JOIN 來連接以上兩張表來讀取 runoob_tbl 表中所有 runoob_author 字段在 tcount_tbl 表對應的 runoob_count 字段值:

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;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫


LEFT JOIN

LEFT JOIN 會讀取左邊數(shù)據(jù)表的全部數(shù)據(jù),即使右邊表無對應數(shù)據(jù)。

嘗試以下實例,以 runoob_tbl 為左表,tcount_tbl 為右表,理解 MySQL LEFT JOIN 的應用:

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;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫


RIGHT JOIN

MySQL RIGHT JOIN 會讀取右邊數(shù)據(jù)表的全部數(shù)據(jù),即使左邊邊表無對應數(shù)據(jù)。

嘗試以下實例,以 runoob_tbl 為左表,tcount_tbl 為右表,理解MySQL RIGHT JOIN的應用:

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

NULL 值處理

MySQL提供了三大運算符:

  • IS NULL: 當列的值是 NULL,此運算符返回 true。
  • IS NOT NULL: 當列的值不為 NULL, 運算符返回 true。
  • <=>: 比較操作符(不同于 = 運算符),當比較的的兩個值相等或者都為 NULL 時返回 true。

以下實例中假設數(shù)據(jù)庫 RUNOOB 中的表 runoob_test_tbl 含有兩列 runoob_author 和 runoob_count, runoob_count 中設置插入NULL值。

create table runoob_test_tbl
(
runoob_author varchar(40) NOT NULL,
runoob_count  INT
);

INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values ('RUNOOB', 20);
INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values ('菜鳥教程', NULL);
INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values ('Google', NULL);
INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values ('FK', 20);

SELECT * from runoob_test_tbl;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
查找數(shù)據(jù)表中 runoob_test_tbl 列是否為 NULL,必須使用 IS NULL 和 IS NOT NULL,如下實例:

SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;
SELECT * from runoob_test_tbl WHERE runoob_count IS NOT NULL;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

事務

MySQL 事務主要用于處理操作量大,復雜度高的數(shù)據(jù)。比如說,在人員管理系統(tǒng)中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫操作語句就構成一個事務!

一般來說,事務是必須滿足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。

  • 原子性:一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環(huán)節(jié)。事務在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務開始前的狀態(tài),就像這個事務從來沒有執(zhí)行過一樣。

  • 一致性:在事務開始之前和事務結束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預定的工作。

  • 隔離性:數(shù)據(jù)庫允許多個并發(fā)事務同時對其數(shù)據(jù)進行讀寫和修改的能力,隔離性可以防止多個事務并發(fā)執(zhí)行時由于交叉執(zhí)行而導致數(shù)據(jù)的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。

  • 持久性:事務處理結束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。

事務控制語句:

  • BEGIN 或 START TRANSACTION 顯式地開啟一個事務;

  • COMMIT 會提交事務,并使已對數(shù)據(jù)庫進行的所有修改成為永久性的;

  • ROLLBACK 回滾會結束用戶的事務,并撤銷正在進行的所有未提交的修改;

  • SAVEPOINT identifier,SAVEPOINT 允許在事務中創(chuàng)建一個保存點,一個事務中可以有多個 SAVEPOINT;

  • RELEASE SAVEPOINT identifier 刪除一個事務的保存點,當沒有指定的保存點時,執(zhí)行該語句會拋出一個異常;

  • ROLLBACK TO identifier 把事務回滾到標記點;

  • SET TRANSACTION 用來設置事務的隔離級別。InnoDB 存儲引擎提供事務的隔離級別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

MYSQL 事務處理主要有兩種方法:
1、用 BEGIN, ROLLBACK, COMMIT來實現(xiàn)

  • BEGIN 開始一個事務
  • ROLLBACK 事務回滾
  • COMMIT 事務確認

2、直接用 SET 來改變 MySQL 的自動提交模式:

  • SET AUTOCOMMIT=0 禁止自動提交
  • SET AUTOCOMMIT=1 開啟自動提交

事務測試:

CREATE TABLE runoob_transaction_test( id int(5));  # 創(chuàng)建數(shù)據(jù)表
select * from runoob_transaction_test;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

begin;  # 開始事務
insert into runoob_transaction_test value(5);
insert into runoob_transaction_test value(6);
commit; # 提交事務
select * from runoob_transaction_test;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

begin;    # 開始事務
insert into runoob_transaction_test values(7);
rollback;   # 回滾
select * from runoob_transaction_test;   # 因為回滾所以數(shù)據(jù)沒有插入

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

ALTER 命令

當我們需要修改數(shù)據(jù)表名或者修改數(shù)據(jù)表字段時,就需要使用到MySQL ALTER命令。

開始本章教程前讓我們先創(chuàng)建一張表,表名為:testalter_tbl。

use RUNOOB;
create table testalter_tbl
(
i INT,
c CHAR(1)
);
SHOW COLUMNS FROM testalter_tbl;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

刪除、添加或修改表字段

如下命令使用了 ALTER 命令及 DROP 子句來刪除以上創(chuàng)建表的 i 字段:

ALTER TABLE testalter_tbl  DROP i;

如果數(shù)據(jù)表中只剩余一個字段則無法使用DROP來刪除字段。

MySQL 中使用 ADD 子句來向數(shù)據(jù)表中添加列,如下實例在表 testalter_tbl 中添加 i 字段,并定義數(shù)據(jù)類型:

ALTER TABLE testalter_tbl ADD i INT;

執(zhí)行以上命令后,i 字段會自動添加到數(shù)據(jù)表字段的末尾。

SHOW COLUMNS FROM testalter_tbl;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
如果你需要指定新增字段的位置,可以使用MySQL提供的關鍵字 FIRST (設定位第一列), AFTER 字段名(設定位于某個字段之后)。

嘗試以下 ALTER TABLE 語句, 在執(zhí)行成功后,使用 SHOW COLUMNS 查看表結構的變化:

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
FIRST 和 AFTER 關鍵字可用于 ADD 與 MODIFY 子句,所以如果你想重置數(shù)據(jù)表字段的位置就需要先使用 DROP 刪除字段然后使用 ADD 來添加字段并設置位置。

修改字段類型及名稱

如果需要修改字段類型及名稱, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

例如,把字段 c 的類型從 CHAR(1) 改為 CHAR(10),可以執(zhí)行以下命令:

ALTER TABLE testalter_tbl MODIFY c CHAR(10);

使用 CHANGE 子句, 語法有很大的不同。 在 CHANGE 關鍵字之后,緊跟著的是你要修改的字段名,然后指定新字段名及類型。嘗試如下實例:

ALTER TABLE testalter_tbl CHANGE i j BIGINT;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

ALTER TABLE testalter_tbl CHANGE j j INT;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

ALTER TABLE 對 Null 值和默認值的影響

當你修改字段時,你可以指定是否包含值或者是否設置默認值。

以下實例,指定字段 j 為 NOT NULL 且默認值為100 。

ALTER TABLE testalter_tbl 
MODIFY j BIGINT NOT NULL DEFAULT 100;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

如果你不設置默認值,MySQL會自動設置該字段默認為 NULL。

ALTER TABLE testalter_tbl 
MODIFY j BIGINT NULL;
SHOW COLUMNS FROM testalter_tbl;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

修改字段默認值

你可以使用 ALTER 來修改字段的默認值,嘗試以下實例:

ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
你也可以使用 ALTER 命令及 DROP子句來刪除字段的默認值,如下實例:

ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

修改表名

果需要修改數(shù)據(jù)表的名稱,可以在 ALTER TABLE 語句中使用 RENAME 子句來實現(xiàn)。

嘗試以下實例將數(shù)據(jù)表 testalter_tbl 重命名為 alter_tbl:

ALTER TABLE testalter_tbl RENAME TO alter_tbl;

ALTER 命令還可以用來創(chuàng)建及刪除MySQL數(shù)據(jù)表的索引,該功能我們會在接下來的章節(jié)中介紹。

索引

MySQL索引的建立對于MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度。

索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。

創(chuàng)建索引時,你需要確保該索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。

上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件。

普通索引

創(chuàng)建索引
CREATE INDEX indexName ON table_name (column_name)

添加索引
ALTER table tableName ADD INDEX indexName(columnName)

創(chuàng)建表的時候直接指定
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
);  

刪除索引的語法
DROP INDEX [indexName] ON mytable; 

使用 ALTER 命令添加和刪除索引

以下實例為在表中添加索引。

ALTER TABLE testalter_tbl ADD INDEX (c);

以下實例刪除索引:

ALTER TABLE testalter_tbl DROP INDEX c;

使用 ALTER 命令添加和刪除主鍵

主鍵作用于列上(可以一個列或多個列聯(lián)合主鍵),添加主鍵索引時,你需要確保該主鍵默認不為空(NOT NULL)。實例如下:

ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
你也可以使用 ALTER 命令刪除主鍵:

ALTER TABLE testalter_tbl DROP PRIMARY KEY;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
顯示索引信息:

SHOW INDEX FROM table_name;

臨時表

MySQL 臨時表在我們需要保存一些臨時數(shù)據(jù)時是非常有用的。臨時表只在當前連接可見,當關閉連接時,Mysql會自動刪除表并釋放所有空間。

創(chuàng)建臨時表:

CREATE TEMPORARY TABLE SalesSummary (
product_name VARCHAR(50) NOT NULL, 
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, 
avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, 
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);

INSERT INTO SalesSummary
(product_name, total_sales, avg_unit_price, total_units_sold)
VALUES
('cucumber', 100.25, 90, 2);

SELECT * FROM SalesSummary;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
刪除臨時表

DROP TABLE SalesSummary;
SELECT * FROM SalesSummary;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

復制表

嘗試以下實例來復制表 runoob_tbl 。

步驟一:

獲取數(shù)據(jù)表的完整結構。

SHOW CREATE TABLE runoob_tbl;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
步驟二:

修改SQL語句的數(shù)據(jù)表名,并執(zhí)行SQL語句。

CREATE TABLE `clone_tbl` (
  `runoob_id` int NOT NULL AUTO_INCREMENT,
  `runoob_title` varchar(100) NOT NULL,
  `runoob_author` varchar(40) NOT NULL,
  `submission_date` date DEFAULT NULL,
  PRIMARY KEY (`runoob_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
步驟三:

如果你想拷貝數(shù)據(jù)表的數(shù)據(jù)你可以使用 INSERT INTO… SELECT 語句來實現(xiàn)。

INSERT INTO clone_tbl (runoob_id, runoob_title, runoob_author, submission_date)
SELECT runoob_id,runoob_title, runoob_author, submission_date
FROM runoob_tbl;

SELECT * FROM clone_tbl;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫

序列使用

MySQL 序列是一組整數(shù):1, 2, 3, …,由于一張數(shù)據(jù)表只能有一個字段自增主鍵, 如果你想實現(xiàn)其他字段也實現(xiàn)自動增加,就可以使用MySQL序列來實現(xiàn)。

使用 AUTO_INCREMENT

以下實例中創(chuàng)建了數(shù)據(jù)表 insect, insect 表中 id 無需指定值可實現(xiàn)自動增長。

CREATE TABLE insect
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
name VARCHAR(30) NOT NULL, # type of insect
date DATE NOT NULL, # date collected
origin VARCHAR(30) NOT NULL # where collected
);

INSERT INTO insect (id,name,date,origin) VALUES
(NULL,'housefly','2001-09-10','kitchen'),
(NULL,'millipede','2001-09-10','driveway'),
(NULL,'grasshopper','2001-09-10','front yard');
		
SELECT * FROM insect ORDER BY id;

mysql菜鳥教程,菜鳥教程,mysql,數(shù)據(jù)庫
重置序列

如果你刪除了數(shù)據(jù)表中的多條記錄,并希望對剩下數(shù)據(jù)的AUTO_INCREMENT列進行重新排列,那么你可以通過刪除自增的列,然后重新添加來實現(xiàn)。

ALTER TABLE insect DROP id;

ALTER TABLE insect
ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (id);

設置序列的開始值

 CREATE TABLE insect
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
name VARCHAR(30) NOT NULL, 
date DATE NOT NULL,
origin VARCHAR(30) NOT NULL
)engine=innodb auto_increment=100 charset=utf8;

或者你也可以在表創(chuàng)建成功后,通過以下語句來實現(xiàn):

ALTER TABLE t AUTO_INCREMENT = 100;

處理重復數(shù)據(jù)

本章節(jié)我們將為大家介紹如何防止數(shù)據(jù)表出現(xiàn)重復數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復數(shù)據(jù)。

防止表中出現(xiàn)重復數(shù)據(jù)

如果你想設置表中字段 first_name,last_name 數(shù)據(jù)不能重復,你可以設置雙主鍵模式來設置數(shù)據(jù)的唯一性, 如果你設置了雙主鍵,那么那個鍵的默認值不能為 NULL,可設置為 NOT NULL。如下所示:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

INSERT IGNORE INTO 會忽略數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù),如果數(shù)據(jù)庫沒有數(shù)據(jù),就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過這條數(shù)據(jù)。

以下實例使用了 INSERT IGNORE INTO,執(zhí)行后不會出錯,也不會向數(shù)據(jù)表中插入重復數(shù)據(jù):

INSERT IGNORE INTO person_tbl (last_name, first_name)
VALUES( 'Jay', 'Thomas');

INSERT IGNORE INTO person_tbl (last_name, first_name)
VALUES( 'Jay', 'Thomas');

統(tǒng)計重復數(shù)據(jù)

以下我們將統(tǒng)計表中 first_name 和 last_name的重復記錄數(shù):

SELECT COUNT(*) as repetitions, last_name, first_name
FROM person_tbl
GROUP BY last_name, first_name
HAVING repetitions > 1;

過濾重復數(shù)據(jù)

在 SELECT 語句中使用 DISTINCT 關鍵字來過濾重復數(shù)據(jù)。

SELECT DISTINCT last_name, first_name
FROM person_tbl;

你也可以使用 GROUP BY 來讀取數(shù)據(jù)表中不重復的數(shù)據(jù):

SELECT last_name, first_name
FROM person_tbl
GROUP BY (last_name, first_name);

刪除重復數(shù)據(jù)

CREATE TABLE tmp 
SELECT last_name, first_name, sex 
FROM person_tbl  
GROUP BY (last_name, first_name, sex);

當然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復記錄。方法如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-851167.html

ALTER IGNORE TABLE person_tbl
ADD PRIMARY KEY (last_name, first_name);

到了這里,關于MySQL 教程---菜鳥教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包