Mysql使用終端操作資料庫
阿新 • • 發佈:2020-04-23
使用終端操作資料庫
1.如何檢視有什麼資料庫?
show databases;
2.如何選擇資料庫? use databasesName;
3.如何檢視該資料庫中有哪些表? show tables;
4.如何查詢表中的資料? select * from tableName;
5.如何退出資料庫伺服器? exit;
6.如何在資料庫伺服器中建立自己的資料庫? create database databaseName;
7.如何建立一個數據表? 建立一個pet表 create TABLE pet( name VARCHAR(20), owner VARCHAR(20), specise VARCHAR(20), sex CHAR(1), brith DATAE, death DATE ); 注意事項: 1:var()與varchar()的區別在於var()是定常的,哪怕儲存的字串沒有達到"()"中數字的上限,var()依然會佔用空格來填充空間.而varchar()則是不定長的,沒有達到"()"中的上限則會自動去掉後面的空格; 2:性別不要用:sex 要用:gender 一個是性 一個是性別; 3:定義最後一個欄位的時候不要加","; 4:上面的"VAR","VARCHAR","DATE"可以用小寫.不過最好用大寫來表示區分關鍵字,若不然也許寫到後面你自己都不知道這個詞是資料庫中的關鍵字還是你自己自定義的一些資料,同時一定要用英文的標點符號也必須半形輸入
8.如何檢視資料表的架構? describe tableName; 說明: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ Field : 欄位的名稱 Type : 欄位的型別,可以有int var varchar Key : 是否是關鍵字 如可以定義為: primary key 或者 unique key ... Default: : 若是該欄位沒有主動設定值的時候,該欄位的預設值是什麼?
9.如何插入資料? INSERT INTO pet VALUES('kk','cc','dog','1','1998-8-2',null); +------+-------+---------+------+------------+-------+ | name | owner | specise | sex | brith | death | +------+-------+---------+------+------------+-------+ | kk | cc | dog | 1 | 1998-08-02 | NULL| +------+-------+---------+------+------------+-------+ 注意: NULL:代表的是空,表示該欄位還沒有資料.千萬不要主動填寫'NULL',這代表你的欄位有一個值叫做'null'. 其實還有一種寫法: INSERT INTO pet(name,owner) VALUES ('xx','cc'); 代表我只在name和owner欄位上面插入的一條,其他皆為NULL/預設值的資料
10.mysql 常用資料型別 注意:金錢最好用int/bigint(整數,單位用分,拿出來進行*100換成元),千萬不要直接用浮點,會有精度損失.
11.如何刪除資料 先插入資料: INSERT INTO pet VALUES('kk1','cc1','dog1','1','1998-1-2',null); INSERT INTO pet VALUES('kk2','cc2','dog2','2','1998-2-2',null); INSERT INTO pet VALUES('kk3','cc3','dog3','1','1998-3-2','1998-12-2'); INSERT INTO pet VALUES('kk4','cc4','dog4','2','1998-4-2',null); 刪除語句: DELETE FROM tablesName WHRER 條件; 修改資料: UPDATE tableName SET 欄位1=值1,欄位2=值2 ... WHERE 條件;
總結:1.table的操作 2.表操作的總結
12.mysql建表中的約束 1.主鍵約束: 它能夠唯一確定一張表中的一條記錄,增加主鍵約束之後,就可以使得欄位不重複而且不為空 create table user( id int PRIMARY KEY, name VARCHAR(20) ); INSERT INTO user VALUES (1,'張三'); +----+------+ | id | name | +----+------+ | 1 | 張三 | +----+------+ 執行DESCRIBE user; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 發現 id是不可以為null 而且 key的值 也變為:PRI(primary) 2.複合主鍵: CREATE TABLE user2( id INT, name VARCHAR(20), password VARCHAR(20), PRIMARY key(id,name) ); 執行DESCRIBE user2; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | NO | PRI | NULL | | | password | varchar(20) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ INSERT INTO user2 VALUES (1,'老王','123456'); INSERT INTO user2 VALUES (2,'老王','123456'); +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | 老王 | 123456 | | 2 | 老王 | 123456 | +----+------+----------+ 說明了複合主鍵只要所有的欄位都不是相同的情況下可以允許其中的欄位重複: INSERT INTO user2 VALUES (1,'老李','123456'); SELECT * FROM user2; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | 老李 | 123456 | | 1 | 老王 | 123456 | | 2 | 老王 | 123456 | +----+------+----------+ 場景:表中有班級號以及學生座位號,我們可以用班級號+學生的座位號可以準確的定位一個學生,如:(1班5號可以準確的確定一個學生) 3.自增約束: CREATE TABLE user3( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) ); 執行DESCRIBE user3; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ INSERT INTO user3(name) VALUES('張三'); INSERT INTO user3(name) VALUES('李四'); +----+------+ | id | name | +----+------+ | 1 | 張三 | | 2 | 李四 | +----+------+ 沒有自定義id值 但是自動生成了id 4.唯一約束: CREATE TABLE user5( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) ); 執行 DESCRIBE user5; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 新增name為唯一約束: ALTER TABLE user5 ADD UNIQUE(name); 執行 DESCRIBE user5; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | UNI | NULL | | +-------+-------------+------+-----+---------+----------------+ 測試:插入資料 INSERT INTO user5(name) VALUES ('cc'); 執行 SELECT * FROM user5; 檢視結果: +----+------+ | id | name | +----+------+ | 1 | cc | +----+------+ 再次插入INSERT INTO user5(name) VALUES ('cc'); 出現:ERROR 1062 (23000): Duplicate entry 'cc' for key 'name' 換個試試 INSERT INTO user5(name) VALUES ('aa'); 執行 SELECT * FROM user5; 檢視結果: +----+------+ | id | name | +----+------+ | 3 | aa | | 1 | cc | +----+------+ 總結一下: 主鍵約束(primary key)中包含了唯一約束 場景:業務需求:設計一張使用者登錄檔,使用者姓名必須要用手機號來註冊,而且手機號和使用者名稱稱都不能為空,那麼: CREATE TABLE user_test( id INT PRIMARY KEY AUTO_INCREMENT COMMENT'主鍵id', name VARCHAR(20) NOT NULL COMMENT'使用者姓名,不能為空', phone_number VARCHAR(20) UNIQUE NOT NULL COMMENT'使用者手機,不能重複且不能為空' ); 執行 DESCRIBE user_test; +--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | phone_number | int(11) | NO | UNI | NULL | | +--------------+-------------+------+-----+---------+----------------+ 這樣的話就達到了每一個手機號都只能出現一次,達到了每個手機號只能被註冊一次. 使用者姓名可以重複,但是手機號碼卻不能重複,複合正常的邏輯需求 5.非空約束: 在上面的藍字中已經添加了非空約束: NOT NULL; name和phone_number都設定了非空,先只設置name引數不設定phone_number引數試一試 INSERT INTO user_test (name) VALUES ('張三'); 會出現Field 'phone_number' doesn't have a default value 兩個非空引數一起設定: INSERT INTO user_test (name,phone_number) VALUES ('張三','12345678901'); +----+------+--------------+ | id | name | phone_number | +----+------+--------------+ | 1 | 張三 | 12345678901 | +----+------+--------------+ 6.預設約束 CREATE TABLE user6( id int PRIMARY KEY AUTO_INCREMENT COMMENT'主鍵id', name VARCHAR(20) NOT NULL COMMENT'使用者姓名不能為空', phone_number VARCHAR(20) NOT NULL COMMENT'使用者手機號,不能為空', status INT DEFAULT 0 COMMENT'使用者狀態0:啟用 1:禁封 預設:0' ); 執行DESCRIBE user6; +--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | phone_number | varchar(20) | NO | | NULL | | | status | int(11) | YES | | 0 | | +--------------+-------------+------+-----+---------+----------------+ 插入資料: INSERT INTO user6(name,phone_number) VALUES ('aa','123'); INSERT INTO user6(name,phone_number) VALUES('bb','1234'); INSERT INTO user6(name,phone_number) VALUES('cc','1263456'); 檢視資料:SELECT * FROM user6; +----+------+--------------+--------+ | id | name | phone_number | status | +----+------+--------------+--------+ | 1 | aa | 123 | 0 | | 2 | bb | 1234 | 0 | | 3 | cc | 1263456 | 0 | +----+------+--------------+--------+ 我們沒有設定status的值,但是給我們建立了預設值 0. 應用場景: 業務需求:找正常的使用者,對這些正常使用者進行發放優惠卷或者積分之類的東西,而被禁封的使用者我們不讓其參加多動. 我們想要封使用者只要將status的值從0改為1就行了,當然我們取使用者的時候必須要先判斷status是否是0.若是1.說明該使用者已經被禁封. 先封手機號為'1234'的使用者: UPDATE user6 SET status = 1 WHERE phone_number= '1234'; SELECT * FROM user6; +----+------+--------------+--------+ | id | name | phone_number | status | +----+------+--------------+--------+ | 1 | aa | 123 | 0 | | 2 | bb | 1234 | 1 | | 3 | cc | 1263456 | 0 | +----+------+--------------+--------+ status為1,說明使用者已經被封,該使用者不可以參加活動 我們取使用者的時候加上status的判斷,如: SELECT * FROM user6 WHERE status = 0; +----+------+--------------+--------+ | id | name | phone_number | status | +----+------+--------------+--------+ | 1 | aa | 123 | 0 | | 3 | cc | 1263456 | 0 | +----+------+--------------+--------+ 7.外來鍵約束 CREATE TABLE classes( id INT PRIMARY KEY AUTO_INCREMENT COMMENT'班級表id', name VARCHAR(20) COMMENT'班級名稱' ); 執行DESCRIBE classes; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT'學生表id', name VARCHAR(20) COMMENT'學生姓名', class_id int COMMENT'教室id,這張表中的class_id是classes表中id的值', FOREIGN KEY (class_id) REFERENCES classes(id) ); //FOREIGN :外來 REFERENCES:應用,參考 執行DESCRIBE student; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | | class_id | int(11) | YES | MUL | NULL | | +----------+-------------+------+-----+---------+----------------+ 班級插入資料: INSERT INTO CLASSES (name) VALUES ('一班'); INSERT INTO CLASSES (name) VALUES ('二班'); INSERT INTO CLASSES (name) VALUES ('三班'); INSERT INTO CLASSES (name) VALUES ('四班'); 檢視資料 SELECT * FROM classes; +----+------+ | id | name | +----+------+ | 1 | 一班 | | 2 | 二班 | | 3 | 三班 | | 4 | 四班 | +----+------+ 學生插入資料: INSERT INTO student (name,class_id) VALUES ('小趙',1); INSERT INTO student (name,class_id) VALUES ('小錢',2); INSERT INTO student (name,class_id) VALUES ('小孫',3); INSERT INTO student (name,class_id) VALUES ('小李',4); 檢視資料 SELECT * FROM student; +----+------+----------+ | id | name | class_id | +----+------+----------+ | 1 | 小趙 | 1 | | 2 | 小錢 | 2 | | 3 | 小孫 | 3 | | 4 | 小李 | 4 | +----+------+----------+ 若是像插入班級為5的資料 如: INSERT INTO student (name,class_id) VALUES ('小周',5); 報錯: Cannot add or update a child row 我們刪除正在被學生表引用的'四班'試試: DELETE classes WHERE name = '四班'; 出現:Cannot delete or update a parent row:不能刪除主表中的行 我們先刪除學生表中的 '小李'從而解除班級中'四班'的外來鍵約束,再來刪除'四班'(因為小李引用了四班) DELETE FROM student WHERE name = '小李'; 再次刪除classes表中的'四班'; DELETE FROM classes WHERE name = '四班'; 最後: SELECT * FROM classes; +----+------+ | id | name | +----+------+ | 1 | 一班 | | 2 | 二班 | | 3 | 三班 | +----+------+ '四班'被成功刪除! 總結: 1.主表中沒有的資料,在附表中,是不可以使用的. 2.主表中記錄的資料現在正在被附表所引用,那麼主表中正在被引用的資料不可以被刪除 3.若要想刪除,先將附表中的資料刪除在刪除主表資料 4.對於外來鍵約束大家可以聯想 省,市 來進行聯想 (市必須要依賴於省,只要省還有一個市在引用,那麼就不可以刪除省,要不然市就沒有省了. 那麼我們想刪除省,必須要將該省下所有的市全部刪除之後,才可以刪除這個省) 8.如何建表之後新增主鍵約束 CREATE TABLE user4( id INT, name VARCHAR(20) ); 執行DESCRIBE user4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 加入主鍵約束: ALTER TABLE user4 add PRIMARY KEY(id); 再次執行DESCRIBE user4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 刪除主鍵約束: ALERT TABLE user4 DROP PRIMARY KEY; 執行DESCRIBE user4查看錶結構: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 使用modify 修改欄位.新增約束: ALTER TABLE user4 MODIFY id INT PRIMARY key; 使用DESCRIBE user4 查看錶結構: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 給主鍵設定自增長: ALTER TABLE user4 MODIFY id INT AUTO_INCREMENT; 執行 DESCRIBE user4 查看錶結構: +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+
2.如何選擇資料庫? use databasesName;
3.如何檢視該資料庫中有哪些表? show tables;
4.如何查詢表中的資料? select * from tableName;
5.如何退出資料庫伺服器? exit;
6.如何在資料庫伺服器中建立自己的資料庫? create database databaseName;
7.如何建立一個數據表? 建立一個pet表 create TABLE pet( name VARCHAR(20), owner VARCHAR(20), specise VARCHAR(20), sex CHAR(1), brith DATAE, death DATE ); 注意事項: 1:var()與varchar()的區別在於var()是定常的,哪怕儲存的字串沒有達到"()"中數字的上限,var()依然會佔用空格來填充空間.而varchar()則是不定長的,沒有達到"()"中的上限則會自動去掉後面的空格; 2:性別不要用:sex 要用:gender 一個是性 一個是性別; 3:定義最後一個欄位的時候不要加","; 4:上面的"VAR","VARCHAR","DATE"可以用小寫.不過最好用大寫來表示區分關鍵字,若不然也許寫到後面你自己都不知道這個詞是資料庫中的關鍵字還是你自己自定義的一些資料,同時一定要用英文的標點符號也必須半形輸入
8.如何檢視資料表的架構? describe tableName; 說明: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ Field : 欄位的名稱 Type : 欄位的型別,可以有int var varchar Key : 是否是關鍵字 如可以定義為: primary key 或者 unique key ... Default: : 若是該欄位沒有主動設定值的時候,該欄位的預設值是什麼?
9.如何插入資料? INSERT INTO pet VALUES('kk','cc','dog','1','1998-8-2',null); +------+-------+---------+------+------------+-------+ | name | owner | specise | sex | brith | death | +------+-------+---------+------+------------+-------+ | kk | cc | dog | 1 | 1998-08-02 | NULL| +------+-------+---------+------+------------+-------+ 注意: NULL:代表的是空,表示該欄位還沒有資料.千萬不要主動填寫'NULL',這代表你的欄位有一個值叫做'null'. 其實還有一種寫法: INSERT INTO pet(name,owner) VALUES ('xx','cc'); 代表我只在name和owner欄位上面插入的一條,其他皆為NULL/預設值的資料
10.mysql 常用資料型別 注意:金錢最好用int/bigint(整數,單位用分,拿出來進行*100換成元),千萬不要直接用浮點,會有精度損失.
11.如何刪除資料 先插入資料: INSERT INTO pet VALUES('kk1','cc1','dog1','1','1998-1-2',null); INSERT INTO pet VALUES('kk2','cc2','dog2','2','1998-2-2',null); INSERT INTO pet VALUES('kk3','cc3','dog3','1','1998-3-2','1998-12-2'); INSERT INTO pet VALUES('kk4','cc4','dog4','2','1998-4-2',null); 刪除語句: DELETE FROM tablesName WHRER 條件; 修改資料: UPDATE tableName SET 欄位1=值1,欄位2=值2 ... WHERE 條件;
總結:1.table的操作 2.表操作的總結
12.mysql建表中的約束 1.主鍵約束: 它能夠唯一確定一張表中的一條記錄,增加主鍵約束之後,就可以使得欄位不重複而且不為空 create table user( id int PRIMARY KEY, name VARCHAR(20) ); INSERT INTO user VALUES (1,'張三'); +----+------+ | id | name | +----+------+ | 1 | 張三 | +----+------+ 執行DESCRIBE user; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 發現 id是不可以為null 而且 key的值 也變為:PRI(primary) 2.複合主鍵: CREATE TABLE user2( id INT, name VARCHAR(20), password VARCHAR(20), PRIMARY key(id,name) ); 執行DESCRIBE user2; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | NO | PRI | NULL | | | password | varchar(20) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ INSERT INTO user2 VALUES (1,'老王','123456'); INSERT INTO user2 VALUES (2,'老王','123456'); +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | 老王 | 123456 | | 2 | 老王 | 123456 | +----+------+----------+ 說明了複合主鍵只要所有的欄位都不是相同的情況下可以允許其中的欄位重複: INSERT INTO user2 VALUES (1,'老李','123456'); SELECT * FROM user2; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | 老李 | 123456 | | 1 | 老王 | 123456 | | 2 | 老王 | 123456 | +----+------+----------+ 場景:表中有班級號以及學生座位號,我們可以用班級號+學生的座位號可以準確的定位一個學生,如:(1班5號可以準確的確定一個學生) 3.自增約束: CREATE TABLE user3( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) ); 執行DESCRIBE user3; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ INSERT INTO user3(name) VALUES('張三'); INSERT INTO user3(name) VALUES('李四'); +----+------+ | id | name | +----+------+ | 1 | 張三 | | 2 | 李四 | +----+------+ 沒有自定義id值 但是自動生成了id 4.唯一約束: CREATE TABLE user5( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) ); 執行 DESCRIBE user5; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 新增name為唯一約束: ALTER TABLE user5 ADD UNIQUE(name); 執行 DESCRIBE user5; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | UNI | NULL | | +-------+-------------+------+-----+---------+----------------+ 測試:插入資料 INSERT INTO user5(name) VALUES ('cc'); 執行 SELECT * FROM user5; 檢視結果: +----+------+ | id | name | +----+------+ | 1 | cc | +----+------+ 再次插入INSERT INTO user5(name) VALUES ('cc'); 出現:ERROR 1062 (23000): Duplicate entry 'cc' for key 'name' 換個試試 INSERT INTO user5(name) VALUES ('aa'); 執行 SELECT * FROM user5; 檢視結果: +----+------+ | id | name | +----+------+ | 3 | aa | | 1 | cc | +----+------+ 總結一下: 主鍵約束(primary key)中包含了唯一約束 場景:業務需求:設計一張使用者登錄檔,使用者姓名必須要用手機號來註冊,而且手機號和使用者名稱稱都不能為空,那麼: CREATE TABLE user_test( id INT PRIMARY KEY AUTO_INCREMENT COMMENT'主鍵id', name VARCHAR(20) NOT NULL COMMENT'使用者姓名,不能為空', phone_number VARCHAR(20) UNIQUE NOT NULL COMMENT'使用者手機,不能重複且不能為空' ); 執行 DESCRIBE user_test; +--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | phone_number | int(11) | NO | UNI | NULL | | +--------------+-------------+------+-----+---------+----------------+ 這樣的話就達到了每一個手機號都只能出現一次,達到了每個手機號只能被註冊一次. 使用者姓名可以重複,但是手機號碼卻不能重複,複合正常的邏輯需求 5.非空約束: 在上面的藍字中已經添加了非空約束: NOT NULL; name和phone_number都設定了非空,先只設置name引數不設定phone_number引數試一試 INSERT INTO user_test (name) VALUES ('張三'); 會出現Field 'phone_number' doesn't have a default value 兩個非空引數一起設定: INSERT INTO user_test (name,phone_number) VALUES ('張三','12345678901'); +----+------+--------------+ | id | name | phone_number | +----+------+--------------+ | 1 | 張三 | 12345678901 | +----+------+--------------+ 6.預設約束 CREATE TABLE user6( id int PRIMARY KEY AUTO_INCREMENT COMMENT'主鍵id', name VARCHAR(20) NOT NULL COMMENT'使用者姓名不能為空', phone_number VARCHAR(20) NOT NULL COMMENT'使用者手機號,不能為空', status INT DEFAULT 0 COMMENT'使用者狀態0:啟用 1:禁封 預設:0' ); 執行DESCRIBE user6; +--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | phone_number | varchar(20) | NO | | NULL | | | status | int(11) | YES | | 0 | | +--------------+-------------+------+-----+---------+----------------+ 插入資料: INSERT INTO user6(name,phone_number) VALUES ('aa','123'); INSERT INTO user6(name,phone_number) VALUES('bb','1234'); INSERT INTO user6(name,phone_number) VALUES('cc','1263456'); 檢視資料:SELECT * FROM user6; +----+------+--------------+--------+ | id | name | phone_number | status | +----+------+--------------+--------+ | 1 | aa | 123 | 0 | | 2 | bb | 1234 | 0 | | 3 | cc | 1263456 | 0 | +----+------+--------------+--------+ 我們沒有設定status的值,但是給我們建立了預設值 0. 應用場景: 業務需求:找正常的使用者,對這些正常使用者進行發放優惠卷或者積分之類的東西,而被禁封的使用者我們不讓其參加多動. 我們想要封使用者只要將status的值從0改為1就行了,當然我們取使用者的時候必須要先判斷status是否是0.若是1.說明該使用者已經被禁封. 先封手機號為'1234'的使用者: UPDATE user6 SET status = 1 WHERE phone_number= '1234'; SELECT * FROM user6; +----+------+--------------+--------+ | id | name | phone_number | status | +----+------+--------------+--------+ | 1 | aa | 123 | 0 | | 2 | bb | 1234 | 1 | | 3 | cc | 1263456 | 0 | +----+------+--------------+--------+ status為1,說明使用者已經被封,該使用者不可以參加活動 我們取使用者的時候加上status的判斷,如: SELECT * FROM user6 WHERE status = 0; +----+------+--------------+--------+ | id | name | phone_number | status | +----+------+--------------+--------+ | 1 | aa | 123 | 0 | | 3 | cc | 1263456 | 0 | +----+------+--------------+--------+ 7.外來鍵約束 CREATE TABLE classes( id INT PRIMARY KEY AUTO_INCREMENT COMMENT'班級表id', name VARCHAR(20) COMMENT'班級名稱' ); 執行DESCRIBE classes; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT COMMENT'學生表id', name VARCHAR(20) COMMENT'學生姓名', class_id int COMMENT'教室id,這張表中的class_id是classes表中id的值', FOREIGN KEY (class_id) REFERENCES classes(id) ); //FOREIGN :外來 REFERENCES:應用,參考 執行DESCRIBE student; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | | class_id | int(11) | YES | MUL | NULL | | +----------+-------------+------+-----+---------+----------------+ 班級插入資料: INSERT INTO CLASSES (name) VALUES ('一班'); INSERT INTO CLASSES (name) VALUES ('二班'); INSERT INTO CLASSES (name) VALUES ('三班'); INSERT INTO CLASSES (name) VALUES ('四班'); 檢視資料 SELECT * FROM classes; +----+------+ | id | name | +----+------+ | 1 | 一班 | | 2 | 二班 | | 3 | 三班 | | 4 | 四班 | +----+------+ 學生插入資料: INSERT INTO student (name,class_id) VALUES ('小趙',1); INSERT INTO student (name,class_id) VALUES ('小錢',2); INSERT INTO student (name,class_id) VALUES ('小孫',3); INSERT INTO student (name,class_id) VALUES ('小李',4); 檢視資料 SELECT * FROM student; +----+------+----------+ | id | name | class_id | +----+------+----------+ | 1 | 小趙 | 1 | | 2 | 小錢 | 2 | | 3 | 小孫 | 3 | | 4 | 小李 | 4 | +----+------+----------+ 若是像插入班級為5的資料 如: INSERT INTO student (name,class_id) VALUES ('小周',5); 報錯: Cannot add or update a child row 我們刪除正在被學生表引用的'四班'試試: DELETE classes WHERE name = '四班'; 出現:Cannot delete or update a parent row:不能刪除主表中的行 我們先刪除學生表中的 '小李'從而解除班級中'四班'的外來鍵約束,再來刪除'四班'(因為小李引用了四班) DELETE FROM student WHERE name = '小李'; 再次刪除classes表中的'四班'; DELETE FROM classes WHERE name = '四班'; 最後: SELECT * FROM classes; +----+------+ | id | name | +----+------+ | 1 | 一班 | | 2 | 二班 | | 3 | 三班 | +----+------+ '四班'被成功刪除! 總結: 1.主表中沒有的資料,在附表中,是不可以使用的. 2.主表中記錄的資料現在正在被附表所引用,那麼主表中正在被引用的資料不可以被刪除 3.若要想刪除,先將附表中的資料刪除在刪除主表資料 4.對於外來鍵約束大家可以聯想 省,市 來進行聯想 (市必須要依賴於省,只要省還有一個市在引用,那麼就不可以刪除省,要不然市就沒有省了. 那麼我們想刪除省,必須要將該省下所有的市全部刪除之後,才可以刪除這個省) 8.如何建表之後新增主鍵約束 CREATE TABLE user4( id INT, name VARCHAR(20) ); 執行DESCRIBE user4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 加入主鍵約束: ALTER TABLE user4 add PRIMARY KEY(id); 再次執行DESCRIBE user4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 刪除主鍵約束: ALERT TABLE user4 DROP PRIMARY KEY; 執行DESCRIBE user4查看錶結構: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 使用modify 修改欄位.新增約束: ALTER TABLE user4 MODIFY id INT PRIMARY key; 使用DESCRIBE user4 查看錶結構: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 給主鍵設定自增長: ALTER TABLE user4 MODIFY id INT AUTO_INCREMENT; 執行 DESCRIBE user4 查看錶結構: +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+