MySQL基礎和數據庫的創建命令,約束

首先講解一下常見的命令:
net start mysql57 (mysql57 是 服務名), 啓動服務
net stop mysql57 關閉服務
mysql -uroot -p 根據用戶名,密碼登陸數據庫 (root是用戶名)
prompt mysql> 修改提示符

mySQL的默認端口號 3306
默認用戶 root

MySQL語句的規範:
1. 關鍵字和函數名必須大寫;
2. 數據庫名稱,表名稱,字段名稱 必須小寫;
3. SQL語句必須以分號; 結尾
show databases
SHOW variables LIKE”%datadir%” 顯示模糊查詢爲datadir的變量名稱
SELECT VERSION(); 顯示數據庫的版本
SELECT USER(); 顯示當前用戶
SELECT NOW(); 顯示當前時間

數據庫創建,修改,刪除語句

Create Database t1 Default Character set = GBK; // 創建一個數據庫,編碼方式爲 GBK
Create Database t1 if exists t1 Default Character set = GBK; //根上面一句的區別是,如果創建的時候 t1 已經存在了,則不會出現錯誤,只是給出一個 warning
Alter Database t1 default Character set = utf-8; // 修改數據庫的編碼方式爲 utf-8
Drop Database t1 if exists t1; // 刪除數據庫t1

創建的數據庫名字爲test, 數據表的創建爲 user
// 首先進入數據庫test
use test;
// 可以查詢test中的所有表
show tables
// 創建一個表
create Table user(
id int,
name varchar(10),
age tinyint
);
// 爲該表增加一個新的列
alter table user add salary float(8,2);

// 顯示該表的所有列
show columns from user;

// 插入一行數據
insert user values(1,’wang’, 20, 100);
insert user values(1,’wang’); // 不能插入,當你沒有在前面表明要插入的列時,必須要將全部數據補齊,否則插入失敗
insert user(id, name, age, salary) values (2, ‘wang’, 20, 100);

//顯示所有的數據
select * from user;

約束 作用: 保證數據的一致性和完整性, 實現一對一或者一對多的關係

約束分爲列級約束, 表級約束
對一個數據列建立的約束,叫列級約束
對多個數據列建立的約束,叫表級約束

約束類型 :
not null , 非空約束
primary key , 主鍵約束
unique key, 唯一約束
default , 默認約束
foreign key, 外鍵約束

爲表的字段添加不爲空約束
create Table user(
id int not null, // 增加 id字段約束不爲空
name varchar(10),
age tinyint
);
爲表的字段 id 設置爲自增型, 而且自增類型必須要與主鍵組合使用, 定義爲主鍵
create Table user(
id int unsigned not null auto_increment primary key, // 增加 id字段約束不爲空, 無符號整數, 自增, 主鍵
name varchar(10),
age tinyint
);
一個表只有一個主鍵, 主鍵保證記錄的唯一性,主鍵自動不爲null, 主鍵並不意味着只是一個列,可以是幾個列的組合

爲表的字段 name 設置唯一約束,可以保證記錄的唯一性, 唯一約束的字段可以爲空值,一張表可以存在多個唯一約束
create Table user(
id int unsigned not null auto_increment primary key, // 增加 id字段約束不爲空, 無符號整數, 自增, 主鍵
name varchar(10) unique key
age tinyint
);

默認值: 當插入記錄時,如果沒有明確爲字段賦值,則自動賦予默認值 default

外鍵約束
外鍵使用要求:
1.父表和子表使用相同的存儲引擎 , 且只能爲 innodb,禁止使用臨時表
2. 外鍵列(字表) 和參照列(父表) 必須具有相似的數據類型,其中數字長度或者有無符號位必須相同, 字符的長度則可以不同
3. 外鍵列和參照列必須建立索引,如果外鍵列不存在索引,則mysql將自動創建索引, 但是參照列不存在索引,mysql不會爲其自動創建索引

create table provience(
id tinyint unsigned auto_increment,
pname varchar(20) not null,
primary key (id)
);
create table city(
id tinyint unsigned auto_increment,
pname varchar(20) not null,
cityname varchar(20) not null,
foreign key (pname) references provence (pname),
primary key(id)
);
外鍵約束的幾種權限:種約束是一種物理層次的約束,一般不建議使用(設置成no action或者 restrict),我們一般會設置邏輯層次的約束實現跟這個外鍵物理約束相同的功能,比如在父表的參照字段上建立觸發器。 外鍵一般來說可以保證數據的一致性和完整性,但是有時會大大的降低效率,因爲其要進行檢查, 而且不易於後期維護修改,無法擴展(分庫分表的時候,約束無法擴展), 所以可以將外鍵的約束交給程序來做。

cascade : 級聯,從父表刪除或者更新的話,會自動刪除和更新子表中的匹配的行
Set null : 從父表中刪除或者更新行,會將字表中匹配的行的外鍵列設置爲 null, 如果要使用該選項,必須保證字表中的外鍵字段不能設置成not null。
restrict : 拒絕對父表的刪除或者更新操作, 父表中的刪除或者更新不影響字表中的列。
no action : 標準SQL語句,與mysql 中 的 restrict功能相同

// 創建表後爲某一列添加約束
Alter Table user add constraint unique (id);

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